Ошибка времени выполнения 3265, когда VBA запускается для чтения файла, а затем загрузки в файл в таблицу SQL - PullRequest
0 голосов
/ 19 июня 2020

Я получаю ошибку при запуске этого кода. Кто-нибудь может помочь? Новое в этой разработке от Excel до SQL таблицы. Мои цели этого скрипта - прочитать файл xlsx, а затем загрузить его в таблицу SQL. Попытка использовать существующий код.

есть ли для меня какой-либо образец в файле загрузки, исправленный в столбце, который в качестве даты дд / мм / гггг, поскольку таблица sql принимает только гггг-мм- Формат даты dd, как показано ниже, код на Rs1.

    Sub orderintake()
Dim filename As String
filename = uFN.sFile

If filename = "" Then Exit Sub

Application.ScreenUpdating = False

Sheets("Upload").Select


Dim RS1 As New ADODB.Recordset
Dim RS2 As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim cnDB As New ADODB.Connection
Dim strCN As String
Dim strSQL As String
Dim strSQL2 As String


'Application.Workbooks.Open filename

strCN = "provider= Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & filename

strSQL = "select * from [Upload$]"

cn.Open strCN

RS1.Open strSQL, cn

cnDB.Open dbconn.sConn

strSQL2 = "delete from orderintake where cmonth='" & RS1(7).Value & "'"
cnDB.Execute strSQL2

strSQL2 = "select * from orderintake where 1=0"
RS2.Open strSQL2, cnDB, adOpenKeyset, adLockOptimistic

Do Until RS1.EOF
    If IsNull(RS1(0).Value) = True Or Trim(RS1(0).Value) = "" Then Exit Do
    DoEvents
    RS2.AddNew

    'strSQL2 = "insert into orderintake values("

    For i = 0 To RS2.Fields.Count - 2

        RS2(i + 1).Value = RS1(i).Value

    Next i

    RS2.Update

    RS1.MoveNext

Loop

RS1.Close
cn.Close
cnDB.Close

'Application.Workbooks(Right(filename, Len(filename) - InStrRev(filename, "\"))).Close

Application.ScreenUpdating = True

MsgBox "Done!"

End Sub


Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Dim sCN As String

Function sConn() As String


Dim sFile As String, sLine As String, sDB As String

Open sFile For Input As #1

Line Input #1, sLine
sConn = "FILEDSN=" & sDB & ";uid=" + Trim(sLine)
Line Input #1, sLine
sConn = sConn + ";pwd=" + Trim(sLine)

Close #1


End Function


Function sFile() As String
        With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .Show

        ' Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            sFile = .SelectedItems(lngCount)
        Next lngCount

    End With

End Function
...