SQL ошибка при импорте данных Excel в Access - PullRequest
0 голосов
/ 07 апреля 2020

Я импортирую Excel в доступе с использованием VBA, и у меня появляется следующая ошибка. Я считаю, что ошибка в sql, будет ли это связано с тем, как я объявил имя столбцов?

база имеет 31 столбец

Поместите все столбцы в виде строки в базе в доступе, только даты, которые этого не делают, просто чтобы проверить, была ли это ошибка

Может ли кто-нибудь сказать мне, в чем была ошибка?

Code:

Option Explicit

Private Sub CommandButton1_Click()


Dim MDB  As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim FD   As ADODB.Field
Dim SQL   As String



Dim W  As Worksheet



Dim UltCel As Range



Dim Ln As Long
Dim Col As Integer





 Set W = Sheets("Plan1")
 Ln = 2
 Col = 1
 W.Select
 W.Range("A1").Select

 MDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Usuário\Desktop\DatabasePerfildePerda.mdb;Persist Security Info=False;"

 Set UltCel = W.Cells(W.Rows.Count, 1).End(xlUp)



 Do While Ln <= UltCel.Row

 SQL = "INSERT INTO tbdados3"
 SQL = SQL & "(Mes por Extenso, Secao Industrial, Tipo, by-pass, Sigla, Motivo, Classificacao, Responsavel pela Solucao, Area, Causa Raiz, Turno, Data Inicio, Hora Inicio, Data Fim, Hora Fim, Tempo, Taxa Alimetacao, Reducao Alimentacao, TAG, Componente, Ponto de Causa, Observacoes, Usuario, Unidade, Familia, Ano, Mês, Ano Mes, Dia, Inicio da ocorrencia, Final da Ocorrencia, Frequencia de Falha)"
 SQL = SQL & "values"
 SQL = SQL & "('" & W.Cells(Ln, Col).Value & "', "
 SQL = SQL & "'" & W.Cells(Ln, Col + 1).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 2).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 3).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 4).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 5).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 6).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 7).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 8).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 9).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 10).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 11).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 12).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 13).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 14).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 15).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 16).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 17).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 18).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 19).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 20).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 21).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 22).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 23).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 24).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 25).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 26).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 27).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 28).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 29).Value & "' , "
 SQL = SQL & "'" & W.Cells(Ln, Col + 30).Value & "' ) "


RS.Open SQL, MDB



Ln = Ln + 1
Col = 1
Application.StatusBar = Ln
DoEvents

 Loop

 MDB.Close







Set W = Nothing
Set MDB = Nothing
Set RS = Nothing
Set FD = Nothing
Set UltCel = Nothing



MsgBox "Processo Concluido"








End Sub

1 Ответ

0 голосов
/ 07 апреля 2020

Всякий раз, когда вы работаете с данными в SQL в Access, практическое правило заключается в том, что любые текстовые данные заключаются в одинарные кавычки, любые данные даты заключаются в хэши, а числовые данные c не нуждаются ни в каких переносах. , Возможно, вы захотите добавить Debug.Print SQL в свой код после того, как вы его построили, чтобы увидеть в окне непосредственного выполнения, что вы пытаетесь выполнить.

Кроме того, наличие имен полей с пробелами в проблемах вызывает, так что вы должны либо переименуйте поля без пробелов, либо оберните имена полей в квадратные скобки.

Возможно, лучшим вариантом является ссылка на файл Excel (с помощью TransferSpreadsheet), а затем вставка данных в таблицу:

DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12Xml, "tblTemp", "J:\Downloads\test.xlsx", True
CurrentDb.Execute "INSERT INTO Table3 ( F1, F2, F3 ) " _
    & " SELECT Customer, Product, Order " _
    & " FROM tblTemp;"

Вам потребуется удалить предыдущую связанную таблицу, если вы запускаете ее несколько раз.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...