Форум: "Базы";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
ВнизКак быстро перекачать данные между двумя DataSet? Найти похожие ветки
← →
yaJohn (2002-10-10 15:23) [0]Есть 2 TDataSet с полностью совпадающими полями. Нужно все записи из первого дописать (append) во второй.
Тупой цикл по источнику с Insert в приемнике и циклом по всем полям работает недопустимо медленно. Или это я торможу?
Мда, для справки: источник - ClientDataSet, приемник - ADODataSet (или, возможно, ADOQuery).
Заранее спасибо.
← →
sniknik (2002-10-10 15:27) [1]Clone не пробовал? может пройдет.
Duplicates another dataset in the calling component
procedure Clone(Source: TCustomADODataSet; LockType: TLockType = ltUnspecified);
← →
yajohn@web.de (2002-10-10 15:43) [2]No. Starie dannie v istochnike doljni ostatsia. I istochnik - TClientDataSet.
← →
Johnmen (2002-10-10 15:54) [3]>Нужно все записи из первого дописать (append) во второй.
Наводящий вопрос :
датасета или таблицы, стоящей за датасетом ???
← →
Hawk2 (2002-10-10 16:22) [4]А не проще SQL запросом?
← →
yaJohn (2002-10-10 16:44) [5]Из клиент-датасета (который получат данные от DCOM сервера) закачать в Access таблицу.
Разные ДБ, поэтому на SQL не выйдет :(
← →
Johnmen (2002-10-10 16:49) [6]Тогда придется построчно, сканируя ClientDataSet.
← →
sniknik (2002-10-10 16:56) [7]yaJohn © Разные ДБ.
Насколько разные? прекрестные запросы MSSQL, Accsess, dbf, Exell и тд. все что имеет OLE DB провайдера, вполне возможны. и применяются, кое где с успехом :-).
← →
yaJohn (2002-10-10 17:08) [8]Вах! На сервере лежит DBF, из которого нужны - сотня-тысяча записей. Весь DBF - немерянно жирный. Сотню-тысячу записей нужно дописать к таблице в mdb. Доступ к серверу - по TCP-IP, возможно через инет.
Посему, на сервере стоит МИДАС сервер, который читает DBF и возвращает результат клиенту. Клиент пишет их в mdb через ADO.
Интуиция мне подсказывает, что прямой АДО коннект к треклятому ДБФ - не лучший путь в данном случае.
Да, собственно о проблемме. Прокачка данных по сети просходит примерно в 10 раз быстрее, чем их локальное сохранение в mdb. ;(((
← →
sniknik (2002-10-10 17:15) [9]интуиция нигогда не лжот, но иногда залуждается :-) в меру сил и возможностей.
тут недавно выяснили что закачать селектом текст (предварительно сохранив) гораааздо быстрее чем строками из памяти перекладывать. возможно и тебе будет быстрей, сохранять на локале а после закачивать селектом?
← →
MsGuns (2002-10-10 17:17) [10]А почему бы тупо не воспользоваться компонентами DBE и хорошим проверенным BatchMove`ом ?
Или я что-то недопонимаю ?
← →
yaJohn (2002-10-10 18:09) [11]Я написал длинную тираду, но передумал и скажу кратко: mdb+bde=головная боль. И у юзера и у админа и у меня.
Всем , конечно, спасибо за помощь, но вернувшись к оригинальной постановке вопроса: как дописать один ТDataSet к другому?
← →
Best Before 2024 (2002-10-10 18:17) [12]Похоже, что в цикле по записям.
Мб, InsertRecord/Appendrecord быстрее цикла по полям +
LockType := ltBatchOptimistic;
+
UpdateBatch
← →
Лена (2002-10-11 09:28) [13]insert into table1
select *
from table2
where условия
Если поля в таблицах действительно идентичны
← →
LordOfSilence (2002-10-11 11:09) [14]Честно признаюсь, сам не пробовал никогда то,
что сейчас собираюсь предложить. Но, возможно,
это Вас натолкнет на дальнейшие продуктивные мысли.
TClientDataSet.SaveToFile( "MyFile.xml", dfXML );
TADODataSet.LoadFromFile( "MyFile.xml" );
Идея в том, что, вроде бы, оба типа этих
DataSet`ов поддерживают XML-формат.
← →
Best Before 2024 (2002-10-11 12:53) [15]2 LordOfSilence © (11.10.02 11:09)
>>TClientDataSet.SaveToFile( "MyFile.xml", dfXML );
>>TADODataSet.LoadFromFile( "MyFile.xml" );
Тогда потеряются данные в TADODataSet, а надо добавлять!
← →
LordOfSilence (2002-10-11 12:59) [16]To Best Before 2024
Хорошо, согласен.
Но ведь можно закачать во "временный" TADODataSet, а уже
из него перекинуть чем-то вроде "Select/Insert... into/from..."
в реальный.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c