• ベストアンサー

DAOのrs.Filter =の使い方

Q_CCというクエリーのフィールドにIDがあります。 あるフォームのボタンのイベントプロシージャに Set db = CurrentDb() Set rs = db.OpenRecordset("Q_CC", dbOpenDynaset) rs.Filter = "ID = 'Me.メールID'" としましたけど、フィルターが働いてくれません。 " と ' の使い方がまずいと思います。 私のフォームに「メールID」というものが関連づけられていて、 このメールIDという値はMe.メールIDで求められますが、 このメールIDと同じ値のQ_CCのIDで、Q_CCにフィルタかけたい のです。 rs.Filter = "ID =" + Me.メールID としたらエラーです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.1

多分、 ID=" & Nz(Me.ID, 0) としていないことが原因です。 が、素直に、Where節を書いても事足りるのでは・・・。 Private Sub コマンド0_Click()   Dim dbsCurrent As dao.Database   Dim rstTest   As dao.Recordset   Dim strQuerySQL As String          strQuerySQL = "SELECT * FROM A_Query WHERE ID=" & Nz(Me.ID, 0)   Set dbsCurrent = CurrentDb   Set rstTest = dbsCurrent.OpenRecordset(strQuerySQL)   With rstTest     Do Until .EOF       Debug.Print .Fields(0)       .MoveNext     Loop   End With   rstTest.Close   dbsCurrent.Close End Sub

hiroi
質問者

お礼

s_huskyさん 早速の回答ありがとうございます。 Nzでしたか。気づきませんでした。ありがとう。 また、この例文もありがとうございます。 使ってみます。 本日は、この結果を報告できませんが、明日に報告させて頂きます。よろしくお願いします。

hiroi
質問者

補足

遅くなりました。検証してみました。 本当に、わざわざフィルターしなくてもWhere節にしたらいいという意味がよく分かりました。それと、Nz関数で解決出来ました。ありがとうございます。 助かりました。

その他の回答 (1)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

IDフィールドがテキスト型なら rs.Filter = "ID = '" & Me.メールID & "'" 数値型なら rs.Filter = "ID =" & Me.メールID この場合は、Me.メールID のNULL チェックが必要です。 ただし、自分が作る場合は No1さんの方法にします。 Filter にカーソルをあて、F1キーを押して ヘルプを表示すると、その理由が書かれています。

hiroi
質問者

お礼

bonaronさん 早速の回答ありがとうございます。 NULLチェックですね。ヘルプをよく読んでおきます。 すみませんでした。