Microsoft Access Club >初心者講座 >永年勤続管理ソフト >このページ >次頁 - 前項


永年勤続管理ソフト--16_メインフォームの作成_フィルタとWhere条件式



この「永年勤続管理ソフト」はマクロ機能を用いてシステムを作成するのを基本としています。VBAを用いなくても、「ここまでできる!!」を回りの皆に見せ付けてやりましょうね。

 マクロの作成

前回では、マクロの代表的なものである「フォームを開く」を取り上げました。

ややっこしいプログラミングを知らなくても上記の例のようにアクション欄に記述するだけで立派に動きます。

オプション(引数)設定

しかし、ここである問題が出てきますね。そう、「どのフォームを開くのか」という問題です。 マクロやVBAは、融通が利かないですから、きっちりと「どのフォームをどのような状態で開く」と指示してあげなければいけません、これら指示する場所は"オプション(以下、引数とする)"と呼ばれ、マクロの場合は該当の行にカーソルを当てれば下部に 引数の入力欄が現れますので、必要な事項を入力して下さい。

なお、この引数欄が空白であっても問題ない種類のマクロもあります。例えば、閉じるマクロアクションです。これは空白であれば、アクティブなオブジェクトが閉じます。逆にオブジェクト名を指定するとそのものが閉じる仕組みです。

しかし、マクロアクションと引数はセットとお考え下さい。

 マクロのフィルタ機能とWhere条件

ここで「フォームを開く」マクロにあるフィルタ機能とWhere条件について考察してみましょう。これも前回からの続きです。

 フィルタ名

フィルタ名欄にあるqry_filterはクエリ名です。ここにクエリ名を入れると自動的にクエリが実行されます。しかし、この クエリの構成は、このフォームのレコードソースとなっているテーブルやマクロと同じフィールドを備えている必要があるんです。

フィルタの一例

例えば、「社員ID」、「社員名」、「性別」フィールドを持つテーブルをレコードソースとしている場合、このフィルタに指名するクエリにも同じ く「社員ID」と「社員名」「性別」フィールドが存在しなくてはいけません。マクロでフィルタを用いる場合の独特の方法です。

qry_filterクエリのデザインビュー

 Where条件式

Where条件式欄にある「性別」="男"の「性別」は、このフォームのレコードソースに存在するフィールド名です。"男"は、文字列であるために""で囲ってい ます。

このようにフィルタとWhere条件とは全く設置する方法が異なりますから、よく理解しておきましょう。

Where条件式の実行例

では、一度実行してみましょう。このフィルタを用いる方法でtbl_basicテーブルをレコードソースとするフォームを開きます。すると下記のようなデータが表示されます。

男というフィルタをかけていますから、女は表示されません。

次に、このフィルタ名を空白にし、Where条件式欄に [性別]="男" と記述して実行します。すると結果は下記のようになります。

全く同じです。このWhere条件とフィルタ機能は、今回のように「性別」などの簡易な場合は同じ結果となります。というのも、フィルタの元になっている「クエリ」には、下記のように抽出条件欄にWhere条件が記述されているからです。

フィルタとWhere条件式の同時試行

では、ちょっと実験を行いましょう。

  1. フィルタの元になるクエリの抽出条件欄には"女"と記述します。
  2. Where条件式には[性別]="男"と 記述します。

結果は下記のようになります。

相反する条件のため、データは空白となりました。どちらが優先するというわけでもないんですね。
フォームプロパティのフィルタ欄を見ると下記のような設定が自動的に現れています。ANDがあるように、同じ働きをしているのが分かりますね。

([性別]="男") AND (((([tbl_basic].[性別])="女")))

では最後に、もう一つ実験を行います。

  1. フィルタの元になるクエリの抽出条件欄には"女"と記述します。これは前回と同じです。
  2. Where条件式は空白にして下さい。
  3. そして、データを表示するフォームのレコードソース(ここではtbl_basicです)にクエリを作成し、そのフィールドに[性別]="男"と記述します。

具体的に言いますと、フィルタはマクロの「フォームを開く」アクションに設定し、Where条件式はフォーム内部にあるレコードソースに設定するという訳です。この結果は、下記のようになります。

やはり空白となります。そして、またフォームプロパティのフィルタ欄には、

([性別]="男") AND (((([tbl_basic].[性別])="女")))

の設定が見えました。

このようにフィルタとWhere条件式を同時に利用するときは、AND であることをよく理解して下さい。でないと、予期せぬ結果が生じてしまうからです。

 

ページの先頭へ 前ページへ戻る

 


永年勤続管理ソフト--16_メインフォームの作成_フィルタとWhere条件式


 

-Microsoft Access Club-