Автоматизация процесса импорта базы данных. Проблема опережения курсора

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Добрый день! Пишу прогу, которая должна из одной mdb базы в другую по связанным полям забросить данные. Подключаюсь через ADO, MS Jet 4.0. бросаю две ADO таблицы, связываю их по ключевым полям через MasterSource, тоже самое делаю для второй базы данных. Затем с помощью двух вложенных циклов двигаюсь курсором по записям первой таблицы и сравнивая значения во второй таблице и определяю добавлять или нет запись. По логической цепочке вроде все ровно. Но на деле иначе- некоторые записи отрываются от своих родительских записей и попадают к другим родительским в переносимую базу. Когда делаю эти же действия без цикла, просто выбрав запись и нажав кнопку - все срабатывает как надо... Как только работает цикл - похоже где-то курсор не успевает переключится на запись и вот результат оторванных записей.... Как с этим можно бороться? ))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

боюсь просить код цикла... :)
Изображение
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Ща могу условно сказать как он выглядит:

Код: Выделить всё

repeat
 InTable1.insert;
 InTable1Catalog.text:=table1catalog.text;
 InTable1.post;

   repeat
      ...
      <здесь присваиваю значение из внешней таблицы во внутреннюю таблицу по полям>
      InTable2.insert; 
      InTable2Name.text:=table2name.text;
      <и т.д.>
      InTable2.Post;
      ...
     table2.next;
   until table2.eof;

 table1.next;
until table1.eof
Учитывая, что InTable1 связан с InTable2, а Table1 связан с Table2 через MasterSource
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Столкнулся тут еще с одним не понятным явлением ))) Стал в режиме отладки просматривать как работает цикл и вот что обнаружил:

InTable2Name.text Имеет значение "Тест1"
Table2name.text имеет значение "Пример1"

После прохождения курсора на строке:

InTable2Name.text:=table2name.text;

значение у InTable2Name не меняется...... парадокс какой-то блин.... и при этом не все проходы цикла дают такой результат... в большинстве случаев значение все же меняется.

Складывается ощущение, что где-то что-то не успевает обновиться..
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Еще момент - в подчиненной таблице не могу реализовать Table.Locate() - какие-то записи находит а какие-то нет, по не понятным причинам... и частичное содержание найти пробовал, и полностью скопированное значение пробовал... не прыгает курсор на запись...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Я добился кое чего! Сузил круг проблемы до 2-х таблиц! Я выкладываю часть своей базы и кусок программы который реализован в моем проекте. Проблема следующая - использую компоненту DBLookupComboboxEh для удобства быстрого поиска записи из таблицы. Т.е можно прям в компоненте набирать часть значения и компонента сама предложит найденный вариант. Собственно в этом примере две АДО таблицы связанные между собой по ключевому полю, 2 грида и 2 Lookup'а для поиска. Верхний лукап работает безукоризненна, а вот второй не дает искать некоторые записи, ввожу например "доска" а курсор набирает "Корова" что вообще не поддается логики. Кто сможет мне объяснить в чем косяк?
Исходник+кусок базы


P.S. попробовал применить другую компоненту вместо DBLookupComboboxEh, например RzDBLookupComboBox1 - результат не изменился, поиск так и не хочет работать...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

1. нафига в таблице SpravPriob поле Naprav, если там есть поле Key по которому можно взять значение.
2. эффект странный (ehlib не установлен, смотрю по коду). А что будет если таблицы поменять на квери (я с АДОтабами не работал никогда)?
Изображение
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

поле Naprav нужно чтобы пользователь видел какое значение будет взято. По полю Key это значение связывается во вторую таблицу. Ща попробую через Квери )))



Такой же эффект......

Могу выложить EhLib библиотеки для Дельфы 5-9, 2007
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

ггг :)
сейчас заново скачал проект, ибо удалил каталог случайно... в ехе всё работает :)
Изображение
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Как работает????????? Не может быть!!! Попробуй выбрать сверху - Молодняк с/х животных, а снизу что-нибудь написать в поисковой строке...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить