メールマガジン【アクセスで作るシリーズ】
バックナンバー 【住所録ソフト編】 Vol.22
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
ACCESSで作るシリーズ 【住所録ソフト編】
発 行 : Yoshihisa Fukuda 2002.05.04 Vol.22
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、郵便番号データ更新のプログラム作成です。
______________________________________
□ 郵便番号データ更新のサブルーチンを作成する。
前回作成した、郵便番号データ更新のサブルーチンの殻にプログラムを埋めます。
1.住所録ソフトのデータベース[Address.mdb]を開きます。
2.データベースウィンドウの[フォーム]タブを選択します。
3.郵便番号データ取り込み・更新フォーム[ZipUpdateForm]を選択し[デザイン]
ボタンを押下します。
4.モジュールウィンドウを開き、前回最下行に記述した、郵便番号データ更新の
サブルーチンに、以下のコードを記述します。
Private Function UpdateData() As Boolean
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
DoCmd.SetWarnings False
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName1
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]));"
Set Addr_DB = CurrentDb
Set Zip_T = Addr_DB.OpenRecordset(SqlStr)
Set Log_T = Addr_DB.OpenRecordset("ZipCodeLogTable")
While (Zip_T.EOF = False)
If Zip_T.Fields(17) < Me.LatestDate Then
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
SqlStr = "delete * from ZipCodeTable where ID = " & Zip_T.Fields(0)
DoCmd.RunSQL SqlStr
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") = 2
Log_T.Update
End If
Zip_T.MoveNext
Wend
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
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
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
DoCmd.SetWarnings True
Exit_UpdateData:
DoCmd.DeleteObject acTable, "ZipCodeTableTmp"
Exit Function
Err_UpdateData:
UpdateData = True
MsgBox Err.Description
Resume Exit_UpdateData
End Function
______________________________________
□ フォームの入力が無い場合のチェックを行う。
コードが記述できたら、入力チェックのプログラムを追加します。
前回、取込・更新ボタン(ExecuteBtn)の[クリック時]プロパティの所に、郵便番号
データ取込処理での、入力チェックを追加しました。
今回は、ここに新たにコードを記述します。
1.取込・更新ボタン(ExecuteBtn)を選択し[クリック時]プロパティへカーソルを
移動し、右端の[...]ボタンを押下してモジュールウィンドウを開きます。
2.Private Sub ExecuteBtn_Click() という関数にコードを追加します。
Private Sub ExecuteBtn_Click()
If IsNull(Me.FileName1) Then
MsgBox "ファイル名を入力して下さい。"
Exit Sub
End If
If IsNull(Me.LatestDate) Then
MsgBox "ファイル最新日付を入力して下さい。"
Exit Sub
End If
Select Case Me.OpenArgs
Case 1
If ImportData Then
MsgBox "郵便番号データ取込を中断しました。"
Else
MsgBox "郵便番号データ取込が完了しました。"
End If
Case 2
------- 今回追加するコードはここから -------------------
If IsNull(Me.FileName2) Then
MsgBox "ファイル名を入力して下さい。"
Exit Sub
End If
------- 今回追加するコードはここまで --------------------
If UpdateData Then
MsgBox "郵便番号データ更新を中断しました。"
Else
MsgBox "郵便番号データ更新が完了しました。"
End If
Case Else
MsgBox "パラメータエラー"
End Select
End Sub
3.コードが記述できたら、モジュールウィンドウを閉じて、フォームを保存します。
今回はここまでです。
次回は、郵便番号データ取込・更新のプログラムの解説を行います。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ 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.05.04 Vol.22
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、郵便番号データ更新のプログラム作成です。
______________________________________
□ 郵便番号データ更新のサブルーチンを作成する。
前回作成した、郵便番号データ更新のサブルーチンの殻にプログラムを埋めます。
1.住所録ソフトのデータベース[Address.mdb]を開きます。
2.データベースウィンドウの[フォーム]タブを選択します。
3.郵便番号データ取り込み・更新フォーム[ZipUpdateForm]を選択し[デザイン]
ボタンを押下します。
4.モジュールウィンドウを開き、前回最下行に記述した、郵便番号データ更新の
サブルーチンに、以下のコードを記述します。
Private Function UpdateData() As Boolean
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
DoCmd.SetWarnings False
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName1
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]));"
Set Addr_DB = CurrentDb
Set Zip_T = Addr_DB.OpenRecordset(SqlStr)
Set Log_T = Addr_DB.OpenRecordset("ZipCodeLogTable")
While (Zip_T.EOF = False)
If Zip_T.Fields(17) < Me.LatestDate Then
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
SqlStr = "delete * from ZipCodeTable where ID = " & Zip_T.Fields(0)
DoCmd.RunSQL SqlStr
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") = 2
Log_T.Update
End If
Zip_T.MoveNext
Wend
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
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
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
DoCmd.SetWarnings True
Exit_UpdateData:
DoCmd.DeleteObject acTable, "ZipCodeTableTmp"
Exit Function
Err_UpdateData:
UpdateData = True
MsgBox Err.Description
Resume Exit_UpdateData
End Function
______________________________________
□ フォームの入力が無い場合のチェックを行う。
コードが記述できたら、入力チェックのプログラムを追加します。
前回、取込・更新ボタン(ExecuteBtn)の[クリック時]プロパティの所に、郵便番号
データ取込処理での、入力チェックを追加しました。
今回は、ここに新たにコードを記述します。
1.取込・更新ボタン(ExecuteBtn)を選択し[クリック時]プロパティへカーソルを
移動し、右端の[...]ボタンを押下してモジュールウィンドウを開きます。
2.Private Sub ExecuteBtn_Click() という関数にコードを追加します。
Private Sub ExecuteBtn_Click()
If IsNull(Me.FileName1) Then
MsgBox "ファイル名を入力して下さい。"
Exit Sub
End If
If IsNull(Me.LatestDate) Then
MsgBox "ファイル最新日付を入力して下さい。"
Exit Sub
End If
Select Case Me.OpenArgs
Case 1
If ImportData Then
MsgBox "郵便番号データ取込を中断しました。"
Else
MsgBox "郵便番号データ取込が完了しました。"
End If
Case 2
------- 今回追加するコードはここから -------------------
If IsNull(Me.FileName2) Then
MsgBox "ファイル名を入力して下さい。"
Exit Sub
End If
------- 今回追加するコードはここまで --------------------
If UpdateData Then
MsgBox "郵便番号データ更新を中断しました。"
Else
MsgBox "郵便番号データ更新が完了しました。"
End If
Case Else
MsgBox "パラメータエラー"
End Select
End Sub
3.コードが記述できたら、モジュールウィンドウを閉じて、フォームを保存します。
今回はここまでです。
次回は、郵便番号データ取込・更新のプログラムの解説を行います。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
◇ 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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□