<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>郵便番号の検索
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15



と、いちおうそのレコードのところでポインタが止まります。
下の例では1レコード選択して、ちょっと見やすくしてみました。

フォームそのものはデータを持っておらず、とどのつまりは大元のフォームの中の、とあるレコードの中の、各フィールドの値を表示しているに過ぎないんです。

この場合は、クエリー1が基にしているのが郵便テーブルなんで、結局そういうことですよね。
クエリーによってこの1レコードだけが抽出されて、フォームがそれを表示しているだけなんです。

なので、[事業所名]の中に表示されているのは、[郵便テーブル]の128715番目のレコードの(あたしの場合はそうなってます)事業所名フィールドの中身であり、ここが書き換わってしまう、ということになるんです。

郵政省から提供されたデータの、郵便番号2318542の住所が、神奈川県横浜市中区山下町69−1株式会社テレビ神奈川広報部松下さまになっちゃうわけですよ。
松下さんの郵便番号になっちゃいますよ。このテーブルの中身書き換わっちゃったらまずいでしょう。

・・・ぜんぜん意味わかんないです??・・・しゅん・・・。

とにかく、通常、ひとつのフォームが頼りにできるテーブルやクエリーはひとつなので、どのテーブルを基にしているのか、このフォームから入力した値はどこに行くのか、その辺じっくり理解を深めてみてください。


ではー・・・ここで例をひとつ。

顧客登録をするとします。そんな必要のない人も、とりあえず「お客さんの住所や名前を登録するフォーム」をイメージしてみてください。

こんなテーブルを作ります。いいからいいから。
名前はなんでもいいです。主キーもよくわかんないんでとりあえずいらないです。
データ型も全部テキストでオッケーでしょう。

で、このテーブルを基に、ちっちゃいフォームを作ります。オートフォーム単票形式でよいでしょう。

こんな感じのフォームになりました。
これじゃあんまりなんで、色とかテキストボックスの配置とか大きさとか、適当に変更してください。

で、「郵便番号」のテキストボックスのプロパティを出しましょう。ラベルじゃないですよ。
テキストボックスの方です。

このテキストボックスの、イベントプロパティ欄の「更新後処理」のところに、ちょこっと細工をします。ビルドボタンをクリックしてください。

なんかまた妙な英文のウィンドウが出てきますねぇ。
まあ細かいことは気にせずに、とにかく2行の間に、まず下のように書き込みます。半角全角の区別、意識しながら入力しましょう。

me![都道府県] = dlookup("都道府県","郵便テーブル","[郵便番号] = '" & me![郵便番号] & "'")

2行になっちゃいますが、途中で改行したりしないこと。大文字小文字はどっちでも結構ですが、記号やカッコはすべて半角でなければなりません。

これは、このフォームの都道府県とい名のテキストボックスの中に、郵便テーブルの中からこのフォームの郵便番号という名のテキストボックスの中に入力されている郵便番号と同じ値を持つレコードの中の都道府県というフィールドの値をDlookupしてきて代入しなさいとうい意味です。
ふー。長い・・・。

フィールド名などを変えている方は、実際のテキストボックス名を確認しながら入力しましょう。

meというのはたびたび登場してきますが、「私自身」、つまりこの場合だとこのフォームという意味です。ふつうは、forms![フォーム名]と書かなくちゃいけないんですけど、書かなくても「あたくしよ」とわかるような場合に限り、meと書いてもいいことになってるんです。

この辺の書き方等々は、慣れですね。あ、これ、いわゆるVBAってやつです。



さて、で、フォームビューに切り替えて、なんか郵便番号を入力してみると・・・???

おっ、なんか出てきません?
Dlookupという関数が働いて、どうやら該当する都道府県をゲットしてきているようです。

でも、まだ都道府県だけですよね。
がんばりましょう。

わはは〜。。。
気が狂いそう。でも、がんばりましょう。楽しい顧客登録のため!

