2011-07-21 11 views
0

Excelのvbaスクリプトに問題があります。これは、 のMySqlデータベースからの読み込みです。 SQLクエリは1つだけ レコードを返しますが、実際に空の結果セットを返します。生成されたステートメントは、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 

EDIT:私のデータベース接続機能。私はそれで他のスクリプト を実行しているよう

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機能は、[OK]を接続しています。誰かが私が間違ってやっていることを見ることができれば、どんな助けでも に感謝します。

事前に感謝します。

ギャリー

+0

問題は何ですか、私に尋ねても構わないのですか? –

+0

あなたは "クエリは1つのレコードを返すべきです"と書いていますが、実際に何が起こったのかは言わない - 複数のレコードを返すのか、空の結果セットを返すのか?後で 'emailAddress'はデータベースに存在しない値を含んでいます。 – ain

+0

申し訳ありませんが、sqlは空の結果セットを返します。ここでは、クライアントIDという1つのフィールドを持つレコードが1つ返されます。私はphpMyAdminを介してSQLを実行し、期待どおりに1つのレコードを受信しました。 – Garry

答えて

2

MyODBCは、RecordCount-Attributeを正しく提供していません。 rs.recordcount = -1 with myODBC

Re: Problem with RecordCount with ASP & MySQL

Re: ADO Connection RecordCount

だから、あなたが本当にadUseClientのCursorLocationのにプロパティを設定したRecordCountを、必要な場合は。あなたはODBCドライバを介してクエリを実行しているため、

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

Cularisさん、ありがとうございました。私はrs(0)に0より大きい値が含まれているかどうかを確認するためにチェックを変更し、うまくいきました。 – Garry

0

これは、選択したドライバの問題かもしれません。私の提案は(と私は間違っているかもしれません) - あなたがODBCを介して接続している場合、それは異なるコマンドのセットを持つことができます。

+0

あなたのお返事ありがとうございます、私はMySQL ODBC 5.1ドライバを使用しています。上記のコードに私のコードを追加しました。 – Garry

1

使用"(二重引用符)を代わりに'(単一引用符): ない場合は、ちょうどこのようなレコードセットを反復処理。

関連する問題