Импорт 200000 строк в Excel в SQL с помощью макроса VBA

У меня проблема при передаче информации из Excel в SQL с помощью макроса.

Когда вы запускаете макрос, файл начинает загружать строки, но внезапно останавливается со следующей ошибкой "Overflow (6)", и это приводит к обработке каждых 32676 строк.

Сначала я думал, что это было что-то в записях, но когда я возвращаюсь к исполнению, предложение начинается снова и снова останавливается на записи 32676,

Я пытаюсь загрузить файл Excel с более чем 200000 строк, каждая запись состоит из 25 столбцов.

Я могу сделать что-то не так, чтобы это произошло.

Я делюсь кодом транзакции.

Private Sub CommandButton1_Click()
Dim conn As New ADODB.Connection
conn.CommandTimeout = 0
    Dim iRowNo As Integer
    Dim PK_ID As String, CUST_ID As Long, DOC_TYPE As String, BILL_DOC As Long, REFERENCE As String, INV_CON As String, ORDER_SALER As String, INV_REF As String, DOC_NUM As Long, GL As Long, DOC_DATE As Double, DUE_DATE As Double, ECURRENCY As String, DOC_AMNT As Currency, USD_AMNT As Currency, PAY_TERM As String



    With Sheets("ONREPSAP")

        'Abrimos conexion con el SQL server
        conn.Open "Provider=SQLOLEDB;Data Source=,1433;Initial Catalog=AmericanMovil;User ID=;Password=;Encrypt=True;"

        'Omitimos la linea de encabezados
        iRowNo = 2

        'Loop until empty cell in CustomerId
        Do Until .Cells(iRowNo, 1) = ""
            PK_ID = .Cells(iRowNo, 1)
            CUST_ID = .Cells(iRowNo, 2)
            DOC_TYPE = .Cells(iRowNo, 3)
            BILL_DOC = .Cells(iRowNo, 4)
            REFERENCE = .Cells(iRowNo, 5)
            INV_CON = .Cells(iRowNo, 6)
            ORDER_SALES = .Cells(iRowNo, 7)
            INV_REF = .Cells(iRowNo, 8)
            DOC_NUM = .Cells(iRowNo, 9)
            GL = .Cells(iRowNo, 10)
            DOC_DATE = .Cells(iRowNo, 11)
            DUE_DATE = .Cells(iRowNo, 12)
            ECURRENCY = .Cells(iRowNo, 13)
            DOC_AMNT = .Cells(iRowNo, 14)
            USD_AMNT = .Cells(iRowNo, 15)
            PAY_TERM = .Cells(iRowNo, 16)



            'Generamos y ejecutamos la QUERY SQL para importar las lineas de excel a SQL
            conn.Execute "insert into dbo.ONREPSAP (PK_ID, CUST_ID, DOC_TYPE, BILL_DOC, REFERENCE, INV_CON, ORDER_SALES, INV_REF, DOC_NUM, GL, DOC_DATE, DUE_DATE, ECURRENCY, DOC_AMNT, USD_AMNT, PAY_TERM) values ('" & PK_ID & "', '" & CUST_ID & "', '" & DOC_TYPE & "', '" & BILL_DOC & "', '" & REFERENCE & "', '" & INV_CON & "', '" & ORDER_SALES & "', '" & INV_REF & "', '" & DOC_NUM & "', '" & GL & "', '" & DOC_DATE & "', '" & DUE_DATE & "', '" & ECURRENCY & "', '" & DOC_AMNT & "', '" & USD_AMNT & "', '" & PAY_TERM & "')"

            iRowNo = iRowNo + 1
        Loop

        MsgBox "Reporte Cargado Correctamente | The report has finish to Uploading"


        conn.Close
        Set conn = Nothing

    End With
End Sub

В Отладке VBA выбирает iRowNo + 1 перед "Циклом"

1 ответ

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

Вы должны объявить Dim iRowNo As Long вместо Integer

Здесь Сводка Типа данных

Integer uses 2 bytes and Range from -32,768 to 32,767
Long    uses 4 bytes and Range from -2,147,483,648 to 2,147,483,647
Другие вопросы по тегам