Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июн 17 2002 08:54 Заголовок сообщения: Помогите разобраться в алгоритме. |
|
|
Требуеться:
Просмотреть две таблицы(1.dbf,2.dbf) и сравнить записи. Записи одинаковые не трогать записи отсутствующие в приемнике(1.dbf) добавить из источника(2.dbf).
Как это можно реализовать, по ниаболее простому пути. Просьба объяснять по понятней и не отсылать к книгам и справкам.
Пробовал так: КОД из двух циклов. (for1)Нахожу первую запись в приемнике и сравниваю ее с источником((for1)пробегаюсь по всей таблице), далее беру в премнике вторую запись и пробегаюсь по источнику и т.д. ПРОБЛЕМА: Так как мой цикл состоит:
for(TDestination->First(); !TDestination->Eof; TDestination->Next()) { for(Tdocum->First(); !Tdocum->Eof; Tdocum->Next()) { if(Tdocum->FieldValues["docname"] == TDestination->FieldValues["docname"]); добавляю запись Tdocum->Insert(); Tdocum->..... Tdocum->...... } } то при несовпадении выполняеться код добавления, а запись есть на 200 строке. TDestination - таблица источник Tdocum - табл. приемник
Извиняюсь за не выразительность, если не понятно чего хочу, то попробую еще раз сказать. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пн Июн 17 2002 14:01 Заголовок сообщения: Re: Помогите разобраться в алгоритме. |
|
|
Да по моему элементарно делается самим SQL-языком. Объединяем две таблицы, записи в которых не совпадают.
SELECT * WROM table1, table2 where (fd1.tablefd1.table2) AND (fd2.table1fd1.table2) и т.д.
Что получилось - пихаем в таблицу 1.
На фига все эти линейные сортировки делать? Пусть их само ядро SQL делает, если надо. |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июн 17 2002 14:12 Заголовок сообщения: Re: Помогите разобраться в алгоритме. |
|
|
Так БД у меня локальная.(даже не база, а отдельн.табл.*dbf.)
Все равно использовать TQuery? |
|
Вернуться к началу |
|
|
anthony
Зарегистрирован: 21.05.2002 Сообщения: 845 Откуда: Petrozavodsk
|
Добавлено: Пн Июн 17 2002 14:51 Заголовок сообщения: Ессно! Ты почитай по F1 - они и слокальными таблицами работать умеют. Только надо, что бы BDE стояла. (-) |
|
|
- |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июн 17 2002 19:12 Заголовок сообщения: Я знаю что можно. Но не хотел использовать, так как.... |
|
|
программа закончена и нигде не использовал. Вот понадобилось одна функция и теперь может включу конечно, но еще попробую по другому. |
|
Вернуться к началу |
|
|
Valera Гость
|
Добавлено: Вт Июн 18 2002 03:39 Заголовок сообщения: Тафтология? Нет? (+) |
|
|
Если записи совпадают то они есть в 2, либо добавляются из 2. Значит все нужные записи есть в 2. Зачем тогда сравнивать? |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Вт Июн 18 2002 18:34 Заголовок сообщения: Нет...... |
|
|
Записи есть одинаковые, но не все, так как другая таблица заполняется на другом ПК, и потом, из нее добавляються те что отсутствуют в другой. |
|
Вернуться к началу |
|
|
anthony
Зарегистрирован: 21.05.2002 Сообщения: 845 Откуда: Petrozavodsk
|
Добавлено: Ср Июн 19 2002 00:34 Заголовок сообщения: А не легче тогда хранить таблицу (и всю БД) на одном компе (типа, на сервере)?! (-) |
|
|
- |
|
Вернуться к началу |
|
|
Valera Гость
|
Добавлено: Ср Июн 19 2002 02:41 Заголовок сообщения: Причем одну, ту в которой есть ВСЕ записи? (-) |
|
|
- |
|
Вернуться к началу |
|
|
BONHOMME Гость
|
Добавлено: Ср Июн 26 2002 10:59 Заголовок сообщения: Только dbf не предназначены для многопользовательской работы... |
|
|
А при большом количестве записей твой алгоритм будет ну очень долго работать.
Делай сравнение за период. Тогда количество сравнений ограничится периодом. |
|
Вернуться к началу |
|
|
|