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



で、そのフォームには名前をつけて保存しておきましょう。名前はなんでもよかですよ。
あたしはちょっとカッコよくSub_地区ってつけてみました。ふふふ。なんかデキる名前でしょう。


さて、大元のフォームの方に戻ります。

フォームの中には今んとこ、リストボックス(またはコンボボックス)が幅を利かせてますよね。
これをサブフォームに置き換えますから、リストボックスの方は削除して取っ払っちゃってもいいんですけど、それは忍びない・・・という方は、うんと小さいサイズにちっちゃくして隅っこの方にドラッグしておいてください。
右上の[テキスト6]も同様です。あ、可視を「いいえ」にしてもいいかもしれないですね。

で、空いたところに、サブフォームコントロールという奴を作ります。

とりあえず大き目の白い四角ができますので、これのプロパティを出してください。

まず、[埋め込みxx]って名前もいかすんですけど、ちょっとわかりにくいんで、「ここは地区関係の情報が表示されるよー」ということがわかるような名前に変えてやりましょう。あたしは[地区名]っていう名前にしました。

この中にさっき作った表形式のフォームがすっぽりおさまることになるんで、大きさも少し広げておいてください。

で、ここがカンジン。データプロパティ欄の「ソースオブジェクト」というところに、さっき作ったフォーム名を選びます。
クエリーじゃないですよ。フォームです。

さらに、「市区町村」のコンボボックス(コンボ2)の更新後処理を変更します。

今は「コンボ4」を再クエリーするようになってますからね。
ここを、このサブフォームのところを再クエリーするように書き換えてやらないとイケマセン。
入力するのはサブフォーム名じゃなくて、サブフォームコントロールの名前です。

Private Sub コンボ2_AfterUpdate()

DoCmd.Requery "地区名"

End Sub

マクロで再クエリーをしている方は、再クエリーするコントロール名を地区名と書き換えます。


で、フォームビューに切り替えてみると・・・???

ほら。フォームの中にフォームが。

検索結果、ちゃんと出ますよね。

ついでに、該当するデータ件数を左下の方に表示させようと思ったら、テキストボックスを作って、そのコントロールソース欄に

=DCount("郵便番号","Q_地区") & "件あるねぇ"

で、このテキストボックスに対しても、再クエリーします。

Private Sub コンボ2_AfterUpdate()

DoCmd.Requery "地区名"

DoCmd.Requery "テキスト13"

End Sub

これでばっちりのはず。いろいろ動かしてテストしてみてください。


いやー。たかが郵便番号検索に、ずいぶん凝っちゃいましたけど、肩もこっちゃいましたねぇ。
でも、ひとくちに「検索」っていったって、いろんなやり方考え方がありますよね。
でも、どれもある程度パターンみたいなのがありますから、いろんなパターンを覚えておいて、ケースバイケースで使い分けていくのがいいと思うんです。

とにかくAccessは「名前」でなんでも処理を作っていきますから、フォームの名前、フィールド名、テキストボックスの名前、コンボボックスの名前・・・・と、それぞれがなんて名前なのか、その辺に慣れないとすごく使いにくいしわかりにくいんです。特に「検索」って、つなわたりみたいな処理を作りますから、どれがなんて名前だか、ある程度頭の中に入れて処理を組み立てていかないと、すごーく時間かかってイライラしてきますよね。

こういうのは、本を見たりしてもなかなか実感が湧かないもんなんで、とにかくちっちゃい処理を作って試してみること。これですよね。


んん?なんですと?

で作ったフォームを開こうとすると、エラーになる??」

それは、テーブルを[都道府県テーブル][市区町村テーブル][地区テーブル]の3つに分けて、[郵便テーブル]を削除したからじゃないですかね。
もとにしてる[郵便テーブル]がなきゃ、フォーム開こうにも・・・。

いいじゃないですか。住所から郵便番号しぼりこめる仕組みは完成したんだから。

・・・わかりましたよう。じゃ、[郵便テーブル]に変るものを作りましょう。


[都道府県テーブル][市区町村テーブル][地区テーブル]を基にしたクエリーを作りましょう。まず、3つのテーブルを選びます。

で、3つのテーブルを、それぞれ関連するフィールド同士結びます。

3ついっぺんに考えないで、どのテーブルを基準にするか見定めましょう。
まず、[都道府県テーブル]と[市区町村テーブル]は、[都道府県番号]で結びつきますよね。
あと、[地区テーブル]は[市区町村テーブル]の[市区番号]と結び付けて考えます。

で、フィールドを選びます。

[郵便テーブル]のフィールドと同じ物をとりあえず・・・。

[都道府県番号]
[都道府県]
[市区番号]
[市区町村]
[地区名]
[事業所名]
[番地]
[郵便番号]

こんなもんですかね。



このクエリーにいろいろ抽出条件を書いてもいいんですが、これは他にも使い道があるかもしれないんで、これはこれでこの状態でQ_郵便とでも名前をつけて保存しておきます。

フォームが今もとにしている[クエリー1](あたしやそういう名前なんですけども)は、[郵便テーブル]を基にしていたので、[郵便テーブル]がなくなって困ってたわけですね。
で、このQ_郵便を、[郵便テーブル]の変わりにしてしまおうというわけです。

前の[クエリー1]を削除して、新しく作り始めてもいいし、[クエリー1]のデザイン画面を開いて、抜け殻になっている[郵便テーブル]のフィールドリストを消し、改めてQ_郵便を選択しなおしてもいいでしょう。

テーブルの追加は、ツールバーの黄色いプラス記号のツールボタンをクリックすると、上のようがウィンドウが出てきますので、ここから追加します。

このクエリーの抽出条件は変らず、

郵便番号が[forms]![フォーム]![テキスト2]と同じもの