Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Увеличение скорости TADOBachMove [D6]


Grotesk ©   (2004-01-05 00:58:00) 

Доброго времени суток!
Пишу универсальную для основных типов баз данных процедуру 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-07 19:28:00) [1]

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


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

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


Grotesk   (2004-01-06 01:32:00) [3]


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


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

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


Grotesk   (2004-01-06 01:11:00) [4]

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


Grotesk   (2004-01-05 23:19:00) [5]


> sniknik ©

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


sniknik   (2004-01-05 23:14:00) [6]

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


Grotesk   (2004-01-05 22:33:00) [7]

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


Grotesk   (2004-01-05 22:07:00) [8]


> 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.


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

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


Delirium   (2004-01-05 14:11:00) [10]

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


Grotesk   (2004-01-05 12:49:00) [11]


> 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 12:27:00) [12]

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


Stas   (2004-01-05 12:24:00) [13]

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


Delirium   (2004-01-05 12:24:00) [14]

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


JibSkeart   (2004-01-05 12:20:00) [15]

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


Delirium   (2004-01-05 12:19:00) [16]

ltBatchOptimistic


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

?


Наверх

Титульная страница Поиск, карта сайта Написать письмо