访问 - 自定义 "was unable to append all data to table"?
Access - custom "was unable to append all data to table"?
我创建了代码,用于通过 TransferSheet 将数据从 Excel 导入到所需的 table,并构建了查询方法。我也在尝试解决用户在将数据导入数据库时可能出现的所有错误(错误的文件格式、附加 0 行、与数据库中的字段名称不同等),但无法摆脱错误 3059 "was unable to append all data to table" - 当您尝试导入一些无效数据时发生。我想要一个针对此错误的自定义 Msgbox,并停止执行我的查询。这是我的代码 - 简而言之:
Private Sub CmdImport_Click()
Dim SQL As String
Dim dbs As DAO.Database
Set dbs = CurrentDb
On Error GoTo ERR1
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "NEWTABLE", "<Imported file>", True
SQL = " INSERT INTO MyTable (Field1)" & _
" SELECT DISTINCT" & _
" FROM NEWTABLE"
DoCmd.SetWarnings False
dbs.Execute SQL
DoCmd.RunSQL "DELETE * FROM NEWTABLE"
DoCmd.SetWarnings True
ERR1:
If Err.Number = 3059 Then
MsgBox "This file doesn't have proper data to import. Import canceled !"
Exit Sub
End If
End Sub
此代码在 Access 已打开内置 window 后弹出自定义 Msgbox,与 DoCmd.SetWarnings False
无关。如果我在 TransferSheet 方法之前移动 DoCmd.SetWarnings False
,将执行导入并且不显示 Msgbox - 这是错误的。我该如何处理这个错误,有人知道吗??
您可以导入临时 table。
然后使用转换和清理数据的查询阅读此内容,并使用此查询进行进一步处理 - 现在 运行 不会出现由格式错误的数据引起的错误。
我想出了另一种方法来解决这个问题。我已经在 DoCmd.TransferSheet 方法之前放置了我需要的所有控件,包括消除导致 "was unable to append all data to table" 的错误。我添加了检查 excel 文件的代码,如果 Excel 文件数据不符合条件,则不会执行 DoCmd.TransferSheet - 因此根本不会出现错误 "was unable to append all data to table" .这是(首先检查 Excel 文件数据是否适合执行 DoCmd.TransferSheet 导入的部分代码):
Dim XcelApp As Object
Dim x, i
Set XcelApp = CreateObject("Excel.Application")
XcelApp.ScreenUpdating = False
XcelApp.Workbooks.Open("C:\Users\Lucky\Desktop\Test\Sample.xlsx")
With XcelApp
i = XcelApp.Rows(1).Find(What:="Število", LookIn:=xlValues, Lookat:=xlWhole).Column
x = XcelApp.Range(XcelApp.Cells(1, i), XcelApp.Cells(XcelApp.Rows.Count, i).End(xlUp)).Value
For i = 2 To UBound(x)
If Not IsNumeric(x(i, 1)) Then
ExcelApp.Quit
Set ExcelApp = Nothing
MsgBox "This Excel file is not valid"
: Exit Sub
End If
Next i
End With
XcelApp.Quit
XcelApp = Nothing
代码是来自这个已解决线程的 snapshop:
我创建了代码,用于通过 TransferSheet 将数据从 Excel 导入到所需的 table,并构建了查询方法。我也在尝试解决用户在将数据导入数据库时可能出现的所有错误(错误的文件格式、附加 0 行、与数据库中的字段名称不同等),但无法摆脱错误 3059 "was unable to append all data to table" - 当您尝试导入一些无效数据时发生。我想要一个针对此错误的自定义 Msgbox,并停止执行我的查询。这是我的代码 - 简而言之:
Private Sub CmdImport_Click()
Dim SQL As String
Dim dbs As DAO.Database
Set dbs = CurrentDb
On Error GoTo ERR1
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "NEWTABLE", "<Imported file>", True
SQL = " INSERT INTO MyTable (Field1)" & _
" SELECT DISTINCT" & _
" FROM NEWTABLE"
DoCmd.SetWarnings False
dbs.Execute SQL
DoCmd.RunSQL "DELETE * FROM NEWTABLE"
DoCmd.SetWarnings True
ERR1:
If Err.Number = 3059 Then
MsgBox "This file doesn't have proper data to import. Import canceled !"
Exit Sub
End If
End Sub
此代码在 Access 已打开内置 window 后弹出自定义 Msgbox,与 DoCmd.SetWarnings False
无关。如果我在 TransferSheet 方法之前移动 DoCmd.SetWarnings False
,将执行导入并且不显示 Msgbox - 这是错误的。我该如何处理这个错误,有人知道吗??
您可以导入临时 table。
然后使用转换和清理数据的查询阅读此内容,并使用此查询进行进一步处理 - 现在 运行 不会出现由格式错误的数据引起的错误。
我想出了另一种方法来解决这个问题。我已经在 DoCmd.TransferSheet 方法之前放置了我需要的所有控件,包括消除导致 "was unable to append all data to table" 的错误。我添加了检查 excel 文件的代码,如果 Excel 文件数据不符合条件,则不会执行 DoCmd.TransferSheet - 因此根本不会出现错误 "was unable to append all data to table" .这是(首先检查 Excel 文件数据是否适合执行 DoCmd.TransferSheet 导入的部分代码):
Dim XcelApp As Object
Dim x, i
Set XcelApp = CreateObject("Excel.Application")
XcelApp.ScreenUpdating = False
XcelApp.Workbooks.Open("C:\Users\Lucky\Desktop\Test\Sample.xlsx")
With XcelApp
i = XcelApp.Rows(1).Find(What:="Število", LookIn:=xlValues, Lookat:=xlWhole).Column
x = XcelApp.Range(XcelApp.Cells(1, i), XcelApp.Cells(XcelApp.Rows.Count, i).End(xlUp)).Value
For i = 2 To UBound(x)
If Not IsNumeric(x(i, 1)) Then
ExcelApp.Quit
Set ExcelApp = Nothing
MsgBox "This Excel file is not valid"
: Exit Sub
End If
Next i
End With
XcelApp.Quit
XcelApp = Nothing
代码是来自这个已解决线程的 snapshop: