メールマガジン【アクセスで作るシリーズ】


バックナンバー 【住所録ソフト編】 Vol.12
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【住所録ソフト編】

    発 行 : Yoshihisa Fukuda          2001.12.29 Vol.12

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、前半で前回のプログラムの解説を行います。
そして、後半では次回作成する、郵便番号に該当するデータが複数ある場合について
少しだけ触れてみたいと思います。
______________________________________
 □ 前回のプログラムの解説

 まず、最初に前回のプログラムを見てみましょう。
 以下が、そのコードです。

1 Dim Addr_DB As Database
2 Dim ZipCode_T As Recordset
3 Dim ZipFind As String
4 Dim AddrStr As String

6 If IsNull(Me.ZipCode) Then
7   Exit Sub
8 End If

10 ZipFind = Left(Me.ZipCode, 3) & Right(Me.ZipCode, 4)
11
12 Set Addr_DB = CurrentDb
13 Set ZipCode_T = Addr_DB.OpenRecordset("ZipCodeTable", dbOpenSnapshot)
14
15 ZipCode_T.FindFirst "ZipCode = '" & ZipFind & "'"
16
17 If ZipCode_T.NoMatch Then
18   MsgBox "郵便番号に該当する住所が見つかりません。"
19   Me.Address = Null
20   Exit Sub
21 End If
22 AddrStr = ZipCode_T.Fields("Address1") & _
23      ZipCode_T.Fields("Address2")
24 If ZipCode_T.Fields("Address3") <> "以下に掲載がない場合" Then
25   AddrStr = AddrStr & ZipCode_T.Fields("Address3")
26 End If
27
28 Me.Address = AddrStr
29
30 ZipCode_T.Close
31 Addr_DB.Close
32
33 Set ZipCode_T = Nothing
34 Set Addr_DB = Nothing

 【解説】
 1.まず1~4行目は変数の宣言です。
   1行目はデータベース、2行目はレコードセットの宣言ですが、このDatabase
   とRecordsetはAccessのDAOを使用しています。
   DAOはAccess97では標準ですが、Access2000ではADOが標準のため、少し設定を
   変更する必要があります。
   設定方法は、メールマガジンの最後の方にまとめておきますので、Access2000
   をお使いの方は注意して下さい。

 2.6行目のIf文は、郵便番号が未入力のチェックを行っています。
   郵便番号が未入力の場合、7行目のExit Subにより、このプログラムを終了
   します。

 3.10行目は、郵便番号の-を取り除いています。
   Me.ZipCodeと言うのが、フォームの郵便番号フィールドを表します。
   Left関数で左側から3桁、Right関数で右側から4桁の文字列を切り出し、&で
   文字列結合して、ZipFindと言う文字列型の変数に代入しています。

 4.12行目はデータベースのオープン、13行目は郵便番号テーブルのオープン
   を行っています。

 5.15行目では、郵便番号テーブルから、フォームで入力された郵便番号を検索
   しています。
   ZipCode_T.FindFirstとは、郵便番号テーブル(ZipCode_T)の先頭レコード
   から探すと言う意味になります。
   そして、パラメータの"ZipCode = '" & ZipFind & "'"が、検索する条件です。
   例えば、フォームから郵便番号に110-0001と入力したとします。
   すると、先程の10行目の代入文でZipFind変数に1100001と代入されます。
   従って、パラメータは、"ZipCode = '1100001'"となります。
   これで、郵便番号テーブルのZipCodeフィールドが1100001のデータを先頭レコ
   ードから検索する事ができます。

 6.17行目のIf文では、先程の検索結果で該当データが在るか無いかの判断を
   しています。
   ZipCode_T.FindFirstにより、検索したデータが存在する場合、ZipCode_Tの
   [NoMatch]プロパティはFalseとなり、データが存在しない場合Trueとなります。

   If文は条件が真(True)の時、Thenの処理を行うので、[NoMatch]プロパティ
   がTrue(即ちデータが存在しない時)の場合、Thenの中でMsgBoxにより
   メッセージ「郵便番号に該当する住所が見つかりません。」を表示し、その後
   Me.Address = Nullでフォームの住所をクリアして、Exit Subで、このプログ
   ラムを終了します。

 7.22・23行目は、検索したデータがあった場合、そのデータをAddrStrと言う
   変数に代入します。
   ZipCode_T.Fields("Address1")は郵便番号テーブルのAddress1フィールドの
   内容を表します。
   同じくZipCode_T.Fields("Address2")は郵便番号テーブルのAddress2フィール
   ドの内容を表します。
   & _ は & は先程10行目で出てきた文字列結合です。
   そして、 _ は複数行に渡って、1ステートメントを記述する場合、継続行で
   ある事を表します。

   このメールマガジンでは、1行の桁数に制限があるため、2行にまたがって
   記述しましたが、この2行を次の様に書いても同じ事になります。

AddrStr = ZipCode_T.Fields("Address1") & ZipCode_T.Fields("Address2")

 8.22・23行目では、都道府県と市区町村を結合しましたが、町域名も結合
   しなくてはいけません。
   但し、町域名には「その他」の意味として「以下に掲載がない場合」と入って
   いる場合があります。
   そこで24行目のIf文で「以下に掲載がない場合」は結合せず、それ以外なら
   AddrStr に結合しています。

 9.28行目では、都道府県、市区町村、町域名を結合したAddrStrと言う変数を
   フォームの住所(Me.Address)に代入しています。

 10.30・31行目はオープンした郵便番号テーブルと、データベースのクローズ
   を行っています。

 11.33・34行目では、データベースとレコードセットで使用した領域の開放を
   行っています。

 以上が、前回のプログラムの解説です。
______________________________________
 □ 郵便番号に該当するデータが複数件ある場合

 次に考えなければいけないのが、郵便番号に該当する住所データが、複数件ある
 場合です。
 その場合、データの件数分、一覧表示するフォームを用意します。

 考え方は、色々あると思いますが、ここでは、一番手軽な方法としてDCount関数を
 使用して、該当データの件数をチェックしたいと思います。

 まず最初に、このDCount関数を用いて、該当データの件数を求め、1件だけなら
 今のプログラムで、そのまま住所を設定します。

 1件以上、該当データがあった場合、一覧表示フォームを表示して、そこから選択
 された1件のデータをフォームの住所欄へ設定する様にします。

 実際の一覧フォームとプログラムの作成は次回にしましょう。
______________________________________
 □ Access2000をお使いの方へ

 このメールマガジンは、基本的にAccess97をターゲットとしています。

 従って、VBAによるデータベース操作はDAOを使用します。

 Access2000は、標準でADOを使用する様になっているため、そのままではエラーに
 なってしまいます。

 DAOを使用するには、以下の設定を行って下さい。

 1.Microsoft Visual Basic の画面を開きます。
   (いずれかのフォームを開いて、メニューの[表示]-[コード]で開きます)

 2.Microsoft Visual Basic の画面になったら、メニューの[ツール]-[参照設定]
   を選択します。

 3.参照設定と言うダイアログが開くので、Microsoft DAO 3.6 Object Library
   にチェックを入れます。

 4.Microsoft ActiveX Data Object 2.1 Library にチェックが入っていたら、
   そのチェックを外します。

 5.[OK]ボタンを押下し、参照設定ダイアログを閉じます。

 以上で、設定は完了です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :fukud@nifty.com

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除  :http://homepage2.nifty.com/f-soft/

 Copyright(C) 2001 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□