Я пытаюсь обновить базу данных mysql с помощью excel, это хорошо работает только на одном столбце из базы данных mysql, но если другие.. excel vba возвращает эту ошибку
"Ошибка времени выполнения" -2147217900 (80040e14) "
здесь мой код
Sub ud()
Dim cmdCommand As New ADODB.Command
Dim recSet As New ADODB.Recordset
Dim cn As ADODB.Connection
Dim i As Integer
Dim sheet1 As Worksheet
Dim code, datesold As String
tf = Range("O2")
sf = Range("H3")
ActiveWorkbook.ActiveSheet.Activate
Set sheet1 = ActiveWorkbook.ActiveSheet
Set Rng = Range("Table_Query_from_20172018_1")
Set cn = New ADODB.Connection
cn.ConnectionString = "Driver=MySQL ODBC 5.3 ANSI
Driver;SERVER=localhost;PWD=12345678;UID=root;DATABASE=bio;PORT=3306"
cn.Open
cmdCommand.ActiveConnection = cn
Loop sheet1 data rows
For i = 1 To Rng.Rows.Count
ID = Rng.Cells(i, 5).Value
shf = Rng.Cells(i, 6).Value
wazaef = Rng.Cells(i, 7).Value
emtihan = Rng.Cells(i, 11).Value
strSQLCommand = "UPDATE students INNER JOIN (e1a INNER JOIN (eshfwi INNER JOIN wanda ON eshfwi.ID = wanda.ID) ON e1a.ID = wanda.ID) ON students.ID = e1a.ID SET eshfwi." & tf & " = " & shf & ", wanda." & tf & " = " & wazaef & ", e1a." & tf & " = " & emtihan & " where eshfwi.ID = " & ID & " and wanda.ID=" & ID & " and e1a.ID=" & ID & ";"
cmdCommand.CommandText = strSQLCommand
cmdCommand.CommandType = adCmdText
Set recSet = cmdCommand.Execute
Next i
End Sub
update: инструкция sql работает с другим столбцом в той же таблице.. но когда я обновляю другую, эта ошибка появляется. Теперь я попытался удалить столбец и создать новый. код работал с некоторым ID, затем тот же Ошибка с сообщением содержит это сообщение
Я изменил код.. и теперь он работает, создав таблицу со строкой соединения, содержащую команду обновления sql, а затем использовал "для следующего", чтобы закодировать команду по идентификатору:
Sub ud()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim sheet1 As Worksheet
tf = Range("O2")
sf = Range("H3")
Range("P8").Select
Application.CutCopyMode = False
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DSN=20172018;", Destination:=Range("$P$8")).QueryTable
.CommandText = Array("SELECT e1.ID FROM e1 where id=1")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Query_from_20172018t"
.Refresh BackgroundQuery:=False
End With
Act
iveWorkbook.ActiveSheet.Activate
Set sheet1 = ActiveWorkbook.ActiveSheet
Set Rng = Range("Table_Query_from_20172018_1")
For i = 1 To Rng.Rows.Count
ID = Rng.Cells(i, 5).Value
shf = Rng.Cells(i, 6).Value
wazaef = Rng.Cells(i, 7).Value
emtihan = Rng.Cells(i, 11).Value
With ActiveWorkbook.Connections("Connection").ODBCConnection
.CommandText = Array("UPDATE students INNER JOIN e1a ON students.ID = e1a.ID SET e1a." & tf & " = " & emtihan & " where students.class='" & sf & "' and e1a.ID=" & ID & ";")
End With
ActiveWorkbook.RefreshAll
Next i
For j = 1 To Rng.Rows.Count
ID = Rng.Cells(j, 5).Value
shf = Rng.Cells(j, 6).Value
wazaef = Rng.Cells(j, 7).Value
emtihan = Rng.Cells(j, 11).Value
With ActiveWorkbook.Connections("Connection").ODBCConnection
.CommandText = Array("UPDATE students INNER JOIN eshfwi ON students.ID = eshfwi.ID SET eshfwi." & tf & " = " & emtihan & " where students.class='" & sf & "' and eshfwi.ID=" & ID & ";")
End With
ActiveWorkbook.RefreshAll
Next j
For k = 1 To Rng.Rows.Count
ID = Rng.Cells(k, 5).Value
shf = Rng.Cells(k, 6).Value
wazaef = Rng.Cells(k, 7).Value
emtihan = Rng.Cells(k, 11).Value
With ActiveWorkbook.Connections("Connection").ODBCConnection
.CommandText = Array("UPDATE students INNER JOIN wanda ON students.ID = wanda.ID SET wanda." & tf & " = " & emtihan & " where students.class='" & sf & "' and wanda.ID=" & ID & ";")
End With
ActiveWorkbook.RefreshAll
Next k
End Sub
Скорее всего, есть ошибка с оператором SQL.
Поместите выражение Debug.print strSQLCommand
прежде чем писать его в commandText
, проверьте содержимое в окне Immediate и попробуйте выполнить его на консоли sql. Поскольку мы не знаем ваших типов данных, трудно сказать, но, возможно, вам не хватает котировок. Предполагая, что tf
является текстовым полем, код должен быть ... SET eshfwi." & tf & " = '" & shf & "'"...
(Подсказка: гораздо лучше использовать параметр, например, https://codereview.stackexchange.com/questions/144063/passing-multiple-parameters-to-an-sql -query)