从MySql数据库读取VBA脚本的问题

时间:2011-07-21 10:34:33

标签: mysql excel vba excel-vba 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

    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函数连接正常  用它。如果有人能看到我做错了什么,那么任何帮助都会  不胜感激。

非常感谢提前。

加里

3 个答案:

答案 0 :(得分:2)

MyODBC没有正确提供RecordCount-Attribute。

Re: Problem with RecordCount with ASP & MySQL

rs.recordcount = -1 with myODBC

Re: ADO Connection RecordCount

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

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

答案 1 :(得分:1)

使用"(双引号)代替'(单引号),因为您正在查询ODBC驱动程序。

答案 2 :(得分:0)

这可能是您选择的驱动程序的问题。我的建议是(我可能错了) - 如果你通过ODBC连接它可能有不同的命令集。