我使用以下代码将 Excel 电子表格导入到 access 数据库中:
Dim appAccess As Access.Application
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "path_to_db"
appAccess.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "my_db_table_name", "path_to_excel_file", hasFieldNames, acImportRange
我的数据库中的第一列是主键。 如果插入具有相同主键的数据,我不会收到任何错误。但是我想得到错误。 如果电子表格中包含重复行,如何强制出错?
最佳答案
考虑使用对 Excel 工作簿的直接 SQL 查询(Access SQL 中允许)来捕获异常错误,而不是使用 TransferSpreadsheet 等便捷方法,如下所示。由于 MS Access 既是 GUI 应用程序又是数据库引擎,因此您需要启用两个不同的引用。使用实际的列、名称和路径调整以下 SQL 语句。
Public Sub CaptureExceptions()
On Error GoTo ErrHandle
Dim strSQL As String
Dim db As DAO.Database ' ENABLE Microsoft Office x.x Access database engine object library
Dim appAccess As Access.Application ' ENABLE Microsoft Access x.x Object Library
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "C:\Path\To\Access\Database.accdb"
strSQL = "INSERT INTO my_db_table_name (Col1, Col2, Col3, ...)" _
& " SELECT Col1, Col2, Col3, ..." _
& " FROM [Excel 12.0 Xml; HDR = Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[SheetName$];"
Set db = appAccess.CurrentDb()
db.Execute strSQL, dbFailOnError
appAccess.CloseCurrentDatabase
ExitHandle:
Set db = Nothing: Set appAccess = Nothing
Exit Sub
ErrHandle:
MsgBox Err.Number & ": " & Err.Description, vbCritical, "RUNTIME ERROR"
Resume ExitHandle
End Sub
关于excel - 如果将重复记录插入表中, Access 不会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61006545/