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