![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Увеличение скорости 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]
?