#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. Спасибо