• ベストアンサー

クエリの中身を一部取得

Access2003 です。 クエリの中身の一部を取得したいのですが、やり方がわかりません。 丸ごとは qryBuf = CurrentDb.QueryDefs("クエリ名").SQL で取得したのですが、このクエリは例えば Name="田中さん" 地区="関東" などと絞っています。 このNameの部分のみ、地区の部分のみ取得する方法はありますでしょうか。 お分かりになる方いらっしゃいましたらお願い致します。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> このNameの部分のみ、地区の部分のみ取得する方法はありますでしょうか。 Accessの組み込まれた機能にはありませんので、InStr関数で「Name=」の位置を 確認した後、そこから1つ目及び2つ目の「"」の位置を同じくInStr関数にて確認し、 Mid関数で「"」に挟まれた文字列を切り出す、というコードが必要になります。 なお、複数のテーブルからなるクエリで、対象フィールド(Nameや地区)で連結して いた場合は、先に「Where」の位置を確認した上で、それより後の「Name=」や 「地区=」の位置を確認、ということになります。 (また、同じクエリに「FirstName」というフィールドが共存していた場合は「Name」の  前にスペースを入れたもので位置確認しなければならなくなります。  さらに、「地区代表」といったフィールドがあれば「地区」の直後に「=」がつくのか、  それともスペースが入ってから「=」が続くのか、といった考慮も必要になります) ・・・ということで、できなくはないのですが、相当の茨の道になってしまいます。 通常は、非連結の(=コントロールソースを指定しない)テキストボックスを設置した フォームを用意しておき、クエリ側からそのテキストボックスを参照する、という形を 採ると思うのですが、それでは不都合がありますか? (クエリとしては、確かに作り直しになってしまうというのはありますが・・・(汗)) 【検索条件をクエリで記述した例(=現状)】 Select テーブル1.* From テーブル1 Where 地区 = "関東"; 【フォーム1のテキスト1を参照する例(=通常)】 Select テーブル1.* From テーブル1 Where 地区 = [Forms]![フォーム1]![テキスト1]; これであれば、クエリSQL文を直接見に行かなくても、   [Forms]![フォーム1]![テキスト1] を参照することで、「田中さん」や「関東」といった値を簡単に確認できます。 (但し、フォーム1が開かれていることが前提) ※余談になりますが、「Name」は各種オブジェクト(テーブルやフィールド、フォーム   等)のプロパティとして使われていますので、別の言葉(例えば日本語で「氏名」   にしてしまう等)にしておいた方が無難です。 ・・・ところで、No.1の方の「不要な列は削除」というのが、今回の質問のどこから 出てきたものなのか、全く推測がつかないのですが、他に関連するご質問があった ということでしょうか・・・(汗)

yuky-4126
質問者

お礼

回答ありがとうございます。やはりそうですか;; For Next で回してinstr や mid で見つけられましたが、 「"」を何故だか特定できなくて("'"とやってもだめで;) 「)」 まで見て取得した文字列から右側を2文字引いて… 何だろうこのアナログさ加減;と思いながら書いておりました。 テキストに一旦条件を置く方法、やってみます。確認もしやすいですし。 あと「Name」は使わないほうが良いアドバイスありがとうございます! 危ないところでした。ありがとうございました。 No.1の方の「不要な列は削除」は SQLビュー の事ではないかと思われます。

その他の回答 (1)

回答No.1

そのクエリはウィザードを使ってご自分で作成したのではないのですか? 不要な列は削除するか、「表示」のチェックを外せばよいのでは? http://ms-access.seesaa.net/article/46051441.html http://ms-access.up.seesaa.net/image/access-query169.gif

yuky-4126
質問者

お礼

回答ありがとうございます。そうです。自分で作成したものです。 で、後からVBAでクエリの内容の氏名や地区の部分のみ差し替えて 使いまわそうと思ったのです。説明不足ですみません。

関連するQ&A

専門家に質問してみよう