- ベストアンサー
クエリの中身を一部取得
Access2003 です。 クエリの中身の一部を取得したいのですが、やり方がわかりません。 丸ごとは qryBuf = CurrentDb.QueryDefs("クエリ名").SQL で取得したのですが、このクエリは例えば Name="田中さん" 地区="関東" などと絞っています。 このNameの部分のみ、地区の部分のみ取得する方法はありますでしょうか。 お分かりになる方いらっしゃいましたらお願い致します。
- みんなの回答 (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の方の「不要な列は削除」というのが、今回の質問のどこから 出てきたものなのか、全く推測がつかないのですが、他に関連するご質問があった ということでしょうか・・・(汗)
その他の回答 (1)
- cistronezk
- ベストアンサー率38% (120/309)
そのクエリはウィザードを使ってご自分で作成したのではないのですか? 不要な列は削除するか、「表示」のチェックを外せばよいのでは? http://ms-access.seesaa.net/article/46051441.html http://ms-access.up.seesaa.net/image/access-query169.gif
お礼
回答ありがとうございます。そうです。自分で作成したものです。 で、後からVBAでクエリの内容の氏名や地区の部分のみ差し替えて 使いまわそうと思ったのです。説明不足ですみません。
お礼
回答ありがとうございます。やはりそうですか;; For Next で回してinstr や mid で見つけられましたが、 「"」を何故だか特定できなくて("'"とやってもだめで;) 「)」 まで見て取得した文字列から右側を2文字引いて… 何だろうこのアナログさ加減;と思いながら書いておりました。 テキストに一旦条件を置く方法、やってみます。確認もしやすいですし。 あと「Name」は使わないほうが良いアドバイスありがとうございます! 危ないところでした。ありがとうございました。 No.1の方の「不要な列は削除」は SQLビュー の事ではないかと思われます。