Количество пакетов записей EXCEL, переданных в MySQL в VBA

#mysql #excel #vba #variables

#mysql #excel #vba #переменные

Вопрос:

введите описание изображения здесь я пишу код VBA, хочу обновить записи csv в памяти компьютера до 100 записей для пакета, а затем вставить в базу данных MySQL, чтобы повысить эффективность передачи 49776 записей, а не запись за записью.

Используя F8 для преобразования моего кода построчно, чтобы изученные переменные не могли получить значение из записи Excel, как показано ниже, затем перейдите к назначенному при ошибке процессу «Tran_Err». Не знаю, как это исправить.

         myRS![tDate] = Cells(myRow, 1).Value
        myRS![secID] = Cells(myRow, 2).Value
        myRS![grade] = Cells(myRow, 3).Value
        myRS![ppl] = Cells(myRow, 4).Value
        myRS![shares] = Cells(myRow, 5).Value
        myRS![percentage] = Cells(myRow, 6).Value 
 

Вся ваша любезная помощь будет высоко оценена. Мой код:

     Sub addALL()
    Dim myCon As ADODB.Connection
    Dim myRS As ADODB.Recordset
    Dim myRow As Long, myTmpRow As Long
    
    'connection setup
    Set myCon = New ADODB.Connection
    
    myCon.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};" amp; _
               "Server=localhost;" amp; _
               "Database=tdcc;" amp; _
               "User=root;" amp; _
               "Password=root;" amp; _
               "Option=3;"
    'database setup
    Set myRS = New ADODB.Recordset
    myRS.Open "tdcc", myCon, adOpenDynamic, adLockOptimistic
    myRow = 2
    On Error GoTo Tran_Err
    'begins to add
    myCon.BeginTrans
    'loop until column A is null
    Do Until Cells(myRow, 1).Value = ""
        'add record
        myRS.AddNew        
        myRS![tDate] = Cells(myRow, 1).Value
        myRS![secID] = Cells(myRow, 2).Value
        myRS![grade] = Cells(myRow, 3).Value
        myRS![ppl] = Cells(myRow, 4).Value
        myRS![shares] = Cells(myRow, 5).Value
        myRS![percentage] = Cells(myRow, 6).Value 
      
        'update here, yet to append to database
        myRS.Update
        myRow = myRow   1
        'append to database for 100 entries
        If myRow Mod 100 = 3 Then
            myCon.CommitTrans
            myCon.BeginTrans
        End If
    Loop
    'append to database for the residual records
    myCon.CommitTrans
    
    'clearance of events
    myRS.Close
    Set myRS = Nothing
    myCon.Close
    Set myCon = Nothing
    MsgBox myRow - 2 amp; " records has been well appended"
    Exit Sub
    
Tran_Err:
    'put into litter of incorrect update
    myCon.RollbackTrans
    'move to error record position
    Application.Goto Rows(myRow), True
    myTmpRow = Int((myRow - 2) / 100) * 100
    MsgBox "Record # " amp; myRow amp; " error happens, " amp; myTmpRow amp; " records has been appended"
    Set myRS = Nothing
    myCon.Close
    Set myCon = Nothing
End Sub
 

введите описание изображения здесь

Комментарии:

1. Разве вы не хотите UpdateBatch вместо Update ?

2. Спасибо за ваш вклад, сделав попытку обновления вместо UpdateBatch и не работает. Кажется, моя проблема связана с настройкой переменной, такой как MYR! [TDate]= Ячейки (myRow, 1).оператор value не может получить данные из записи EXCEL.

3. Есть ли дата в исходной ячейке?

4. Опять же, нет, исходная ячейка cells(myRow,1) равна 20210326, думаю, это должна быть строка. Спасибо за ваши руки.

5. Следует добавить сообщение об ошибке для справки: код ошибки равен 6, «Переполнение», в инструкции MYR! [TDate]= Ячейки (myRow, 1), ячейки (myrow,1) должны быть 20210326. Спасибо