![]() |
|
|
![]()
|
|
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Доброго времени суток всем!
просмотрев темы в поисковике, не нашел для себя ответа. с БД начал работать недавно- опыта нет(за неадыкватное высказывание прошу прощения). Задача в следующем: есть папка с файлами *.dbf (в которых есть поля: Фамилия |имя|Отчество|ID, ID пустой), так же есть таблица в БД Оракл с теми же полями (Фамилия |имя|Отчество|ID, НО ID не пустой). нужно прочитать данные из *.dbf, сравнить с таблицей Оракла и совпадающим по ФИО полям присвоить ID. и все выложить обратно в *.DBF файл. использую BDE(для открытия DBF) и ADO(соединение с ораклом). создал таблицу(пусть будет ОРА) в Оракле(однотипную что и DBF файл). затем в Table1 вывожу данные из выбранного файла и отражаю все в гриде...теперь хочу передать данные в пустую созданную таблицу(ОРА) Трабла в том что не знаю ( ниразу этого не далал) как передать даные из DBGrida в таблицу Оракловую за ранее всем спасибо кто поможет!!! Добавлено через 4 минуты и 58 секунд кстати вывожу данные в грид вот так: procedure TForm1.btDirIn_ordClick(Sender: TObject); // кнопка Открыть begin Form1.OpenDialog1.Execute; Form1.Edit1.Text:=OpenDialog1.FileName; Label2.Caption:=OpenDialog1.FileName; Form1.Table1.TableName:=OpenDialog1.FileName; Form1.Table1.Active:=true; end; |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
что же тебя тогда сразу на оракл понисло по теме, можно примерно вот так сделать
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Frees - спасибо большое за быстроту ответа сейчас попробую!!!
|
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
занести данные в таблицу оракла из dbf можно вот так
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
ADOQuery1.SQL := 'Select * from table1 where FIO = :FIO'
From Table1 - ADO не поймет! я же Table1 получаю через BDE! |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 23 Всего: 54 |
Table1 это имя твоей тоблицы в оракле с фамилиями и ИД Добавлено через 43 секунды у те бя это как я понимаю Select * from ORA where FIO = :FIO -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Когда-то писал прогу для экспорта из DBF в Oracle (через ADO и DOA соответственно). Вот, прилагаю, может, пригодится.
Присоединённый файл ( Кол-во скачиваний: 23 )
dbf2ora.rar 15,96 Kb-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Респект и уважуха вам ребята!!!
|
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
||||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
const1 = ' INSERT INTO OPA (vorna) Values ( ' :vorna ' ) ';
.... procedure DbfToOrc(); //Выполнить var i: integer; begin Form1.ADOQuery1.SQL.Clear; Form1.ADOQuery1.open; Form1.Table1.First; For i:=0 to Form1.Table1.Fields.Count do begin Form1.ADOQuery1.FieldByName('VORNA').Value:=Form1.Table1.fieldbyname('VORNA').Value; Form1.ADOQuery1.SQL.Add(const1); Form1.ADOQuery1.ExecSQL; Form1.ADOQuery1.Active:=true; Form1.Table1.Next; end; end; :vorna - при такой конструкции разве так будут передаваться данные? у меня Делфи ругается....(( |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Это переменная так обозначается... Но перед тем, ка выполнять запрос переменную нужно объявить и значение ей присвоить... может поэтому ругается? А что за ошибка? Это сообщение отредактировал(а) Kbl4AH - 22.12.2008, 11:56 |
|||
|
||||
| Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ты сам понял, что написал? Да и вообще - весь цикл удали и напиши заново, там полная <она> написана. -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
вот так начинает записывать в таблицу оракла(взял только столбец - ИМЯ), но заполняет только последнее имя, как сделать чтоб все имена заполнял?
const1 = 'INSERT INTO nnr_id (vorna) Values ( '; const3 = ' ); '; procedure DbfToOrc(); // Выполнить
begin Form1.Table1.First; While not Form1.Table1.Eof do begin Form1.ADOQuery1.Open; Form1.ADOQuery1.Edit; Form1.ADOQuery1.FieldByName('Имя').AsString:=Form1.Table1.FieldByName('Имя').AsString; Form1.ADOQuery1.SQL.Add(const1+ Form1.ADOQuery1.FieldByName('Имя').AsString + const3); Form1.Table1.Next; end; |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
AyanTai, посмотри мой пример.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
и еще выдает ошибку "ORA-00933: SQL command not property ended" (( ставлю после Form1.Table1.Next; ->
Form1.ADOQuery1.close; - не помогает(( |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Зачем тебе изменять поля AdoQuery и вручную, и запросом одновременно? Говорю же, посмотри мой пример! -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
туплю...исправил..
procedure DbfToOrc(); // Âûïîëíèòü begin Form1.Table1.First; While not Form1.Table1.Eof do begin Form1.ADOQuery1.Open; Form1.ADOQuery1.Edit; Form1.ADOQuery1.FieldByName('Имя').AsString:=Form1.Table1.FieldByName('Имя').AsString; что здесь надо вставить чтоб записывалось имя - а то у меня просто поверх старого имени записывает новое Form1.Table1.Next; end; Данкинг - не могу понять что у тя в примере подошло бы к моей проге(( |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
||||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Проход в цикле по таблице DBF и запись значений полей в Oracle... -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
ребята все заработало спасибо, но есть одно НО: записывается только последнее значение...как быть???
вот как сделал: procedure DbfToOrc(); // Выполнить begin Form1.Table1.First; While not Form1.Table1.Eof do begin Form1.ADOQuery1.Open; Form1.ADOQuery1.Edit; Form1.ADOQuery1.FieldByName('Имя').AsVariant:=Form1.Table1.FieldByName('Имя').AsVariant; Form1.ADOQuery1.post; Form1.Table1.Next; end; |
|||
|
||||
| Kbl4AH |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Ты записи Table перебираешь, а ADOQuery1 - нет... у тебя получается все разы в цикле только одна запись апдейтится... в ADOQuery1 тоже нужно записи перебирать... наверное, так:
Это сообщение отредактировал(а) Kbl4AH - 23.12.2008, 11:24 |
||||
|
|||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Используйте insert into... , господа!!
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Kbl4AH - не получаетсЯ (((.
Данкинг - сейчас попробую... просто не пойму какая разница как получены данные в грид, и соотв как записываются ...? |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
а если Form1.ADOQuery1.Open; до цикла поставить?
|
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Kbl4AH, и при такой конструкции ничего не получается(((
procedure DbfToOrc(); begin Form1.Table1.First; Form1.ADOQuery1.Open; Form1.ADOQuery1.First; While not Form1.Table1.Eof do begin Form1.ADOQuery1.Edit; Form1.ADOQuery1.FieldByName('bukrs').AsVariant:=Form1.Table1.FieldByName('bukrs').AsVariant; Form1.ADOQuery1.post; Form1.ADOQuery1.Next; Form1.Table1.Next; end; |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Данкинг - тыж тут только создаешь таблицу! где передача данных?? или я уже туплю...покажи.
zapros.sql.Text:='create table '+trim(LabeledEdit1.Text)+'2'+' (taff varchar2 (5))'; |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
Перечитал заново 1-й пост... что сделать-то нужно? из грида вставить записи в оракловую таблицу?
не понял что-тут написано... что значит сравнить с таблицей Оракла? и передать данные в пустую созданную таблицу(ОРА)? так таблица в Оракле пустая или нет? |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ну правильно, а дальше там цикл по заполнению должен быть. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
Kbl4AH, - нужно просто передать данные в пустую таблицу Оракла(таблица в Оракле создана и имеет ту же структуру что и файл DBF), в гриде я файл DBF отразил теперь надо просто перегнать данные в таблицу Оракла.
PS: а потом уже будет таблица полученная преобразовываться... Данкинг, - у меня не хватает какого-то компонента ... мож из-за этого. таблицу создает, а данные не передает...( что делать??? |
|||
|
||||
| AyanTai |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 28.10.2008 Репутация: нет Всего: нет |
все ребята сделал...всем спасибо большое!!!
отдельное спасибо: Данкинг, Kbl4AH, Brees - респект за помощь... кстати сделал вот так: procedure IsertToOrcl(); begin ADOQuery1.SQL := 'INSERT INTO ORA (Имя)VALUES (:Имя)'; Table1.Open; Table1.First; while not Table1.Eof do begin ADOQuery1.Close; ADOQuery1.ParamByName('bukrs').Value := Table1.FieldByName('bukrs').value; ADOQuery1.ExecSQL; Table1.Next; end; end; Это сообщение отредактировал(а) AyanTai - 24.12.2008, 08:29 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ну да, у меня же Direct Oracle Access используется. Не за что! -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Kbl4AH |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 741 Регистрация: 1.4.2008 Где: Вятка Репутация: 6 Всего: 15 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |