人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: stray_sheep
●カテゴリ:コンピュータ 学習・教育
✍キーワード:access MS SQL VBA word]
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●30ポイント

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

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

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

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

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

◎質問者からの返答

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

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

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

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

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


2 ● kn1967
●25ポイント

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

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のメニューバーに用意されている機能を一通り先に学ぶ必要があるかもしれません。

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

◎質問者からの返答

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

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

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

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

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

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

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


3 ● ikjun
●25ポイント

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を書く方法も確かにあり、このほうがすっきりするのでよく使いますが今回の問題の解決にはならないと思います。

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