首页 文章

访问 - 自定义“无法将所有数据附加到表”?

提问于
浏览
0

我创建了用于将数据从Excel导入到所需表中的代码,通过TransferSheet和构建的Query方法 . 我也试图解决用户在将数据导入db时所能做的所有错误(错误的文件格式,追加0行,字段名称与DB等不一样),但无法摆脱错误3059“无法追加所有数据到表“ - 当您尝试导入一些无效数据时会发生这种情况 . 我想为此错误定制一个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

无论 DoCmd.SetWarnings False ,Access allready打开内置窗口后,此代码弹出自定义Msgbox . 如果我在TransferSheet方法之前移动 DoCmd.SetWarnings False ,则执行导入并且不显示任何Msgbox - 这是错误的 . 我怎么能处理这个错误,有谁知道?

2 回答

  • 0

    您可以导入临时表 .

    然后使用转换和清除数据的查询读取此内容,并使用此查询进行进一步处理 - 现在将运行时不会出现错误数据导致的错误 .

  • 0

    我找到了解决这个问题的另一种方法 . 我已经在DoCmd.TransferSheet方法之前放置了我需要的所有控件,包括消除导致“无法将所有数据附加到表”的错误 . 我添加了用于检查excel文件的代码,如果Excel文件数据与条件不匹配,则不执行DoCmd.TransferSheet - 因此错误“无法将所有数据附加到表”根本不显示 . 这是(首先检查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:loop through Excel columns

相关问题