sql - 在 ms 访问中自动加载 csv 数据,并包括 autonumer 主键 ID 字段
问题描述
我在使用DoCmd.transfertext
脚本加载的 ms 访问表中添加主键自动编号 ID 字段时遇到问题。我尝试了一个 sql 脚本,甚至手动执行,但出现以下错误:“超出文件共享锁计数。增加 MaxLocksPerFile 注册表项”。
我尝试过使用 来解决这个问题DAO.DBEngine.SetOption dbmaxlocksperfile,1500000
,但后来我得到另一个错误,说我已达到内存限制,请注意数据集有 900 000 行。
有趣的是,如果我使用文本导入向导手动加载文件,我可以将向导设置为添加主键 ID 字段,并且效果很好。我知道DoCmd.TransferText
不允许添加自动编号主键字段,所以我想知道如何最好地使用自动编号 ID 字段加载我的数据?
请参阅下面的代码:
Function Data_Load()
Dim strSQL
DoCmd.TransferText acImportDelim, "xxx Import Specification", "xxx", "C:\xxx.csv", True
DAO.DBEngine.SetOption dbMaxLocksPerFile, 1500000
strSQL = "ALTER TABLE PDQ ADD COLUMN ID AUTOINCREMENT"
Set rs = CurrentDb.CreateQueryDef("strSQL")
DoCmd.RunSQL (strSQL)
DAO.DBEngine.SetOption dbMaxLocksPerFile, 9500
End Function
解决方案
由于导入向导可以做到这一点(并且有效),请使用它!
一次性准备:
- 将示例导入文件复制到将运行所有已保存导入的通用位置
- 手动导入表“myTable”,并将其保存在最后,例如“myTable_Import”。
然后你可以运行它DoCmd.RunSavedImportExport
:
Sub TestSavedImport()
On Error Resume Next
DoCmd.DeleteObject acTable, "myTable"
On Error GoTo 0
' copy your actual import file to the generic path\file
' that you used during the manual import
' ...
' run saved import
DoCmd.RunSavedImportExport "myTable_Import"
' rename to actual target name
DoCmd.Rename "RealTableName", acTable, "myTable"
End Sub
推荐阅读
- postgresql - 如何对接我的 dotnet core + postgresql 应用程序?
- alloy-ui - AlloYUI:带有 showNextYear 和 showPreviousYear 按钮的 aui 日期选择器?
- python - 使用 for 循环在字典中创建内部键
- ubuntu - 如何使用 Ubuntu 18.04 降级到以前版本的 Mono
- delphi - 如何在 Delphi 10.3 中启用源文件删除
- javascript - 无法将复杂对象数组正确转换为 CSV
- javascript - 用钩子反应上下文防止重新渲染
- angular - 如何实现变更检测以使给定的示例有效
- python - 将 pandas 列中的名称更改为以大写字母开头
- css - 如何创建不随背景图像跳转的关键帧平滑连续循环?