![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как быстро перекачать данные между двумя 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);