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



んでは、今までいじってたフォームは閉じて・・・。今度は、D何とかっていう関数をいろいろ使ってみましょうか。
別のフォームを作りましょう。今度は、レコードソースなしの無地フォームを一個作ってください。

で、テキストボックスを一個。てきとうに作ってください。
このテキストボックスの「コントロールソース」欄に、Dなんとか関数を作ってみましょう。

たとえば、「テーブルという名前のテーブルの中の金額というフィールドに入ってる値を全部集計して出しなさい」っていう場合は、
Dsum関数ですね。書き方は↑こうなります。

=DSum("金額","テーブル")

フォームビューに切り替えると、なんか出てきます???

「テーブルという名前のテーブルの中の金額というフィールドに入ってる値の中でもっとも高いのはいくらか出しなさい」という場合は、DMax関数がいいですね。

と、こう出てきます。おや、左側に数字が寄ってるな・・・。まあいいか。

で、もし、「テーブルという名前のテーブルの中の金額というフィールドに入ってる値を、分類が防具のものだけ集計したい」場合・・・。ふつうはね、クエリ使うべきなんですよ。集計クエリ(Σ)っていうのがあるので・・・。でも、もし、このフォームとは直接関係のないテーブルやクエリから、一時的に値をとってきたい・・・なんていう場合は、ちょっと便利かもしれないです。

=DSum("金額","テーブル","分類='防具'")

Dなんとか関数はたいてい、カッコの中身(”引数”という名で出ています)が、

(対象となるフィールド名を文字列扱いで入力,対象となるフィールドがあるテーブルかクエリ名を文字扱いで入力,なんか条件があるなら文字扱いで入力)

ってなってます。半角カンマで区切ります。
え?長ったらしい?文句言わないでくださいよー。わかりやすいでしょ?いいえ、わかりやすいです。

「文字列扱い」っていうのは、たいていの場合ダブルコーテーションで囲むことをさしますんで、

("金額","テーブル","分類='防具'")

こうなるわけです。
条件の部分は、今しがたやったフィルタのとこの式と書き方は同じです。(Me.Filterってのはいらないですよ、あたりまえですけど・・・)

商品番号が004の商品の金額を表示しなさい、ということなら・・・

=DLookUp("金額","テーブル","番号='004'")

こうかな。番号って、001、002ってなってますけど、テキスト型でしたよね。だから、シングルコーテーションで囲みます。
数字だからといって、数値型ではないのです。この辺もわかりにくいとこかもしれないですね。実際にどういう値が入ってるか、ということより、データ型がなんだ?ということが重要になってきます。

そしたら、「テキストボックスに入力した値を使って」というのもできますよ。

こんな風に、もう一個、テキスト2なんていう名前のテキストボックスを作って・・・。

式はこんな感じかな?さっきやったフィルタの式と、おんなじです。

=DLookUp("金額","テーブル","番号='" & [テキスト2] & "'")

テキスト2の方に番号を何か入れると、その番号をテーブルの中から探してきて、金額をテキスト0に返します。

何にも入れなかったり、該当する番号がテーブル内になかった場合は、空っぽ(Null)を返す仕組みになってます。Dなんとかっていう関数は。。。

これらの関数が、みなさんのデータベースでどんなふうに活用できるかは、わたしにはわかんないですけども・・・。繰り返しますが、MS-Accessの中で「検索」とか「絞込み」とかいう仕事は、基本的にクエリがまかないます。フィルタを使ったり、こうしたDなんとかっていう関数を活用する場合でも、基本的な考え方はクエリにあると思ってください。闇雲に式を書いても思ったような抽出はできないです。「どのテーブルの、どのフィールドの値を、どういう条件のもとに取ってきたいのか」ということを整頓して考えられるようになることが、データベース作りには欠かせません。クエリって、そういう技術を養うのにはとっても適した素材だと思いますよ。
クエリをイメージすることができると、おのずとWhere文の構文も浮かんでくるんじゃないかと思いますよ。