2011-07-21 29 views
0

我在Excel中遇到一些VBA腳本的問題,它應該是從MySql數據庫讀取的 。 SQL查詢應只返回一個 記錄,但實際返回空結果集。生成的語句在通過phpMyAdmin運行時工作正常。從MySql數據庫讀取VBA腳本的問題

這裏是我的代碼:

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函數連接正常,因爲我正在運行其他腳本 。如果有人能看到我做錯了什麼,那麼任何幫助 將不勝感激。

非常感謝提前。

Garry

+0

問題是什麼,如果你不介意我問? –

+0

你寫的「查詢應該只返回一條記錄」,但不要說實際發生了什麼 - 返回多條記錄還是返回空結果集?在後面的例子中,'emailAddress'包含數據庫中不存在的值。 – ain

+0

對不起,sql返回一個空結果集,它應該返回一個記錄和一個字段,即客戶端ID。我已經通過phpMyAdmin運行SQL,並按預期收到了一條記錄。 – Garry

回答

2

MyODBC未正確提供RecordCount屬性。

Re: Problem with RecordCount with ASP & MySQL

rs.recordcount = -1 with myODBC

Re: ADO Connection RecordCount

所以,如果你真的需要的總記錄,設置CursorLocation屬性爲adUseClient。 如果沒有,只是通過這樣的記錄集迭代:

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

感謝cularis,那就是答案。我改變了檢查,看看rs(0)是否包含大於零的值,它工作正常。 – Garry

0

這可能是您選擇的驅動程序的問題。我的建議是(我可能是錯的) - 如果你通過ODBC連接它可能有不同的命令集。

+0

感謝您的回覆Ondřej,我使用MySQL ODBC 5.1驅動程序。我已將代碼添加到上面的帖子中。 – Garry

1

使用"(雙引號),而不是'(單引號),因爲你是通過ODBC驅動程序查詢。