Ошибка времени выполнения '-2147217900 (80040e14)'

0

Я пытаюсь обновить базу данных 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, затем тот же Ошибка с сообщением содержит это сообщение

https://i.stack.imgur.com/o4cy0.jpg

Теги:
excel

2 ответа

0
Лучший ответ

Я изменил код.. и теперь он работает, создав таблицу со строкой соединения, содержащую команду обновления 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



0

Скорее всего, есть ошибка с оператором 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)

  • 0
    спасибо за ответ, можете ли вы увидеть картинку в новом обновлении вопроса, пожалуйста?
  • 0
    Так что это ошибка синтаксиса SQL, но отсюда невозможно точно определить проблему. Попробуйте выполнить его непосредственно для вашей базы данных (не из VBA) и исправьте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню