2016-02-29 2 views
0

Я создал код для импорта данных из Excel в нужную таблицу, через TransferSheet и построил метод запроса. Я также пытаюсь разрешить все ошибки, которые пользователь мог бы сделать при импорте данных в db (неправильный формат файла, добавление 0 строк, имена полей не такие же, как в DB и т. Д.), Но не может избавиться от Error 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 

Этот код всплывает пользовательский MsgBox после Access Allready открывает встроенный в окно, независимо от DoCmd.SetWarnings False. Если я переведу DoCmd.SetWarnings False перед методом TransferSheet, импорт будет выполнен, и Msgbox не будет отображаться - что неправильно. Как я могу справиться с этой ошибкой, кто-нибудь знает?

+0

Похоже, это один жесткий рок , Все еще не нашел ничего, что могло бы сработать. – LuckyLuke82

ответ

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

0

Вы можете импортировать временную таблицу.

Затем прочитайте это с запросом, который преобразует и очищает данные и использует этот запрос для дальнейшей обработки - который теперь будет работать без ошибок, вызванных искаженными данными.