带 Excel VBA 的 MySQL ODBC 连接器 - 无法删除记录

标签 mysql excel odbc mysql-connector vba

为什么能够使用 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/

相关文章:

excel - DAX:需要计算不受过滤器的影响

Python Pandas 将列从一张纸复制到另一张纸而不更改任何数据?

php - 如果 id 存在则更新,否则插入 (ODBC)

php - 如何提高MYSQL查询的性能?

mysql - SQL 多对多关系

xml - xlsx 错误 : "Removed Records: Named range from/xl/workbook.xml part" when tried to resolve errors

ms-access - 如何通过 ODBC 查询名称带有问号的 MS Access 列?

sql - 仅包含具有特定列值的第一个条目

mysql - 将现有表从 MyISAM 迁移到 InnoDB,哪一个更快?

mysql - 计算他们在另一个表中的投票计数符合条件的记录