メールマガジン【アクセスで作るシリーズ】
バックナンバー 【住所録ソフト編】 Vol.25
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
ACCESSで作るシリーズ 【住所録ソフト編】
発 行 : Yoshihisa Fukuda 2002.06.15 Vol.25
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、郵便番号データの更新サブルーチンのプログラム解説です。
______________________________________
□ 郵便番号データの更新サブルーチンのプログラム解説。
最初にこのサブルーチンの処理概要の説明です。
【郵便番号データの更新サブルーチン概要】
廃止ファイルをテンポラリのテーブルに読み込み、読み込んだテンポラリテーブル
を1レコードずつ参照しながら、ファイル最新日付が古いデータを郵便番号テーブル
から削除し、その処理を履歴としてログファイルに登録します。
テンポラリテーブルのレコードを全て削除し、追加ファイルをテンポラリテーブルに
読み込みます。
追加データを郵便番号テーブルへ追加していきます。
最後に、テンポラリテーブルを削除して終了します。
サブルーチンの戻り値は正常時が False 、エラー時は True を返します。
【郵便番号データの取込サブルーチン解説】
............................................................................
Private Function UpdateData() As Boolean
これはサブルーチンの定義です。
前回のImportDataと同様に、Boolean型の戻り値があります。
............................................................................
On Error GoTo Err_UpdateData
この On Error GoTo は、もう何度も出てきました。
エラーが発生した時、Err_UpdateData と言うラベルの付いた所に処理が移ります。
............................................................................
Dim SqlStr As String
Dim Addr_DB As Database
Dim Zip_T As Recordset
Dim Log_T As Recordset
Dim I As Integer
これらも、もうお馴染みの変数の宣言です。
............................................................................
Call CreateTmpTable
これも前回出てきました。
サブルーチン CreateTmpTable を呼び出しています。
CreateTmpTable は、郵便番号をインポートするために使用するテンポラリ(一時)
テーブルを作成します。
............................................................................
DoCmd.SetWarnings False
これも、今までに何回か出てきています。
アクセスが表示する確認メッセージ等の制御です。
............................................................................
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName1
これも、前回出てきました。
テキストボックスに入力された名前のCSVファイルをインポートします。
............................................................................
SqlStr = "select * " & _
"FROM ZipCodeTable, ZipCodeTableTmp " & _
"WHERE (((ZipCodeTable.Code)=[ZipCodeTableTmp].[Code]) AND " & _
"((ZipCodeTable.ZipCode)=[ZipCodeTableTmp].[ZipCode]) AND " & _
"((ZipCodeTable.Address1)=[ZipCodeTableTmp].[Address1]) AND " & _
"((ZipCodeTable.Address2)=[ZipCodeTableTmp].[Address2]) AND " & _
"((ZipCodeTable.Address3)=[ZipCodeTableTmp].[Address3]) AND " & _
"((ZipCodeTable.Flg1)=[ZipCodeTableTmp].[Flg1]) AND " & _
"((ZipCodeTable.Flg2)=[ZipCodeTableTmp].[Flg2]) AND " & _
"((ZipCodeTable.Flg3)=[ZipCodeTableTmp].[Flg3]) AND " & _
"((ZipCodeTable.Flg4)=[ZipCodeTableTmp].[Flg4]));"
これは、廃止するデータを抽出するSQL文です。
郵便番号テーブルの中で、テンポラリテーブルの郵便番号、都道府県名、市区町村名、
町域名、Flg1~Flg4までが同一のデータを抽出しています。
それが削除(廃止)対象データとなります。
............................................................................
Set Addr_DB = CurrentDb
Set Zip_T = Addr_DB.OpenRecordset(SqlStr)
Set Log_T = Addr_DB.OpenRecordset("ZipCodeLogTable")
これも、今まで何回か出てきています。
データベースとレコードセットのオブジェクトの取得を行っています。
Zip_T は全行のSQL文で抽出した削除対象データのレコードセットとなります。
Log_T はテンポラリテーブル(ZipCodeLogTable)のレコードセットです。
............................................................................
While (Zip_T.EOF = False)
Zip_T のレコードが最後になるまで、この While文の中の処理を繰り返します。
............................................................................
If Zip_T.Fields(17) < Me.LatestDate Then
ファイル最新日付が、廃止データより古い場合、この If文の Then の中の処理を
行います。
ファイル最新日付が、廃止データより新しい場合、Else の中の処理を行います。
............................................................................
Log_T.AddNew
For I = 1 To 15
Log_T.Fields(I) = Zip_T.Fields(I)
Next I
Log_T.Fields("LatestDate") = Me.LatestDate
Log_T.Fields("ExecuteDate") = Date
Log_T.Fields("Status") = 1
Log_T.Update
ファイル最新日付が古い場合に行う処理です。
履歴テーブル(Log_T)に履歴のデータを残すため、処理するデータの内容を設定して
テーブルに追加します。
データ最新日付は、フォームから入力されたファイル最新日付を設定し、処理日付
には、システム日付を設定します。
処理結果には「1:処理済み」を設定します。
............................................................................
SqlStr = "delete * from ZipCodeTable where ID = " & Zip_T.Fields(0)
DoCmd.RunSQL SqlStr
該当する廃止データをSQL文の delete を用いて削除しています。
............................................................................
Log_T.AddNew
For I = 1 To 15
Log_T.Fields(I) = Zip_T.Fields(I)
Next I
Log_T.Fields("LatestDate") = Me.LatestDate
Log_T.Fields("ExecuteDate") = Date
Log_T.Fields("Status") = 2
Log_T.Update
ファイル最新日付が新しい場合に行う処理です。
殆ど、ファイル最新日付が古い場合と同じですが、最新日付が新しいので、データは
削除しません。
従って、処理結果は「2:未処理」を設定します。
............................................................................
Zip_T.MoveNext
レコードセットのレコードを次に進めます。
レコードが最後の場合、Zip_T の EOF プロパティが True になり、この繰り返しを
抜け出します。
............................................................................
Wend
ここまでが、While文で繰り返す範囲です。
............................................................................
Zip_T.Close
Addr_DB.Close
Set Zip_T = Nothing
Set Addr_DB = Nothing
レコードセットとデータベースのオブジェクトをクローズし、開放しています。
............................................................................
SqlStr = "delete * from ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
テンポラリテーブルのデータを削除しています。
............................................................................
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName2
追加するCSVファイルをテンポラリテーブルにインポートしています。
............................................................................
SqlStr = "INSERT INTO ZipCodeTable ( Code, OldZipCode, ZipCode, " & _
"AddrKana1, AddrKana2, AddrKana3, Address1, Address2, " & _
"Address3, Flg1, Flg2, Flg3, Flg4, Flg5, Flg6, " & _
"RegistDate, ModifyDate ) " & _
"SELECT ZipCodeTableTmp.Code, ZipCodeTableTmp.OldZipCode, " & _
"ZipCodeTableTmp.ZipCode, ZipCodeTableTmp.AddrKana1, " & _
"ZipCodeTableTmp.AddrKana2, ZipCodeTableTmp.AddrKana3, " & _
"ZipCodeTableTmp.Address1, ZipCodeTableTmp.Address2, " & _
"ZipCodeTableTmp.Address3, ZipCodeTableTmp.Flg1, " & _
"ZipCodeTableTmp.Flg2, ZipCodeTableTmp.Flg3, " & _
"ZipCodeTableTmp.Flg4, ZipCodeTableTmp.Flg5, " & _
"ZipCodeTableTmp.Flg6, " & _
"#" & Me.LatestDate & "# AS RegistDate ," & _
"#" & Me.LatestDate & "# AS ModifyDate " & _
"FROM ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
INSERT 文のSQLを用いて、郵便番号テーブルにデータを追加しています。
............................................................................
SqlStr = "INSERT INTO ZipCodeLogTable ( Code, OldZipCode, ZipCode, " & _
"AddrKana1, AddrKana2, AddrKana3, Address1, Address2, " & _
"Address3, Flg1, Flg2, Flg3, Flg4, Flg5, Flg6, " & _
"LatestDate, ExecuteDate, Status ) " & _
"SELECT ZipCodeTableTmp.Code, ZipCodeTableTmp.OldZipCode, " & _
"ZipCodeTableTmp.ZipCode, ZipCodeTableTmp.AddrKana1, " & _
"ZipCodeTableTmp.AddrKana2, ZipCodeTableTmp.AddrKana3, " & _
"ZipCodeTableTmp.Address1, ZipCodeTableTmp.Address2, " & _
"ZipCodeTableTmp.Address3, ZipCodeTableTmp.Flg1, " & _
"ZipCodeTableTmp.Flg2, ZipCodeTableTmp.Flg3, " & _
"ZipCodeTableTmp.Flg4, ZipCodeTableTmp.Flg5, " & _
"ZipCodeTableTmp.Flg6, " & _
"#" & Me.LatestDate & "# AS LatestDate ," & _
"#" & Date & "# AS ExecuteDate ," & _
" 3 AS Status " & _
"FROM ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
INSERT 文のSQLを用いて、履歴テーブルにデータを追加しています。
............................................................................
DoCmd.SetWarnings True
最初に設定した確認メッセージ制御を戻しています。
............................................................................
Exit_UpdateData:
ラベルです。
............................................................................
DoCmd.DeleteObject acTable, "ZipCodeTableTmp"
テンポラリテーブルを削除しています。
............................................................................
Exit Function
サブルーチンを終了します。
............................................................................
Err_UpdateData:
エラーの時のラベルです。
............................................................................
UpdateData = True
戻り値を True(エラー)に設定しています。
............................................................................
MsgBox Err.Description
エラーメッセージを表示しています。
............................................................................
Resume Exit_UpdateData
ラベル Exit_UpdateData から、再開します。
............................................................................
End Function
サブルーチンの終了です。
............................................................................
以上が、郵便番号データの取込サブルーチンの解説です。
______________________________________
□ テンポラリテーブル作成サブルーチンのプログラム解説。
テンポラリテーブル作成(CreateTmpTable)のプログラムの解説です。
プログラムによりテーブルを作成している訳ですが、簡単に概要だけ解説します。
............................................................................
Set Addr_DB = CurrentDb
データベースオブジェクトを取得します。
............................................................................
Set tdf = Addr_DB.CreateTableDef("ZipCodeTableTMP")
データベースオブジェクトの CreateTableDef メソッドを用いてテーブルを作成
します。
............................................................................
Set fld = tdf.CreateField("ID", dbLong)
TableDef オブジェクトの CreateField メソッドで、そのテーブル内にフィールドを
作成します。
............................................................................
fld.Attributes = DB_AUTOINCRFIELD
作成したフィールドに対して、アトリビュート(属性)を設定しています。
DB_AUTOINCRFIELD と言うのはオートナンバー型を意味します。
............................................................................
tdf.Fields.Append fld
tdf.Fields.Refresh
フィールドオブジェクトに対して、Appendメソッドでフィールドが追加されます。
............................................................................
tdf.Fields.Append tdf.CreateField("Code", dbLong)
tdf.Fields.Append tdf.CreateField("OldZipCode", dbText, 5)
tdf.Fields.Append tdf.CreateField("ZipCode", dbText, 7)
tdf.Fields.Append tdf.CreateField("AddrKana1", dbText, 20)
tdf.Fields.Append tdf.CreateField("AddrKana2", dbText, 40)
tdf.Fields.Append tdf.CreateField("AddrKana3", dbText, 100)
tdf.Fields.Append tdf.CreateField("Address1", dbText, 20)
tdf.Fields.Append tdf.CreateField("Address2", dbText, 40)
tdf.Fields.Append tdf.CreateField("Address3", dbText, 100)
tdf.Fields.Append tdf.CreateField("Flg1", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg2", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg3", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg4", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg5", dbInteger)
tdf.Fields.Append tdf.CreateField("Flg6", dbInteger)
tdf.Fields.Append tdf.CreateField("RegistDate", dbDate)
tdf.Fields.Append tdf.CreateField("ModifyDate", dbDate)
CreateField メソッドで作成したフィールドをフィールドオブジェクトの Append
メソッドで追加して行きます。
CreateFieldでは、フィールド名、フィールド型、サイズを指定します。
............................................................................
Addr_DB.TableDefs.Append tdf
TableDef オブジェクトのAppendメソッドでテーブル定義を追加します。
............................................................................
Set idx = tdf.CreateIndex("PrimaryKey")
これは、主キー、インデックスの設定です。
TableDef オブジェクトの CreateIndex メソッドでインデックスを作成します。
引数はインデックス名です。
............................................................................
idx.Fields.Append idx.CreateField("ID")
インデックスオブジェクトにAppendメソッドでインデックスフィールド(ID)を追加
します。
............................................................................
idx.Primary = True
インデックスオブジェクトのPrimaryプロパティを True にすると、主キーとなります。
............................................................................
tdf.Indexes.Append idx
TableDef オブジェクトにAppendメソッドでインデックスを追加します。
............................................................................
Set idx = tdf.CreateIndex("ZipCode")
idx.Fields.Append idx.CreateField("ZipCode")
tdf.Indexes.Append idx
郵便番号(ZipCode)もインデックスに追加します。
郵便番号は主キーでは無いので、Primaryプロパティは設定しません。
............................................................................
Set fld = tdf.Fields("ID")
Set Prp = fld.CreateProperty("Description", dbText, "ID")
fld.Properties.Append Prp
フィールドオブジェクトのCreatePropertyメソッドでプロパティの追加が行えます。
引数にプロパティ名、データ型、内容を設定します。
このサブルーチン内では、"Description"(説明)と"Caption"(標題)のプロパティ
を追加しています。
............................................................................
今回は、ここまでです。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元 :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
ご質問等 :fukud@nifty.com
◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除 :http://homepage2.nifty.com/f-soft/
Copyright(C) 2001-2002 Yoshihisa Fukuda All rights reserved.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
ACCESSで作るシリーズ 【住所録ソフト編】
発 行 : Yoshihisa Fukuda 2002.06.15 Vol.25
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、郵便番号データの更新サブルーチンのプログラム解説です。
______________________________________
□ 郵便番号データの更新サブルーチンのプログラム解説。
最初にこのサブルーチンの処理概要の説明です。
【郵便番号データの更新サブルーチン概要】
廃止ファイルをテンポラリのテーブルに読み込み、読み込んだテンポラリテーブル
を1レコードずつ参照しながら、ファイル最新日付が古いデータを郵便番号テーブル
から削除し、その処理を履歴としてログファイルに登録します。
テンポラリテーブルのレコードを全て削除し、追加ファイルをテンポラリテーブルに
読み込みます。
追加データを郵便番号テーブルへ追加していきます。
最後に、テンポラリテーブルを削除して終了します。
サブルーチンの戻り値は正常時が False 、エラー時は True を返します。
【郵便番号データの取込サブルーチン解説】
............................................................................
Private Function UpdateData() As Boolean
これはサブルーチンの定義です。
前回のImportDataと同様に、Boolean型の戻り値があります。
............................................................................
On Error GoTo Err_UpdateData
この On Error GoTo は、もう何度も出てきました。
エラーが発生した時、Err_UpdateData と言うラベルの付いた所に処理が移ります。
............................................................................
Dim SqlStr As String
Dim Addr_DB As Database
Dim Zip_T As Recordset
Dim Log_T As Recordset
Dim I As Integer
これらも、もうお馴染みの変数の宣言です。
............................................................................
Call CreateTmpTable
これも前回出てきました。
サブルーチン CreateTmpTable を呼び出しています。
CreateTmpTable は、郵便番号をインポートするために使用するテンポラリ(一時)
テーブルを作成します。
............................................................................
DoCmd.SetWarnings False
これも、今までに何回か出てきています。
アクセスが表示する確認メッセージ等の制御です。
............................................................................
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName1
これも、前回出てきました。
テキストボックスに入力された名前のCSVファイルをインポートします。
............................................................................
SqlStr = "select * " & _
"FROM ZipCodeTable, ZipCodeTableTmp " & _
"WHERE (((ZipCodeTable.Code)=[ZipCodeTableTmp].[Code]) AND " & _
"((ZipCodeTable.ZipCode)=[ZipCodeTableTmp].[ZipCode]) AND " & _
"((ZipCodeTable.Address1)=[ZipCodeTableTmp].[Address1]) AND " & _
"((ZipCodeTable.Address2)=[ZipCodeTableTmp].[Address2]) AND " & _
"((ZipCodeTable.Address3)=[ZipCodeTableTmp].[Address3]) AND " & _
"((ZipCodeTable.Flg1)=[ZipCodeTableTmp].[Flg1]) AND " & _
"((ZipCodeTable.Flg2)=[ZipCodeTableTmp].[Flg2]) AND " & _
"((ZipCodeTable.Flg3)=[ZipCodeTableTmp].[Flg3]) AND " & _
"((ZipCodeTable.Flg4)=[ZipCodeTableTmp].[Flg4]));"
これは、廃止するデータを抽出するSQL文です。
郵便番号テーブルの中で、テンポラリテーブルの郵便番号、都道府県名、市区町村名、
町域名、Flg1~Flg4までが同一のデータを抽出しています。
それが削除(廃止)対象データとなります。
............................................................................
Set Addr_DB = CurrentDb
Set Zip_T = Addr_DB.OpenRecordset(SqlStr)
Set Log_T = Addr_DB.OpenRecordset("ZipCodeLogTable")
これも、今まで何回か出てきています。
データベースとレコードセットのオブジェクトの取得を行っています。
Zip_T は全行のSQL文で抽出した削除対象データのレコードセットとなります。
Log_T はテンポラリテーブル(ZipCodeLogTable)のレコードセットです。
............................................................................
While (Zip_T.EOF = False)
Zip_T のレコードが最後になるまで、この While文の中の処理を繰り返します。
............................................................................
If Zip_T.Fields(17) < Me.LatestDate Then
ファイル最新日付が、廃止データより古い場合、この If文の Then の中の処理を
行います。
ファイル最新日付が、廃止データより新しい場合、Else の中の処理を行います。
............................................................................
Log_T.AddNew
For I = 1 To 15
Log_T.Fields(I) = Zip_T.Fields(I)
Next I
Log_T.Fields("LatestDate") = Me.LatestDate
Log_T.Fields("ExecuteDate") = Date
Log_T.Fields("Status") = 1
Log_T.Update
ファイル最新日付が古い場合に行う処理です。
履歴テーブル(Log_T)に履歴のデータを残すため、処理するデータの内容を設定して
テーブルに追加します。
データ最新日付は、フォームから入力されたファイル最新日付を設定し、処理日付
には、システム日付を設定します。
処理結果には「1:処理済み」を設定します。
............................................................................
SqlStr = "delete * from ZipCodeTable where ID = " & Zip_T.Fields(0)
DoCmd.RunSQL SqlStr
該当する廃止データをSQL文の delete を用いて削除しています。
............................................................................
Log_T.AddNew
For I = 1 To 15
Log_T.Fields(I) = Zip_T.Fields(I)
Next I
Log_T.Fields("LatestDate") = Me.LatestDate
Log_T.Fields("ExecuteDate") = Date
Log_T.Fields("Status") = 2
Log_T.Update
ファイル最新日付が新しい場合に行う処理です。
殆ど、ファイル最新日付が古い場合と同じですが、最新日付が新しいので、データは
削除しません。
従って、処理結果は「2:未処理」を設定します。
............................................................................
Zip_T.MoveNext
レコードセットのレコードを次に進めます。
レコードが最後の場合、Zip_T の EOF プロパティが True になり、この繰り返しを
抜け出します。
............................................................................
Wend
ここまでが、While文で繰り返す範囲です。
............................................................................
Zip_T.Close
Addr_DB.Close
Set Zip_T = Nothing
Set Addr_DB = Nothing
レコードセットとデータベースのオブジェクトをクローズし、開放しています。
............................................................................
SqlStr = "delete * from ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
テンポラリテーブルのデータを削除しています。
............................................................................
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName2
追加するCSVファイルをテンポラリテーブルにインポートしています。
............................................................................
SqlStr = "INSERT INTO ZipCodeTable ( Code, OldZipCode, ZipCode, " & _
"AddrKana1, AddrKana2, AddrKana3, Address1, Address2, " & _
"Address3, Flg1, Flg2, Flg3, Flg4, Flg5, Flg6, " & _
"RegistDate, ModifyDate ) " & _
"SELECT ZipCodeTableTmp.Code, ZipCodeTableTmp.OldZipCode, " & _
"ZipCodeTableTmp.ZipCode, ZipCodeTableTmp.AddrKana1, " & _
"ZipCodeTableTmp.AddrKana2, ZipCodeTableTmp.AddrKana3, " & _
"ZipCodeTableTmp.Address1, ZipCodeTableTmp.Address2, " & _
"ZipCodeTableTmp.Address3, ZipCodeTableTmp.Flg1, " & _
"ZipCodeTableTmp.Flg2, ZipCodeTableTmp.Flg3, " & _
"ZipCodeTableTmp.Flg4, ZipCodeTableTmp.Flg5, " & _
"ZipCodeTableTmp.Flg6, " & _
"#" & Me.LatestDate & "# AS RegistDate ," & _
"#" & Me.LatestDate & "# AS ModifyDate " & _
"FROM ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
INSERT 文のSQLを用いて、郵便番号テーブルにデータを追加しています。
............................................................................
SqlStr = "INSERT INTO ZipCodeLogTable ( Code, OldZipCode, ZipCode, " & _
"AddrKana1, AddrKana2, AddrKana3, Address1, Address2, " & _
"Address3, Flg1, Flg2, Flg3, Flg4, Flg5, Flg6, " & _
"LatestDate, ExecuteDate, Status ) " & _
"SELECT ZipCodeTableTmp.Code, ZipCodeTableTmp.OldZipCode, " & _
"ZipCodeTableTmp.ZipCode, ZipCodeTableTmp.AddrKana1, " & _
"ZipCodeTableTmp.AddrKana2, ZipCodeTableTmp.AddrKana3, " & _
"ZipCodeTableTmp.Address1, ZipCodeTableTmp.Address2, " & _
"ZipCodeTableTmp.Address3, ZipCodeTableTmp.Flg1, " & _
"ZipCodeTableTmp.Flg2, ZipCodeTableTmp.Flg3, " & _
"ZipCodeTableTmp.Flg4, ZipCodeTableTmp.Flg5, " & _
"ZipCodeTableTmp.Flg6, " & _
"#" & Me.LatestDate & "# AS LatestDate ," & _
"#" & Date & "# AS ExecuteDate ," & _
" 3 AS Status " & _
"FROM ZipCodeTableTmp;"
DoCmd.RunSQL SqlStr
INSERT 文のSQLを用いて、履歴テーブルにデータを追加しています。
............................................................................
DoCmd.SetWarnings True
最初に設定した確認メッセージ制御を戻しています。
............................................................................
Exit_UpdateData:
ラベルです。
............................................................................
DoCmd.DeleteObject acTable, "ZipCodeTableTmp"
テンポラリテーブルを削除しています。
............................................................................
Exit Function
サブルーチンを終了します。
............................................................................
Err_UpdateData:
エラーの時のラベルです。
............................................................................
UpdateData = True
戻り値を True(エラー)に設定しています。
............................................................................
MsgBox Err.Description
エラーメッセージを表示しています。
............................................................................
Resume Exit_UpdateData
ラベル Exit_UpdateData から、再開します。
............................................................................
End Function
サブルーチンの終了です。
............................................................................
以上が、郵便番号データの取込サブルーチンの解説です。
______________________________________
□ テンポラリテーブル作成サブルーチンのプログラム解説。
テンポラリテーブル作成(CreateTmpTable)のプログラムの解説です。
プログラムによりテーブルを作成している訳ですが、簡単に概要だけ解説します。
............................................................................
Set Addr_DB = CurrentDb
データベースオブジェクトを取得します。
............................................................................
Set tdf = Addr_DB.CreateTableDef("ZipCodeTableTMP")
データベースオブジェクトの CreateTableDef メソッドを用いてテーブルを作成
します。
............................................................................
Set fld = tdf.CreateField("ID", dbLong)
TableDef オブジェクトの CreateField メソッドで、そのテーブル内にフィールドを
作成します。
............................................................................
fld.Attributes = DB_AUTOINCRFIELD
作成したフィールドに対して、アトリビュート(属性)を設定しています。
DB_AUTOINCRFIELD と言うのはオートナンバー型を意味します。
............................................................................
tdf.Fields.Append fld
tdf.Fields.Refresh
フィールドオブジェクトに対して、Appendメソッドでフィールドが追加されます。
............................................................................
tdf.Fields.Append tdf.CreateField("Code", dbLong)
tdf.Fields.Append tdf.CreateField("OldZipCode", dbText, 5)
tdf.Fields.Append tdf.CreateField("ZipCode", dbText, 7)
tdf.Fields.Append tdf.CreateField("AddrKana1", dbText, 20)
tdf.Fields.Append tdf.CreateField("AddrKana2", dbText, 40)
tdf.Fields.Append tdf.CreateField("AddrKana3", dbText, 100)
tdf.Fields.Append tdf.CreateField("Address1", dbText, 20)
tdf.Fields.Append tdf.CreateField("Address2", dbText, 40)
tdf.Fields.Append tdf.CreateField("Address3", dbText, 100)
tdf.Fields.Append tdf.CreateField("Flg1", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg2", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg3", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg4", dbBoolean)
tdf.Fields.Append tdf.CreateField("Flg5", dbInteger)
tdf.Fields.Append tdf.CreateField("Flg6", dbInteger)
tdf.Fields.Append tdf.CreateField("RegistDate", dbDate)
tdf.Fields.Append tdf.CreateField("ModifyDate", dbDate)
CreateField メソッドで作成したフィールドをフィールドオブジェクトの Append
メソッドで追加して行きます。
CreateFieldでは、フィールド名、フィールド型、サイズを指定します。
............................................................................
Addr_DB.TableDefs.Append tdf
TableDef オブジェクトのAppendメソッドでテーブル定義を追加します。
............................................................................
Set idx = tdf.CreateIndex("PrimaryKey")
これは、主キー、インデックスの設定です。
TableDef オブジェクトの CreateIndex メソッドでインデックスを作成します。
引数はインデックス名です。
............................................................................
idx.Fields.Append idx.CreateField("ID")
インデックスオブジェクトにAppendメソッドでインデックスフィールド(ID)を追加
します。
............................................................................
idx.Primary = True
インデックスオブジェクトのPrimaryプロパティを True にすると、主キーとなります。
............................................................................
tdf.Indexes.Append idx
TableDef オブジェクトにAppendメソッドでインデックスを追加します。
............................................................................
Set idx = tdf.CreateIndex("ZipCode")
idx.Fields.Append idx.CreateField("ZipCode")
tdf.Indexes.Append idx
郵便番号(ZipCode)もインデックスに追加します。
郵便番号は主キーでは無いので、Primaryプロパティは設定しません。
............................................................................
Set fld = tdf.Fields("ID")
Set Prp = fld.CreateProperty("Description", dbText, "ID")
fld.Properties.Append Prp
フィールドオブジェクトのCreatePropertyメソッドでプロパティの追加が行えます。
引数にプロパティ名、データ型、内容を設定します。
このサブルーチン内では、"Description"(説明)と"Caption"(標題)のプロパティ
を追加しています。
............................................................................
今回は、ここまでです。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元 :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
ご質問等 :fukud@nifty.com
◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除 :http://homepage2.nifty.com/f-soft/
Copyright(C) 2001-2002 Yoshihisa Fukuda All rights reserved.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□