Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

Увеличение скорости 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-2181
It
2004-01-21 08:09
2004.02.02
TreeView


6-2256
kolyan
2003-11-24 07:19
2004.02.02
Как узнать ip-адрес своего компа?


3-1985
www
2003-12-18 16:53
2004.02.02
Несколько запросов в 1-м TQuery


4-2438
sasha_SS
2003-11-25 21:38
2004.02.02
Помогите узнать температуру просессора


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский