• ベストアンサー

Access2000のADOのレコードセットに先頭一致SQLを指定できない

お世話になっています。 さて、住所録があって、その住所の先頭と一致するレコードをSQLで抽出してその結果をレコードセットに代入したいのですが。 SQLは "SELECT 住所録.住所 FROM 住所録 WHERE 住所録.住所 Like '" & str住所検索 & "*';" というような感じです。(もうちょっといろいろあるけど) それで、 rst.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText rstはADOのレコードセットで、strSQLには上記のSQL文が代入されています。str住所検索には、検索したい住所の一部が代入されています。 これを実行すると、レコードセットにレコードが抽出されません。 WHERE句を 住所録.住所 = '" & str住所検索 & "';" と完全一致にすると抽出します。 しかし、全部の住所が一致するレコードを集めたいわけではないので、これでは困ります。 ちなみに、クエリーで実行するとちゃんと集まります。 なんとか、レコードセットにあいまい検索の抽出結果を代入できないでしょうか? ADOのレコードセットにはLike演算子は使えないのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.1

ワイルドカードを * では無く % を指定してみてください。

tiga-
質問者

お礼

な、なんと! 抽出しました。 今までアスタリスクとかクエッションマークとかは知っていましたけど、パーセントもあるんですね。 勉強になりました。 ありがとうございます。 でも、あんまりにもあっさりの回答で、もう少し詳しく知りたい気もしますが、後で自分で調べて見ます。 とにかく、うまくいって、うれしいしだいです。 ありがとうございます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

http://www.ipa.go.jp/security/awareness/vendor/programming/a02_01_main.html http://www.ash.or.jp/db/sql.htm をご参照。これらに書いてあり、また#1でご指摘のように%で旨く行く。 (例)住所録1 ID 郵便番号 県名 住所 氏名 1 2302345 神奈川県 横浜市 山田 2 2311122 埼玉県 熊谷市 宇野 3 2345555 栃木県 宇都宮市 高松 4 3331111 京都府 京都市 大川 5 2221111 埼玉県 川口市 鈴木 6 4442222 埼玉県 川口市 川村 7 2221111 埼玉県 蕨市 近藤 8 4441111 埼玉県 さいたま市 田中 9 6662222 埼玉県 南川口市 小野 (コード) Sub test05() Dim conn As Connection Dim rs As ADODB.Recordset Dim strSql As String Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Source = "住所録1" str住所検索 = "川口市" 'strSql = "SELECT 住所録1.住所 FROM 住所録1 WHERE 住所録1.住所 Like '" & str住所検索 _ '& "*';" strSql = "SELECT 住所録1.住所 FROM 住所録1 WHERE 住所録1.住所 like '%" & str住所検索 & "';" rs.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly Do Until rs.EOF MsgBox rs![住所].Value rs.MoveNext Loop rs.Close End Sub を実行すると、 川口市 川口市 南川口市(現実にはこんな市はありませんが) がMsgboxで表示されます。

tiga-
質問者

お礼

ありがとうございます。 URLのサイトを見ました。 なるほど、SQLでは%だったんですね。 私は、SQLをうまく作れないので、 クエリーのデザインで作ったやつを コピーして加工してました。 なので、クエリーで動くのはSQLでも動くと思っていたのですが、 (実際、今までOKでした) 今回、ワイルドカードが使えなく、困ってしまったしだいです。 勉強になりました。

関連するQ&A