• ベストアンサー

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演算子は使えないのでしょうか? よろしくお願いいたします。

  • tiga-
  • お礼率77% (170/219)

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

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

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

tiga-
質問者

お礼

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

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • Access クエリでレコードセット作成

    Access2010でVBAを勉強しています。クエリオブジェクトからレコードセットを作れるかお教えください。 クエリのデザイン作成で3つのテーブルからデータを抽出するクエリを作りました。 このクエリオブジェクトからレコードセットを作りたいと思っていますが、作り方がわかりません。 よってクエリオブジェクトのSQLビューでSQLを確認し、VBAの中で下記のようにSQLを作ってレコードセットを作っています。 これだと効率が悪いので、クエリオブジェクトから直接レコードセットがつくれないかと思っています。 方法がありましたらお教え下さい。よろしくお願いします。 strSQL = "SELECT master.[サイズ], master.単価," strSQL = strSQL & "Nz([入庫数量の合計])-Nz([出庫数量の合計]) AS 在庫数" strSQL = strSQL & " FROM (master LEFT JOIN Q_出庫 ON master.[サイズ] = Q_出庫.[サイズ])" strSQL = strSQL & " LEFT JOIN Q_入庫 ON master.[サイズ] = Q_入庫.[サイズ]" objADORS.Open "T_出庫", objADOCON, adOpenDynamic, adLockOptimistic

  • ADOのレコードセットをローカルにキャッシュする方法

    ご質問させて頂きます。 MS SQL 2000 と VB 6.0 の環境で、ADO接続しています。 SQLサーバに接続し、データをレコードセットに取得したのですが、Connectionをクローズするとレコードセットも参照できなくなってしまいます。 Connectionをクローズ後もレコードセットを使えるようにする方法はありませんでしょうか? どうぞ宜しくお願いします。

  • ADOでのSQLついて

    こんにちは! ASPでADOを利用してSQLを使っていまして、 任意の文字列検索をやりたいのですが、うまくヒットしません。 AccessでのSQLで、likeを使った ((フィールド名) Like "*文字列*")を使いたいのですが、 ASPではアスタリスク*がうまく認識されていないような気がします。 うまくやる方法は無いのでしょうか?

  • ADOによるレコードセット検索

    いつもお世話になっております。GomiYasikiです。 レコードセットをWhere句の様な複数条件で検索したいのですが、 サブクエリーを使っている場合、DAOだとエラーが出てしまいます。 そのためADOで行いたいのですが、可能なのでしょうか? (クエリーでも構いません) 行いたいのは以下の様な事です。 条件がFieldA='AAAA' and FieldB=123 and FieldC=1で カーソル●以降、若しくはselectの結果レコードのxx行目以降にこの条件のレコードが存在するかを調べたいです。 度々ですが、宜しくお願い致します。  FieldA, FieldB, FieldC  AAAA, 123, 1 ●BBBB, 456, 2  CCCC, 123, 3  DDDD, 122, 1  AAAA, 123, 1

  • レコードセットからレコードセットって作れますか?

    WindowsXP,VB6,SP5,で開発しています。 タイトルそのままなのですが、 ある事情で、まずはデータベース(Access)からレコードセットを作成しています。 そのレコードセットをもとに色々と抽出したいんです。 もし、データベースからSQL文で抽出するときみたいに、そのレコードセットを、 SUM(~とかGROUP化したりとかできればいいなあと思っているのですが、 その方法がわからず、2,3回遠回りしてレコードセットを作成してます。 レコードセットからレコードセットを作成することってできないのでしょうか? わかりにくくてすみませんが、どうぞよろしくお願いしますm(_ _)m

  • SQLとDAOで取得するレコード件数が違う?

    Access2007でSQLで実行した結果と、レコードセットで取得した件数が一致せずに困っています。 いろいろ調べてはみたのですが、なぜかわかりません。 よろしくお願いします。 ○TableA 型 Code1 数値型(主キー) Text テキスト型 Code2 数値型 ○TableA データ Code1 Text Code2 111 AAA 10 112 BBB 15 113 CCC 20 114 DDD 20 ○VBAコード Dim strSQL As String Dim db As DAO.Database Dim rstFind As DAO.Recordset strSQL = "SELECT * FROM TableA Where Code2 = 20" Set db = CurrentDb() Set rstFind = db.OpenRecordset(strSQL, dbOpenSnapshot) MsgBox rstFind.RecordCount この状態でSQLビューから実行すると2件が抽出され、上記VBAを実行するとMsgBoxには「1」と表示されます。

  • VB.NET データセットとADOレコードセットについて。

    最近.NETの勉強を始めました。質問なのですが (1)参考書として買った本にはデータセットが基本の構文がずらりと載っているのですが、 (2)勉強用に貰ったVBデータはADOで基盤が作ってあり、データセットは1つも出てきていません。例えばデータグリッド等は無しです。 (1)と(2)は、今後プログラムを書くにあたり、どうとらえていけばよいんでしょうか? 大きいシステムの流れはVBデータでつかめますが、細かい、(例えば、コンボボックスの値をデータから抽出したい)等の事が分からなくてネットでも見つける事ができません。データグリッドも使いたいのですが。 参考書には載っていますが、全てデータセットを使ってあります。 データセットとADOレコードセットは共に書くことは不可なのですか? テーブルごと仮で持ってくる時、こっちはデータセットでこっちは違うとかだやはり困りますよね。 実際のお仕事の現場ではどのようにされていますか? 明確なADOの使い道(こんな時はADOだ。など)も簡単に教えていただけるとありがたいです。

  • 2つのテーブルを比較して、不一致レコードを抽出するSQL文

    2つのテーブルを比較して、不一致レコードを抽出するSQL文を教えてください。まったくの初心者なので、よろしくお願いします。

  • DAOレコードセットから更に絞込みしたい

    VBAで質問です。あるレコードセットXをsqlで取得しました。さらにこのレコードセットにSQLを投げて絞り込みたいと思っています。例えばSQLでA,B,C列を取得しました。このA、B、C列があるレコードセットにwhereで絞り込みたいと思ってます。レコードセットXに向けて、select * from X where...というコードは投げれるのでしょうか?

  • クエリの結果とレコードセットの結果が違う

    開発言語:VB2010 データベース:アクセス2010 VB2010でDAOを使用して、ACCDBに接続しています。 以下のテーブルに対して、SQLで、Snapshotで開いているのですが、クエリの結果とレコードセットの結果が違ってしまい困っております。 クエリだと濁点は抽出しませんが、レコードセットで開くと濁点も抽出されてしまいます。 レコードセットでもクエリと同じように濁点を拾わず抽出するにはどのようにしたらよいのでしょうか? ご存知の方がいましたらご教授していただけるとありがたいです。 **テーブル名** MST_得意先 *MST_得意先フリガナフィールド 1.ガイコク 2.カカシ *参照設定 Microsoft.Office.Interop.Access *SQL文 SELECT MST_得意先.* FROM MST_得意先 WHERE (MST_得意先.得意先フリガナ Like '*カ*'); OpenRecordset(SQL, Dao.RecordsetTypeEnum.dbOpenSnapshot) *結果 ・クエリ=2.カカシのみ抽出(濁点抽出なし) ・レコードセット=1.ガイコク、2.カカシ(濁点抽出)

専門家に質問してみよう