Мне нужно вставить 800000 записей в таблицу MS Access. Я использую Delphi 2007 и компоненты TAdoXxxx
. Таблица содержит несколько целочисленных полей, одно поле с плавающей запятой и одно текстовое поле с одним символом. Существует первичный ключ в одном из целочисленных полей (который не является автоинкейном) и два индекса в другом целом числе и поле с плавающей запятой.
Вставка данных с использованием AdoTable.AppendRecord(...)
занимает> 10 минут, что недопустимо, поскольку это происходит каждый раз, когда пользователь начинает использовать новую базу данных с программой. Я не могу предварительно заполнить таблицу, поскольку данные поступают из другой базы данных (которая не доступна через ADO
).
Мне удалось получить около 1 минуты, записав записи в текстовый файл с разделителями табуляции и используя объект tAdoCommand
для выполнения
insert into table (...) select * from [filename.txt] in "c:\somedir" "Text;HDR=Yes"
Но мне не нравятся накладные расходы.
Наверное, должен быть лучший путь.
EDIT:
Некоторая дополнительная информация:
- MS Access был выбран, потому что он не требует какой-либо дополнительной установки на целевой машине (машинах), и вся база данных содержится в одном файле, который можно легко скопировать.
- Это однопользовательское приложение.
- Данные будут вставлены только один раз и не будут изменяться в течение всего срока службы базы данных. Тем не менее, таблица содержит одно дополнительное поле, которое используется в качестве флага для указания того, что соответствующая запись в другой базе данных была обработана пользователем.
- Одна минута приемлема (до 3 минут тоже будет), и мое решение работает, но оно кажется мне слишком сложным, поэтому я подумал, что должен быть более простой способ сделать это.
- После того, как данные были вставлены, производительность таблицы довольно хорошая.
- Когда я начал планировать / реализовывать функцию программы, работающей с базой данных Access, таблица не требовалась. Это стало необходимым позже, когда заказчик запросил другую функцию. (Разве это не всегда так?)
EDIT:
Из всех ответов, которые я получил до сих пор, кажется, что у меня уже есть самый быстрый способ для вставки такого количества данных в таблицу Access. Спасибо всем, я ценю вашу помощь.