メールマガジン【アクセスで作るシリーズ】
バックナンバー 【住所録ソフト編】 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
5
6 If IsNull(Me.ZipCode) Then
7 Exit Sub
8 End If
9
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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
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
5
6 If IsNull(Me.ZipCode) Then
7 Exit Sub
8 End If
9
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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□