为什么能够使用 Excel VBA(通过 ODBC 连接器,如我在下面所示的公共(public)函数中所示)连接到 MySQL 数据库以插入记录以及 SELECT 语句,但当我尝试和时收到错误语句删除记录?当我连接 Root 帐户时,我仍然遇到同样的问题。我是 MySQL 新手,正在使用安装程序时附带的 Sakila 数据库。
我可能会错过什么?
请参阅下文,了解我用来连接数据库的函数以及适用于 INSERT 和 SELECT 语句的代码示例,以及 DELETE 语句出现错误的代码。
修订...
事实证明,正如已接受的答案中所指出的,这只是我的 MySQL 语句中的一个令人尴尬的错误。然而,对于那些将来想通过 Excel-VBA 连接到 MySQL 的人来说,您可能会发现 connectDatabase() 和 closeDatabase() 函数的优点,因为我偶然发现的 ODBC 连接器的大多数代码都有用户以不太干净的格式建立他们的联系。
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
最佳答案
你需要星星吗? *
DELETE * FROM Actor WHERE last_name='TEST'
这会执行吗?
DELETE FROM Actor WHERE last_name='TEST'
关于带 Excel VBA 的 MySQL ODBC 连接器 - 无法删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433936/