ん?でも、これだと、[顧客名]のとこに事業所名が入ることになって、事業所名があるときはいいけど、それ以外のときは・・・っていう条件を加えないとならないですね。
以下のようにします。

me![都道府県] = dlookup("都道府県","郵便テーブル","[郵便番号] = '" & me![郵便番号] & "'")

me![市区町村] = dlookup("市区町村","郵便テーブル","[郵便番号] = '" & me![郵便番号] & "'")

me![地区名] = dlookup("地区名","郵便テーブル","[郵便番号] = '" & me![郵便番号] & "'")

me![番地] = dlookup("番地","郵便テーブル","[郵便番号] = '" & me![郵便番号] & "'")

'----もし、事業所名がからっぽだったら

If IsNull(DLookup("事業所名", "郵便テーブル", "[郵便番号]='" & Me![郵便番号] & "'")) Then

Else

Me![顧客名] = DLookup("事業所名", "郵便テーブル", "[郵便番号]='" & Me![郵便番号] & "'")

End If

これで、事業所関係のレコードでない場合は、[顧客名]と[番地]は空っぽのままのはずですので、自分で入力することができるってわけです。



どうでしょう・・・。でます?

で、このフォームが基にしているのは[こきゃくてえぶる]という、
さっき作ったテーブルです。
このフォームを通して何か書き換えたり、書き足したりしても、[郵便テーブル]には何も影響ないんですよね。

試しに何件か入力してみてください。
画面下ののれコード移動ボタンを使えば、新規入力もできますよね。

顧客ナンバーも適当に入力してみてください。
まあ、今日は空っぽのままでもいいですけども。



で、何件か入力した後、フォームを閉じて、テーブルの方を開いてみましょうか。
事業所関係じゃない郵便番号の場合は、顧客名と番地を適当に入力してみてください。

データ入ってますよね。


え??都道府県と市区町村と地区名と番地をまとめたい?

・・・。じゃ、口頭でささっと手順をお話しますから、挑戦してみてください。
要はDlookupをつなげればいいんです。
いったんフォームとテーブルを閉じて、一息つきましょう。

[こきゃくてえぶる]に[住所]というフィールドを追加する。
長い住所になる場合もあるので、フィールドサイズを増やしておいた方がよいでしょう(フィールドプロパティ欄)

フォームに、この[住所]のテキストボックスを作る。
フィールドリストからドラッグしてくる方法は、もうみなさんご存知ですよね。

[郵便番号]テキストボックスの更新後処理イベントの処理を書き換えます。

me![住所] = dlookup("都道府県","郵便番号テーブル","[郵便番号] = '" & me![郵便番号] & "'") & dlookup("市区町村","郵便番号テーブル","[郵便番号] = '" & me![郵便番号] & "'") & dlookup("地区名","郵便番号テーブル","[郵便番号] = '" & me![郵便番号] & "'") & dlookup("番地","郵便番号テーブル","[郵便番号] = '" & me![郵便番号] & "'")

これを途中で改行せず、一気に入力します。わはは〜すっげ〜・・・。
今まで書いてある構文をそのまま生かしてもいいでしょう。Dlookupの文を、&(赤いの)で結んでるだけなんですけどね。
あんまり毛嫌いせず、ゆっくり解読してください。

と、青い字のところの式によって、都道府県+市区町村+地区名+番地(番地がない場合は、地区名までになりますよね。
別におかしくはならないと思います)がつながってひとつの文字列になって、[住所]というテキストボックスに代入されますよ、という意味ですね。

でも、くっつけちゃってひとつのフィールドの値になったものを、「住所を都道府県と市区町村と地区名に分けたい」と思っても、こっちの方はそうは問屋が卸さないんで、フィールドが三つ四つ分かれてた方が何かと小回りが利くって場合もありますよ。

なんで住所を都道府県と市区町村と地区名に分けるのが不可能に近いか、は、みなさんわかりますよね。
相手はコンピュータですからね。