<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>顧客管理システム
  Page1Page2Page3Page4 > Page5 > Page6



【抽出条件式の書き方】

"[顧客番号] = '" & Me![顧客番号] & "'"

こ・・・この式はいったいなんなんでしょうねぇ・・・。


これは、いわゆるWhere条件文というやつです。
◎◎が××と同じものだけ、という意味のSQL文。クエリーのデザイングリッドで、抽出条件って入力しますよね。
あれをきちんとちゃんと書くと、こういう式になるんです。

といっても、なんだかダブルコーテーションだのアンパサンドだの、妙に記号が並んでて、どう書いていいかわかりにくいですよね。。。
ちょっとしたコツがあるので、ぜひ押さえておいてください。


まず、比較するフィールドが数値か文字か、によって、ちょっぴり書き方が変ります。(日付/時刻型のフィールドは通常数値として扱います)
上の[顧客番号]はたしかテキスト型のフィールドでしたよね。中のデータは、数字であっても文字扱いです。

ふつう、こういうVBAコードとして記述するときは、式全体をダブルコーテーションでくくって入力します。
で、フィールド名とか、フォーム名など具体的なオブジェクト名は、なるべく[ ]で囲んだ方がよいでしょう。
そうすると

"[顧客番号] =A000001"

こうなるはずなんですよね。

で、[顧客番号]がテキスト型フィールドで、文字扱いとなると、右側の比較する値の方をシングルコーテーションで囲まなければならないんです。
数値じゃないよ、文字だよ、という意味として。これがないと、数値と思っちゃうみたいなんです。
で、データ型が違います〜とかバカなメッセージよこしたりします。

"[顧客番号] ='A000001'"


これでオッケーのはずです。
もしこの条件式が、「顧客番号がA00001のものを抽出」という具合に、固定された顧客番号で記すことができたら、上の式でオッケーなんですけど、今回は「フォーム上のテキストボックスの中身と同じ物」ということで、決まってないんですよね。

"[顧客番号] ='Me![顧客番号]'"

あるいは

 "[顧客番号] ='Forms![フォーム名]![コントロール名]'"

これでいいのかな???


でも、これだと、すべてダブルコーテーションの内側に入ってます。
Me![顧客番号]は、フォーム上のテキストボックスのことを指し示しているんですけど、このままだとMe![顧客番号]という顧客番号を探そうとしてしまうんですね。
A000001とかじゃなくて、Me![顧客番号]....こんな番号、おそらく何十万件顧客データを入力しても、ありえないですよねぇ。これでは困ります。

そこで、Me![顧客番号]をダブルコーテーションの外に出します。

"[顧客番号] ='" Me![顧客番号] "'"

ここがちょっとややこしいですね。外に出すのは、顧客番号のテキストボックスのみ。
シングルコーテーションはダブルコーテーションに包まれた状態にするため、ちょうどMe![顧客番号]を囲むようにダブルコーテーションを一組入力することになります。

で、この時点で、この式は3つの短い文に分かれるわけです。
分かれたままだとちゃんと式として成り立たないので、&で結びます。

"[顧客番号] ='"& Me![顧客番号] &"'"

これで完成。記号には全部ちゃんと意味があるんです。でもややっこしいですよね。
いろいろなところでこの条件式を書かなきゃならなくなりますんで、ぜひ、おさらいして押さえちゃっておいてください。
こういうのはある意味慣れってこともありますしね。


これが数値型フィールドだと、右側をシングルコーテーションで囲む必要がないので、

"[売上金額] = " & Me![金額指定]

という具合に、シングルコーテーションをとっぱらった形になります。


さて、どうでしょう。
いちおう青い方のフォームを保存して、改めて開きなおしてみましょうか。
で、顧客番号をどれかクリックして、ピンクのフォームが開くか、また、クリックした顧客番号と同じレコードが表示された状態で開いてくるか、その辺を確認してみてください。

なんかエラーになったり、どうしても1レコード目が出ちゃう・・・という場合は、もう一度クリック時のイベントを確認するべし。

いちいちピンクのフォームを閉じなくても、青いフォームから顧客番号をクリックすれば、次々表示が切り替わります。
そのかわり、このピンクのフォーム、たった1件分のレコードしか表示しようとしませんので、下のレコード移動ボタン、「1(フィルタ)」とか出てますね。

まあ、新規入力はできますから、今回はこれでいいと思いますが、移動ボタンを利用して、青いフォームで選択した顧客以外の顧客を、ピンクのフォーム独自の動きで更に選択したい・・・などとなると、ちょっと作り込みが複雑になりそうです。

できれば、一覧フォームと詳細フォーム、役割を分けて使い分けた方が、作り込みも楽になると思いますよ。


では、この青いフォームを開くためのボタンを、ピンクの方のフォームの下の方に作りましょうか。
適当な大きさのコマンドボタンを作って、このクリック時のイベントで、青いフォームをふつうに開くようにします。


できました?

DoCmd.OpenForm "顧客マスター一覧"

これは、特にレコードの指定をする必要ないので、ふつうにふつうに開きます。


さて・・・。青い方のフォームですけども・・・。
500件1000件の顧客になったら、この一覧表フォームでもスクロールして顧客をさがすの、大変かもしれないですね。
検索できるようにしておいた方がいいかな・・・・。

業種とかで絞り込みをする方法は、「Access97超入門部屋」のクエリーのところでお話してますんで、今日はあいまいな検索についてちょっと挑戦してみようかなと思います。

つまり、と入力したら、あまだ産業とかあかね工業とか、で始まる顧客だけに絞り込むような仕組み、というわけです。