プロが教えるわが家の防犯対策術!

例えばレコードの値が「あああ'ああ」だった場合、



-----------------------------------------------------
Sub test()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim MyFileName As String

MyFileName = CurrentProject.FullName

cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName
rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic

rs.Filter = "フィールド1 = " & "'あああ'ああ'"

MsgBox rs.RecordCount

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
-----------------------------------------------------

とすると
実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」
になってしまいます。

ADOでアポストロフィー入りの値をフィルタする方法を教えてください。

A 回答 (3件)

rs.Filter = "フィールド1 = " & """あああ'ああ"""



ですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2013/03/01 20:12

rs.Filter = "フィールド1 = " & "'あああ'ああ'"



rs.Filter = "フィールド1 = " & "'あああ''ああ'"
のように、'を'の数だけ水増しすれば出来ました、 (^^?

あああ''ああ なら
rs.Filter = "フィールド1 = " & "'あああ''''ああ'"
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2013/03/01 20:13

ADO自体は使っていないのですが、フィルタへの文字列の


渡し方であれば、DAOと同様のはずですので・・・

今回の例のように、文字列を二重で括る必要がある場合の
方法としては、『「"」と「'」の併用』の他に、『「"」を二つ重ねて
ひとつの「"」として渡す』という方法もあります。

ですので、以下のように修正すれば、ご希望の動作になるかと
思います:

【現状】
 rs.Filter = "フィールド1 = " & "'あああ'ああ'"

【修正】
 rs.Filter = "フィールド1 = " & """あああ'ああ"""
または(フィールドと文字列を合一して)
 rs.Filter = "フィールド1 = ""あああ'ああ""


「"""あああ'ああ"""」の「"」のうち、両端の「"」が
VBA上での文字列の括りのためのもので、その内側の
「""」が、文字列として渡す「"」を指定するためのもの、
ということになります。


・・・なお、どうしてもわかりづらいという場合は、Chr関数
を使用する方法もあります(「Chr(34)」は「"」を返します):

 rs.Filter = "フィールド1 = " & Chr(34) & "あああ'ああ" & Chr(34)
「ADOでアポストロフィー入りの値をフィル」の回答画像2
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2013/03/01 20:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!