excel - 如果将重复记录插入表中, Access 不会引发错误

标签 excel vba ms-access

我使用以下代码将 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

Exception Message

关于excel - 如果将重复记录插入表中, Access 不会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61006545/

相关文章:

ms-access - VB6 Ms Access 数据库编辑大量记录

ms-access - 相对路径如何在Access 2007中指定链接表?

Excel 在行内排列列

java - Apache poi Excel折线图点

excel - 计算两个单元格之间的差异之和

excel - 如何为一张索引表中的每个工作表创建一个超链接?

excel - 另一个类(class)的 VBA 提升事件

c# - 条件表达式中的数据类型与 REPLACE 不匹配,没有要替换的内容

vba - 如何编写一个控件来减少VBA代码模块中的单元格值

excel - VBA 验证列表默认值