Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.016 c
1-2074
T__Alex
2004-01-20 12:56
2004.02.02
Как програмно определить кодировку текст. файла


3-2022
666
2004-01-06 16:01
2004.02.02
dbgrid


1-2174
V-A-V
2004-01-21 09:52
2004.02.02
Запуск DOS задачи


14-2299
Calm
2004-01-11 18:02
2004.02.02
Как бы вы раскрутили свой проект в инете?


1-2212
Sergant
2004-01-20 11:33
2004.02.02
Можно ли сделать Hint у TrayIcon больше 128 символов?




   Наверх