Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация DataPump в Delphi, Как DataPump так быстро заливает файлы. 
:(
    Опции темы
CKBeg
Дата 1.12.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.9.2006

Репутация: нет
Всего: нет



Мастера написал на Delphi аналог DataPump. Но прога моя в разы в скорости отстает от DataPump.
Причем именно при вставке скорость низкая. Пишу под BDE. Данные из Oracle в Paradox заливаю.  
Теперь вопрос как прога DataPump так быстро заливает? 
может быть он не через Table1.Insert вставляет? Если так, то где можно об этом почитать?

p.s. Datapump- прога для перемещения данных из одной базы в другую. Поставляется вместе с Delphi
PM MAIL   Вверх
x77
Дата 4.12.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



CKBeg, для быстрой вставки нужно использовать TQuery и вставлять непосредственно командой insert into. это во первых. во вторых, если для работы используется TDataSet либо его потомок - неплохо бы ему говорить DisableControls/EnableControls. 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
CKBeg
Дата 5.12.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.9.2006

Репутация: нет
Всего: нет



Цитата

для быстрой вставки нужно использовать TQuery и вставлять непосредственно командой insert into


Нет. Ты не правильно говоришь. Как раз таки для файловой БД(в нашем случае Paradox) не надо юзать SQL, 
для этого лучше Table1.Insert. 

Цитата

TDataSet либо его потомок - неплохо бы ему говорить DisableControls/EnableControls


Да ты прав насчет этого, но у меня визулизация вставляемых записей не используется. 

Я так посмотрел может быть он(Datapump) юзает компонент TBatchMove с опцией Copy. А вообще 
где можно про это почитать? нет разницы на каком языке
PM MAIL   Вверх
x77
Дата 5.12.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



потестить, увы, не вышло - через несколько секунд интенсивной вставки вылетает "Table is full". будет время - попробую на ноуте с базой на флешке, там, наверное, более наглядно будет....

что касается BatchMove, то почитать про него можно в исходниках ;) он, собственно, делает вот что:

Код

      Check(DbiBatchMove(nil, Source.Handle, nil, Destination.Handle,
        EBATMode(BatchMode), FieldCount, PWord(FieldMap), nil, nil, 0,
        ConvertName(FKeyViolTableName, SKeyViolName),
        ConvertName(FProblemTableName, SProblemName),
        ConvertName(FChangedTableName, SChangedName),
        @FProblemCount, @FKeyViolCount, @FChangedCount,
        FAbortOnProblem, FAbortOnKeyViol, FMovedCount, FTransliterate));


функция dbiBatchMove, как раз, и выполняет все операции. с достаточной долей вероятности можно предположить, что она работает с таблицами напрямую... поскольку внутренний код BDE закрыт, остаётся только юзать уже готовую функцию так, как это сделано в TBatchMove (компонент описан в DbTables и ничего сверхьестественного из себя не представляет).


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
CKBeg
Дата 10.12.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.9.2006

Репутация: нет
Всего: нет



Цитата

потестить, увы, не вышло - через несколько секунд интенсивной вставки вылетает "Table is full"


для этой ошибки я поставил в BDE настройках: Native->Paradox->BLOCK SIZE=64 ТЫС. С КОПЕЙКАМИ

Полезная штука. Аж в разы увеличивается вместимость paradox'а. А вообще ты в какое время сидишь в нете, я по аське постучусь.

Добавлено @ 16:22 
да нет тестить не стоит, я и SQL'ом пробовал и Table1.Insert'ом тоже. Последняя в разы быстрее
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.