从MySql数据库读取VBA脚本时出现问题

从MySql数据库读取VBA脚本时出现问题,mysql,vba,excel,excel-2007,Mysql,Vba,Excel,Excel 2007,我在Excel中使用vba脚本时遇到一些问题,应该 从MySql数据库读取。SQL查询应该只返回一个 记录,但实际上返回一个空结果集。在phpMyAdmin中运行时,生成的语句工作正常 这是我的密码: Function getClientId(emailAddress As String) Dim rs As ADODB.Recordset Dim sql As String ConnectDB Set rs = New ADODB.Recordset

我在Excel中使用vba脚本时遇到一些问题,应该 从MySql数据库读取。SQL查询应该只返回一个 记录,但实际上返回一个空结果集。在phpMyAdmin中运行时,生成的语句工作正常

这是我的密码:

Function getClientId(emailAddress As String)
    Dim rs As ADODB.Recordset
    Dim sql As String

    ConnectDB

    Set rs = New ADODB.Recordset

    sql = "SELECT client_id FROM clients WHERE email_address = '" & emailAddress & "' LIMIT 1"
    Debug.Print sql
    rs.Open sql, oConn

    Debug.Print rs.RecordCount

    If (rs.RecordCount = -1) Then
        getClientId = Null
    Else
        getClientId = rs(0)
    End If
    rs.Close
End Function
编辑:我的数据库连接功能

Function ConnectDB()
    On Error GoTo ErrHandler

    Set oConn = New ADODB.Connection
    oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
    "SERVER=localhost;" & _
    "DATABASE=mydb;" & _
    "USER=user;" & _
    "PASSWORD=password;" & _
    "Option=3"

    'Debug.Print oConn

    Exit Function
ErrHandler:
    MsgBox Err.Description, vbCritical, Err.Source
End Function
ConnectDB函数连接正常,因为我正在运行其他脚本 用它。如果有人知道我做错了什么,那么任何人都会帮助我 受到赞赏

非常感谢


加里

这可能是您选择的驾驶员的问题。我的建议是(我可能错了)-如果您通过ODBC连接,它可能有不同的命令集。

MyODBC没有正确提供RecordCount属性

因此,如果确实需要RecordCount,请将CursorLocation属性设置为adUseClient。 如果没有,只需像下面这样迭代记录集:

Do While Not rs.EOF
    '...do your magic
    rs.MoveNext
Loop

使用
(双引号)而不是
(单引号),因为您是通过ODBC驱动程序进行查询的。

如果您不介意我询问的话,有什么问题?您正在编写的“查询”应该只返回一条记录但不要说实际发生了什么——它是返回多条记录还是返回空的结果集?在以后的情况下,我询问
电子邮件地址
包含数据库中不存在的值。对不起,伙计们,sql返回一个空的结果集,其中它应该返回一个记录和一个字段,客户端id。我已通过phpMyAdmin运行SQL,并按预期收到一条记录。@ain从电子邮件地址为“”的客户端中选择客户端idvalid@email.address'限制1不要检查记录计数,而是检查EOF。记录集在打开后并不总是直接报告正确的计数。感谢您对řej的回复,我使用的是MySQL ODBC 5.1驱动程序。我已经在上面的帖子中添加了代码。谢谢你,这就是答案。我更改了检查,以查看rs(0)是否包含大于零的vaue,并且工作正常。