Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как быстро перекачать данные между двумя DataSet? [D5]


yaJohn ©   (2002-10-10 15:23:00) 

Есть 2 TDataSet с полностью совпадающими полями. Нужно все записи из первого дописать (append) во второй.
Тупой цикл по источнику с Insert в приемнике и циклом по всем полям работает недопустимо медленно. Или это я торможу?

Мда, для справки: источник - ClientDataSet, приемник - ADODataSet (или, возможно, ADOQuery).

Заранее спасибо.


LordOfSilence   (2002-10-11 12:59:00) [1]

To Best Before 2024
Хорошо, согласен.
Но ведь можно закачать во "временный" TADODataSet, а уже
из него перекинуть чем-то вроде "Select/Insert... into/from..."
в реальный.


Best Before 2024   (2002-10-11 12:53:00) [2]

2 LordOfSilence © (11.10.02 11:09)
>>TClientDataSet.SaveToFile( "MyFile.xml", dfXML );
>>TADODataSet.LoadFromFile( "MyFile.xml" );
Тогда потеряются данные в TADODataSet, а надо добавлять!




LordOfSilence   (2002-10-11 11:09:00) [3]

Честно признаюсь, сам не пробовал никогда то,
что сейчас собираюсь предложить. Но, возможно,
это Вас натолкнет на дальнейшие продуктивные мысли.

TClientDataSet.SaveToFile( "MyFile.xml", dfXML );
TADODataSet.LoadFromFile( "MyFile.xml" );

Идея в том, что, вроде бы, оба типа этих
DataSet`ов поддерживают XML-формат.


Лена   (2002-10-11 09:28:00) [4]

insert into table1
select *
from table2
where условия

Если поля в таблицах действительно идентичны


Best Before 2024   (2002-10-10 18:17:00) [5]

Похоже, что в цикле по записям.
Мб, InsertRecord/Appendrecord быстрее цикла по полям +
LockType := ltBatchOptimistic;
+
UpdateBatch


yaJohn   (2002-10-10 18:09:00) [6]

Я написал длинную тираду, но передумал и скажу кратко: mdb+bde=головная боль. И у юзера и у админа и у меня.
Всем , конечно, спасибо за помощь, но вернувшись к оригинальной постановке вопроса: как дописать один ТDataSet к другому?


MsGuns   (2002-10-10 17:17:00) [7]

А почему бы тупо не воспользоваться компонентами DBE и хорошим проверенным BatchMove`ом ?
Или я что-то недопонимаю ?


sniknik   (2002-10-10 17:15:00) [8]

интуиция нигогда не лжот, но иногда залуждается :-) в меру сил и возможностей.

тут недавно выяснили что закачать селектом текст (предварительно сохранив) гораааздо быстрее чем строками из памяти перекладывать. возможно и тебе будет быстрей, сохранять на локале а после закачивать селектом?


yaJohn   (2002-10-10 17:08:00) [9]

Вах! На сервере лежит DBF, из которого нужны - сотня-тысяча записей. Весь DBF - немерянножирный. Сотню-тысячу записей нужно дописать к таблице в mdb. Доступ к серверу - по TCP-IP, возможно через инет.
Посему, на сервере стоит МИДАС сервер, который читает DBF и возвращает результат клиенту. Клиент пишет их в mdb через ADO.
Интуиция мне подсказывает, что прямой АДО коннект к треклятому ДБФ - не лучший путь в данном случае.
Да, собственно о проблемме. Прокачка данных по сети просходит примерно в 10 раз быстрее, чем их локальное сохранение в mdb. ;(((


sniknik   (2002-10-10 16:56:00) [10]

yaJohn © Разные ДБ.
Насколько разные? прекрестные запросы MSSQL, Accsess, dbf, Exell и тд. все что имеет OLE DB провайдера, вполне возможны. и применяются, кое где с успехом :-).


Johnmen   (2002-10-10 16:49:00) [11]

Тогда придется построчно, сканируя ClientDataSet.


yaJohn   (2002-10-10 16:44:00) [12]

Из клиент-датасета (который получат данные от DCOM сервера) закачать в Access таблицу.
Разные ДБ, поэтому на SQL не выйдет :(


Hawk2   (2002-10-10 16:22:00) [13]

А не проще SQL запросом?


Johnmen   (2002-10-10 15:54:00) [14]

>Нужно все записи из первого дописать (append) во второй.
Наводящий вопрос :
датасета или таблицы, стоящей за датасетом ???


yajohn@web.de   (2002-10-10 15:43:00) [15]

No. Starie dannie v istochnike doljni ostatsia. I istochnik - TClientDataSet.


sniknik   (2002-10-10 15:27:00) [16]

Clone не пробовал? может пройдет.

Duplicates another dataset in the calling component
procedure Clone(Source: TCustomADODataSet; LockType: TLockType = ltUnspecified);


Наверх

Титульная страница Поиск, карта сайта Написать письмо