Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Увеличение скорости TADOBachMove   Найти похожие ветки 

 
Grotesk ©   (2004-01-05 00:58) [0]

Доброго времени суток!
Пишу универсальную для основных типов баз данных процедуру TADOBachMove. Имеется код, который перебрасывает данные из одного TDataSet в другой.


while not SourceDataSet.Eof do begin
DestinDataSet.Append;
for I:=0 to SourceDataSet.FieldDefs.Count - 1 do begin
DestinDataSet.Fields[I].Value:=SourceDataSet.Fields[I].Value;
end;
DestinDataSet.Post;
SourceDataSet.Next;
end;


Все работает, но как всегда хочется улучшений :)

Вопрос: как ещё можно организовать такую процедуру.
Цель: увеличение скорости.


 
Grotesk ©   (2004-01-05 12:17) [1]

?


 
Delirium ©   (2004-01-05 12:19) [2]

ltBatchOptimistic


 
JibSkeart ©   (2004-01-05 12:20) [3]

а что просто передача указателя не катит ?
или копию сделать ?


 
Delirium ©   (2004-01-05 12:24) [4]

Копию надо делать через "ADODB.Stream", а тут как я понял, просто прокачка данных из одного источника в другой.


 
Stas ©   (2004-01-05 12:24) [5]

А с помощью SQL ?
Типа:
Insert Into TableDest
select* from tableSource


 
Delirium ©   (2004-01-05 12:27) [6]

А если источник и получатель - разные ?


 
Grotesk ©   (2004-01-05 12:49) [7]


> Delirium © (05.01.04 12:19) [2]
> ltBatchOptimistic

Пожалуйста немного поподробнее


> JibSkeart © (05.01.04 12:20) [3]
> а что просто передача указателя не катит ?
> или копию сделать ?

Имеются два TADODataSet. Связаны каждый со своей таблицей из разных баз данных (таблицы идентичны). Смысл процедуры - переложить данные из одной таблицы в другую. Если можно сделать копией или указателем, буду благодарен за пример.

SQL запрос не катит. В моем случае не поддерживаются запросы типа
SELECT * INTO [dBase 5.0; DataBase=D:\].[TestTable#DBF] FROM S_DISP


 
Delirium ©   (2004-01-05 14:11) [8]

"Пожалуйста немного поподробнее" - про LockType ?!, - это в Help.


 
sniknik ©   (2004-01-05 15:14) [9]

DestinDataSet.Post; лишняя операция в цикле, вынеси за пределы, проверку на режим не забудь чтобы не глючило на пустой таблице.


 
Grotesk ©   (2004-01-05 22:07) [10]


> sniknik © (05.01.04 15:14) [9]
> DestinDataSet.Post; лишняя операция в цикле, вынеси за пределы,
> проверку на режим не забудь чтобы не глючило на пустой таблице.

Это уже сделал. Все работает, но все равно медленно. 14000 строк копирует из Access примерно минуты 3 на SQL Server, про ODBC + Paradox, dBase вообще молчу. (Про то что из Access можно SELECTом знаю, но не в моем случае)


> Delirium © (05.01.04 14:11) [8]
> "Пожалуйста немного поподробнее" - про LockType ?!, - это
> в Help.

Понял, почитаю.

Господа. Дайте кто нибудь ссылку на информацию про библиотеку ADOX.


 
Grotesk ©   (2004-01-05 22:33) [11]

Похоже ссылок и так полно. Посмотрю что там можно нарыть по поводу переноса таблиц...


 
sniknik ©   (2004-01-05 23:14) [12]

> Господа. Дайте кто нибудь ссылку на информацию про библиотеку ADOX.
поиши на своей машине ADO210.CHM, мс офис ставил? найдеш. (есть в 2000/xp если полные)


 
Grotesk ©   (2004-01-05 23:19) [13]


> sniknik ©

Спасибо, уже нашел. Всячески читаю :). В интернете тоже есть кое что.


 
Grotesk ©   (2004-01-06 01:11) [14]

Похоже ADOX работает только с Access :((
Не пойдеть. Дальше изучать пока нету смысла. В будущем возможно будет поддерживать остальные форматы. Пока нет. Продолжаем поиски ...


 
Grotesk ©   (2004-01-06 01:32) [15]


> Delirium © (05.01.04 12:19) [2]
> ltBatchOptimistic


Прошу прощения. Ступил. Скорость действительно увеличилась.

Но все равно медленно. Может я слишком много хочу?
Например хочу попробовать кидать целыми строками, а то и блоками... Или переподключить заполненный ADODataSet к таблице-получателю и сделать что нибудь вроде BatchAppend.
Все это пока что идеи.
Подскажите где поискать примеры (кроме справки, там я сейчас копаю)


 
Delirium ©   (2004-01-06 16:36) [16]

В общем случае решения нет. Для каждой конкретной БД есть свои, уникальные уловки быстрого импорта данных.


 
Grotesk ©   (2004-01-07 19:28) [17]

Удалось увеличить скорость в среднем в полтора-два раза используя объект Recordset и методы AddNew и UpdateBach.
Только появился вопрос, который пожалуй стоит вынести в отдельную тему ...



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
3-2029
ККВ
2004-01-06 13:43
2004.02.02
Как поместить данные из двух Query в один DBGrid?


1-2096
Марат
2004-01-20 08:15
2004.02.02
HotKey


3-2020
Term
2004-01-06 15:43
2004.02.02
Посоветуйте компонент который бы 100% подерживал бы клиперовские


1-2175
Sergey B
2004-01-20 23:43
2004.02.02
Не работают процедуры...


14-2334
Qwet
2004-01-10 20:49
2004.02.02
Перезагрузка Windows Xp