MS Access初学者です。

フォームでクエリの検索結果を絞り込む制御を考えていますが、SQL内にForms![form名]![テキストボックス名]を記述することにどうしても抵抗があります。SQL内では[var_keyword]などとしておいて、form側でボタン押下時にマクロ起動で値を代入して「再クエリ」などは出来ないものでしょうか?VBAはあまり使いたくありません。
よい方法があれば教えて下さい。よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/11/12 18:15:08
  • 終了:2006/11/15 23:25:06

回答(3件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012006/11/12 20:24:18

ポイント30pt

既にご承知の上での質問かと思いますが、フォーム上にある値をクエリで利用する方法は

(1)Forms![form名]![テキストボックス名] で直接指定する

(2)標準モジュール上に関数を用意しておく

のいずれかしかないです。

複雑なクエリになればなるほど(1)の記述方法は手間なだけでなく誤記の元となったりしますので嫌うのは解りますが、そうなると(2)を採用するしかない。。。。。ちょっとでも複雑になるとVBA必須というのがAccessにおける辛い現実ですね。

id:stray_sheep

ご回答、ありがとうございます。

Accessは1週間前から始めたばかりなのです。どうすればいいかが大体解ったところで、どこまで出来るかがまだぼんやりとしています。

うーん、じつに惜しい仕様ですね。

クエリとフォームの依存関係をマクロで制御出来るようになれば、かなりすっきりしたアプリケーションを短時間で構築できると思ったのですが・・・。

フォームのレコードソースに直接SQLを書く方法もあると聞きましたが、こちらの方が私の想像にはまだ近いでしょうか?

2006/11/12 20:51:48
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012006/11/13 08:35:32

ポイント25pt

”はてな”のシステムバグでしょうか。

1/では回答したURLの表示部分が消えてますね(HTMLソースを見るとアドレスは残ってますが、、、)。

1で回答したURLは下記ですが、今回は正常に表示されるかしらん?

http://office.microsoft.com/ja-jp/access/HA011170771041.aspx

今回の回答用としてはマイクロソフト社のサポートオンラインのページ(KB304263)を書いておきますけど、こちらも表示されなかったりするのかしら???

http://support.microsoft.com/kb/304263/ja

本題に戻りますが、

(1)データを絞り込みたい

Accessはリレーショナル・データベース・マネージメント・システムと分類されているもので、SQLを詳しく知らなくてもSQLを作ることのできるクエリという機能だけでなくフォームやレポートで見た目を整えることまでが容易に行えるような便利なものです。

その便利な機能の1つとしてフォームフィルタという機能が用意されていますので、まずはフォームフィルタを使ってみてください。そうすればクエリを制御する必要もなくなりますし、クエリ自体も不要になるかもしれません。

(2)フォームのレコードソースに直接SQLを書けばスッキリする?

クエリとの依存関係を心配する必要はなくなるようにも思えますが、後々になって見直しをかける時にパッとみて内容を理解することができなくなったりしますので、一概には言えないです。

フォーム名とクエリ名の命名規則を作っておくなどで対応なさったほうがシンプルです。

(3)マクロとVBA

WordやExcelではマクロ=VBAですが、AccessではマクロとVBAは別物です。

Accessにおいては、

  マクロ:日常行っている操作手順を自動化するためのもの

  VBA:Accessの各部を詳細に制御するためのもの

と区別したほうがよろしいでしょう。

(4)Accessでアプリケーション作成

Accessを使ってアプリケーションを作ることは可能ですが、そのためにはVBAを使ったアプリケーション開発手法を学ぶ必要が出てきます。

貴殿が真に必要としているのはAccessを使って手早くデータを扱いたいのでしょうか。それともアプリケーションを開発したいのでしょうか。いずれにしてもAccessの持っている基本機能をマスターする必要があるのは同じですから、まずはもう少しAccessのメニューバーに用意されている機能を一通り先に学ぶ必要があるかもしれません。

以上、お役に立ちますでしょうか。。。

id:stray_sheep

ご指摘ありがとうございます。

お返事が遅くなってしまい、すみません。

フォームフィルタはかなり使えそうですね。これでちょっと試してみようと思います。

>フォームのレコードソースに直接SQLを書けばスッキリする?

これは少し安直な発言でした。すみません。

>Accessでアプリケーション作成

Accessを使えばDBアプリを気軽に作れるのかなと思ったのが事の始まりでした。やはりそれなりのものを作れるようになるためには、それなりの時間が必要のようですね。

2006/11/15 23:12:30
id:ikjun No.3

ikjun回答回数155ベストアンサー獲得回数42006/11/14 00:22:47

ポイント25pt

http://fukkey.dyndns.org/pins/acc/981224/3981.html

ここに似た事例が出てます。

どうしてもVBAを使うのがいやでなければ、

Public Function var_keyword As Integer

 var_keyword = Forms![form名]![テキストボックス名]

End Function

クエリーの抽出条件をvar_keyword()とすればできるはずです。 

ACCESSのマクロはACCESSがマイクロソフト製品でなかったころの過去の遺物みたいなものです。EXCELにしてもWORDにしてもマクロ=VBAです。(私見ですが、いずれはマクロはVBAに統一されると思います)

最初からVBAで学習することをお薦めします。アプリケーションを組もうというのなら絶対にVBAは必要ですし、その知識はEXCELやWordにも使用できます。

また、確かにフォームのレコードソースに直接SQLを書く方法も確かにあり、このほうがすっきりするのでよく使いますが今回の問題の解決にはならないと思います。

id:stray_sheep

なるほどー。変数の宣言がどこかで必要なのは感じていましたが、そこをVBAで行うという方法があるのですね。

>アプリケーションを組もうというのなら絶対にVBAは必要

了解です。Accessの良さを生かした方法を身につけていきたいと思います。

みなさん、貴重なご意見ありがとうございました。

2006/11/15 23:20:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません