Чем делать импорт и экспорт данных в Interbase

Это скорее не статья, а перечень средств для решения указанной задачи, вроде списка инструментария из downloads.

Собственно, тип импорта и экспорта данных бывает:

Соответственно, готовые инструменты импорта-экспорта годятся в основном для первых двух типов задачи, всевозможные драйверы - для второго и третьего, и в третьем случае как правило используется только код приложений, написанных самостоятельно.

Итак, перечислим все возможные инструменты и способы именно в этом порядке:

Для компонент и драйверов необходимо отметить следующее: многие при первом подходе к "снаряду" в качестве источника экспортируемых/импортируемых данных используют TTable, TQuery, IBQuery, IBDataSet и подобные компоненты. Поскольку указанные компоненты кэшируют результат запроса в памяти, это приводит к исчерпанию памяти на машине, где находится копирующая данные программа, или к серьезному замедлению процесса копирования. Поэтому подобные компоненты ни в коем случае нельзя использовать для экспорта/импорта - вместо них надо использовать TIBSQL (IBX) или pFIBQuery (FIBPlus). Эти компоненты не имеют кэша и работают только с одной записью в памяти. Поэтому экспорт/импорт данных будет максимально эффективным.
По указанной причине не следует импортировать данные например в IBDataSet или TTable - при импорте каждой записи будет перевыполняться запрос, читающий данные (SelectSQL или автоматически генерируемый в TTable или "живом" TQuery select), а значит чем больше импортируется записей, тем медленнее с их количеством будет происходить импорт. При экспорте с использованием этих компонент работа будет происходить быстрее, но все равно считываемые для экспорта данные будут накапливаться в буфере компонента, что вызовет постоянный рост используемой приложением памяти (и опять же вызовет замедление экспорта вплоть до ошибки out of memory).

Таким образом, можно вывести основное правило - для чтения данных нужно использовать компонент, выполняющий запрос без кэширования данных, а для вставки данных использовать компонент, только выполняющий команду insert, и ничего больше.


(с) iBase, 2004