首页 > 解决方案 > 在 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 

标签: sqlcsvms-accessvba

解决方案


由于导入向导可以做到这一点(并且有效),请使用它!

一次性准备:

  • 将示例导入文件复制到将运行所有已保存导入的通用位置
  • 手动导入表“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

推荐阅读