Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
14-101448
Cobalt
2002-10-04 12:20
2002.10.31
Настройка компа с двумя сетевухами


1-101277
Pegas
2002-10-22 14:26
2002.10.31
Вопрос по DLL


7-101548
vvant
2002-08-28 16:02
2002.10.31
Как определить какое приложение в данный момент активно


1-101333
brestmarket
2002-10-20 16:35
2002.10.31
Как записать программу на CD, чтобы ее нельзя было скопировать?


14-101451
Ghg
2002-10-10 09:55
2002.10.31
Принципиальные отличия писания программ в C++ Builder и MVS C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский