<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--Where文を書いてみる
  1 2 3 4 5



はあ・・・なんか、だるいっす・・・。
・・・・いけませんね。元気出していきましょう!おっしゃ、行くぜ!今日はWhere文の書き方だぜ!

ところで・・・その、Where文とかWhere句とかって聞いたことあります???
ざっと思い出したところで・・・。


・フォームで、フィルタを使って絞込みなどをする場合
・マクロの「レポートを開く」アクション(DoCmd.OpenReport)の「Where条件式」という引数
・DlookupとかDMaxとかDsumなど、Dなんとかっていう関数を使うとき


などに、使うことがありますかね。Where文って。
よくVBAでプロシージャを書く方やSendSQLとかよく使ってる方は、多分Where文の書き方なんてご承知だと思いますので、ここでは、とにかくWhere文とか言われてもぜんぜんわかんないです・・・という方向けに、基本的なことをお話していきますね。ぜひともWhere文の書き方のコツをつかんで、データベースつくりに役立てていってください。

Where句というのは、いわゆる「SQL」っていうデータベース言語の構文のひとつです。
クエリを作るとき、デザイン画面に「抽出条件」っていう欄がありますよね。平たく言っちゃうとこの部分のことです。

普段何気なく使っている↑このデザイングリッドですけれども、実はここの中にフィールドとかいろいろ選ぶことによってわたしたちはSQL文というデータベース言語を使った構文を書いている(厳密にはちょっと違うみたいですが)ことになるんです。

メニューバーの「表示」というところをクリックすると、デザインビュー(デザインビューってのが、今の状態ですね)のほかに、SQLビューというのがあると思います。
こいつを選ぶと、このクエリをSQLという言語で書いた場合の構文が表示されます。

こんなになりますよね。↓

3行目の「Where」で始まる部分が、いわゆるWhere句になります。
つまり・・・データの絞込みや検索をする際の「抽出条件」にあたる部分てことでしょうかね。

クエリを使って、データを検索したり絞込みをしたりする分には、こんなWhereとか変な文入力しなくても、デザイングリッドを使いこなせばちゃんと絞込みや検索の仕組みを作ることができるんですけど、時にはこのWhere文を直接入力しなくちゃならんときも出てきます。




では、具体的にいくつか書いてみるとしましょう。

最初にお話した

・フォームで、フィルタを使って絞込みなどをする場合
・マクロの「レポートを開く」アクション(DoCmd.OpenReport)の「Where条件式」という引数
・DlookupとかDMaxとかDsumなど、Dなんとかっていう関数を使うとき

ですが、それぞれどんな感じなのか、大まかなシチュエーションから確認してみましょう。。

・フォームで、フィルタを使って絞込みなどをする場合

これは、別コーナーでも解説させていただいてますが、フォームの「フィルタ」プロパティに、マクロやコードを使って式を代入することで、そのフォームに表示するデータを絞り込んだりする機能のことです。絞込みの対象となるのは、そのフォームのレコードソースになっているテーブルもしくはクエリですね。

・マクロの「レポートを開く」アクション(DoCmd.OpenReport)の「Where条件式」という引数

このマクロアクションは、作成済みのレポートを印刷するときに使いますけど、「今回に限り東京都のデータだけ印刷したい」なんて時に使えるようWhere条件式と呼ばれる引数が用意されています。基のレポートのレコードソースはそのままですけど、このマクロアクションを通じて印刷するときだけ、絞り込んで印刷させることができるわけです。

・DlookupとかDMaxとかDsumなど、Dなんとかっていう関数を使うとき

おなじみの「定義域集計関数」と呼ばれる関数です。テーブルやクエリの中身を直接見て、件数を数えたり、値を集計したり、指定したフィールド内の最大値を探してきたり、そんな仕事をする関数で、けっこうお役立ちです。これらの関数は基本的に、指定したテーブルやクエリのすべてのレコードが処理対象となりますが、たとえば「地域が東京都になってるレコードは何件あるかな」とか、特定の条件をつけることができるようになってます。この条件の部分が、いわゆるWhere文の入力になるわけですね。

この3場面が、一般的にWhere文を必要とする舞台となるんじゃないかなーと思いますんで、この辺を中心にいろいろ見ていくといたしましょう。




基本的な書き方は、

 [フィールド名など] = 比較する値

ですね。あたりまえですが・・・・。

これで、[フィールド名]の中の値が比較する値と同じレコードだけ抽出してください、という意味合いの式になります。

第1ポイントは、比較するために使用する = などの記号です。
第2ポイントは、比較する値のデータ型です。
第3ポイントは、比較する値が、変数だったり、フォーム上のテキストボックスなどだったりした場合です。
そして第4ポイント、できあがったWhere文は、基本的に「文字列」としてしかるべく処理される、ということになります。

Where文は、はっきりいって「慣れ」です。SQLという言語に詳しい方は、MS-Access自体あまりご存知なくても、そんなに苦にならないでしょう。
特に4番目の「文字列として処理される」というとこがピンとこない、という方、結構いらっしゃるかもしれないですね。
でも、これ、コンピュータにとってはとても大切なことなんです。
スムーズに書き方を習得するためには、まずすっごい簡単な構文を基本として、少しずつ肉付けして覚えていくとよいと思いますよ。

いろんなケースをお話していこうかと思いますんで、ひとつテーブルを用意いたしました。

名前は全角カタカナで[テーブル]です。え?やる気あるのかって?ありますよ!ありますあります。バリバリです。
適当にデータ入れときます。

中身はこんな感じです。↑
デザインを見ると・・・下のようになります。
各フィールドの「データ型」も結構ポイントになりますので、その辺ちょっとだけ注意してみていくようにしてください。




じゃ、まず、フィルタから考えてみましょうか。

適当なフォームを作って・・・。
練習ですから、適当でいいですよ。でも「表形式」のフォームがいいですね。
で、どっかにコマンドボタンを作って、コレをクリックしたらフィルタの機能が働くようにしてみましょう。

まず、フォームの「フィルタ」プロパティのおさらいですが・・・。
プロパティの中では、↓ここにあります。「フィルタ」というのと、「フィルタの使用」っていうのがありますよね。これのことでしたよね。

ヘルプを見ると、

 
設定値は、文字列式で、WHERE 句から WHERE を省いたものです。
たとえば、次の Visual Basicコードは、東京都の得意先だけを抽出するフィルタを適用します。

Me.Filter = "都道府県 = '東京'"
Me.FilterOn = True

と書いてあります。Meというのは今扱ってるフォームそのもののことですんで、「このフォームのFilterというとこに、”都道府県=’東京’”という文字列式をぶちこめ」という意味になります。で、ぶちこんだあと、FilterOnというところにTrueと代入しなさい、ということですね。
このふたつはセットなのでセットで考えていただいて、問題は1行目の方ですね。。。


ふつうに考えると、

都道府県=東京都

なんです。これが基本形です。
都道府県、がフィールド名で、東京都、が抽出したい値です。
「都道府県というフィールドが東京都になってるデータだけ拾い出せ」という意味になります。
ここで、第2ポイントの「データ型」が重要になってきます。都道府県というフィールドがテキスト型か、数値型か、日付時刻型か・・・。オートナンバーや通貨型は数値型の仲間だと思ってください。

テキスト型の場合は、値を半角のシングルコーテーションで囲みます。

都道府県=’東京都’

数値型の場合は、数字はむき出しの状態です。

金額=1500

ここで注意・・・1500だからシングルコーテーションで囲まないのではありません。[金額]というフィールドが数値型フィールドの場合は囲まない、という意味です。
[金額]というフィールドがテキスト型だったら、1500であろうがなんだろうがシングルコーテーションで囲みます。
数字であっても、テキスト型の場合もありますよね。
コンピュータの世界では数字と数値は違いますから、その辺間違えないようご注意です。

日付時刻型なら、#で囲みます。半角ですよ。

都道府県=#2001/2/1#

みなさん、日付の書式に関する諸問題についてはもうご存知かと思いますが・・・。
フィルタなどで(要するにVBAコードで日付を書く場合)、若干注意が必要です。別コーナーでお話してますのでよろしかったら・・・。