Зачем нужно подключаться к базе данных MySQL с помощью excel VBA (через разъем ODBC, как показано в публичной функции, приведенной ниже), в записи INSERT как для операторов SELECT, но получать сообщение об ошибке при попытке и DELETE записи? Когда я подключаюсь к учетной записи Root, у меня все те же проблемы. Я новичок в MySQL и использую базу данных Sakila, которая появляется, когда вы устанавливаете программу.MySQL ODBC Connector w/Excel VBA - не удается УДАЛИТЬ записи
Что я могу пропустить?
Ниже перечислены мои функции, которые я использую для подключения к базе данных, а также образец кода, который работает для операторов INSERT и SELECT, а затем код, который имеет ошибку с моим оператором DELETE.
ПЕРЕСМОТР ...
Оказывается, это была просто ошеломляюще ошибка в моем заявлении MySQL, как указано в принятом ответе. Тем не менее, для тех, кто споткнется об этом в будущем, которые хотят подключиться к MySQL через Excel-VBA, вы можете найти достоинства в функциях connectDatabase() и closeDatabase(), поскольку большинство кода, на который я наткнулся на ODBC Connector, имеет пользователей создавая их соединение в менее чистом формате.
Public DBCONT As Object
Public Function connectDatabase()
Set DBCONT = CreateObject("ADODB.Connection")
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim sConn As String
Server_Name = "localhost"
Database_Name = "sakila"
User_ID = "admin"
Password = "password"
sConn = "Driver={MySQL ODBC 5.1 Driver};Server=" & _
Server_Name & ";Database=" & Database_Name & _
";UID=" & User_ID & ";PWD=" & Password & ";Option=3;"
DBCONT.Open sConn
DBCONT.cursorlocation = 3
End Function
Public Function closeDatabase()
On Error Resume Next
DBCONT.Close
Set DBCONT = Nothing
On Error GoTo 0
End Function
Следующий код работает:
Private Sub Workbook_Open()
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
Dim sqlstr As String
sqlstr = "SELECT * FROM Actor"
Call connectDatabase
rs.Open sqlstr, DBCONT
Dim actorfirstname As String
Dim actorlastname As String
Dim mysqlinsert As String
actorfirstname = InputBox("Enter first name")
actorlastname = InputBox("Enter last name")
mysqlinsert = "INSERT INTO Actor(first_name,last_name) VALUES ('" & actorfirstname & "','" & actorlastname & "')"
DBCONT.Execute mysqlinsert
If rs.RecordCount > 0 Then
For i = 1 To rs.RecordCount
For x = 1 To rs.Fields.Count
If i = 1 Then ThisWorkbook.Sheets("Sheet1").Cells(1, x).Value = rs.Fields(x - 1).Name
With ThisWorkbook.Sheets("Sheet1")
.Cells(i + 1, x).Value = rs(x - 1)
End With
Next x
rs.movenext
Next i
Else
MsgBox "No Records Found"
End If
rs.Close
Set rs = Nothing
Call closeDatabase
End Sub
Следующие коды не работают ... это ошибки на линии DBCONT.Execute sqlstrDelete с ошибкой времени выполнения «-2147217900 (80040E14) ': Ошибка автоматизации
Sub deleteRecord()
Dim sqlstrDelete As String
sqlstrDelete = "DELETE * FROM Actor WHERE last_name='TEST'"
Call connectDatabase
DBCONT.Execute sqlstrDelete
Call closeDatabase
End Sub
Вы проверили это за пределами 'vba'? 'DELETE * FROM Actor WHERE last_name = 'TEST'' – whytheq