【发布时间】:2009-02-06 20:24:18
【问题描述】:
我需要在 MS Access 表中插入 800000 条记录。我正在使用 Delphi 2007 和 TAdoXxxx 组件。该表包含一些整数字段、一个浮点字段和一个只有一个字符的文本字段。其中一个整数字段(不是 autoinc)有一个主键,另一个整数和浮点字段有两个索引。
使用AdoTable.AppendRecord(...) 插入数据需要> 10 分钟,这是不可接受的,因为每次用户开始在程序中使用新数据库时都会这样做。我无法预填充表格,因为数据来自另一个数据库(无法通过ADO 访问)。
通过将记录写入制表符分隔的文本文件并使用tAdoCommand 对象执行,我设法缩短到大约 1 分钟
insert into table (...) select * from [filename.txt] in "c:\somedir" "Text;HDR=Yes"
但我不喜欢这样的开销。
我认为一定有更好的方法。
编辑:
一些附加信息:
- 之所以选择 MS Access,是因为它不需要在目标计算机上进行任何额外安装,并且整个数据库都包含在一个文件中,可以轻松复制。
- 这是一个单用户应用程序。
- 数据将只插入一次,并且在数据库的生命周期内不会更改。但是,该表包含一个附加字段,用作标志,以指示另一个数据库中的相应记录已被用户处理。
- 一分钟是可以接受的(最多 3 分钟也可以),我的解决方案有效,但对我来说似乎太复杂了,所以我认为应该有更简单的方法来做到这一点。
- 插入数据后,表的性能相当不错。
- 当我开始规划/实施与 Access 数据库一起使用的程序的功能时,不需要该表。直到后来,当客户要求另一个功能时,它才变得有必要。 (不总是这样吗?)
编辑:
从到目前为止我得到的所有答案来看,我似乎已经找到了将这么多数据插入 Access 表的最快方法。感谢大家,感谢您的帮助。
【问题讨论】:
-
您需要多快?考虑到它花了 10 分钟,现在只需要 1
-
1 分钟插入 800000 条记录似乎是可以接受的。
-
1 分钟是完全可以接受的,但我想离开而不创建这个文本文件。
-
创建文本文件有什么问题?
-
感觉不对。我已经在内存中获取了数据,但为了将其插入数据库,我必须先将其存储到文件中。
标签: delphi ms-access ado delphi-2007