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


バックナンバー 【住所録ソフト編】 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.

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