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


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

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

    発 行 : Yoshihisa Fukuda          2002.05.25 Vol.24

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回は、郵便番号データの取込サブルーチンのプログラム解説です。
______________________________________
 □ 郵便番号データの取込サブルーチンのプログラム解説。

まず、最初にこのサブルーチンの処理の概要を説明しましょう。

【郵便番号データの取込サブルーチン概要】

フォームのテキストボックスに入力されたファイル名が、存在するかチェックし
インポートするための、テンポラリ(一時)テーブル(ZipCodeTableTMP)を作成
します。

インポートしたテンポラリテーブルの登録日付、更新日付に、フォームから入力
されたデータ最新日付(LatestDate)を設定します。

現行の郵便番号テーブルを削除し、テンポラリテーブルのテーブル名を、郵便番号
テーブルのテーブル名に変更(リネーム)します。

途中で、エラーが発生した場合は、テンポラリテーブルを削除し、エラーメッセージ
を表示して終了します。

サブルーチンの戻り値は正常時が False 、エラー時は True を返します。


【郵便番号データの取込サブルーチン解説】

では、コードを見ながら解説していきます。

............................................................................
Private Function ImportData() As Boolean

これはサブルーチンの定義です。
最初の Private は同一モジュール内でのみ参照可能と言う意味です。
まし、他のモジュールからも参照する様な場合、先頭に Public と付けます。

Function はサブルーチンの定義です。
Sub も同じサブルーチンの定義ですが、Sub は戻り値を返す事が出来ないのに対して
Function は戻り値を返すことが出来ます。

ImportData() はサブルーチン名です。
このサブルーチンに対して引数(パラメータ)を渡す場合、( )の中に引数の宣言
を記述します。

最後の As Boolean は戻り値の型を宣言しています。
このImportData()と言うサブルーチンの戻り値は Boolean型、即ち True Or False
(又はYes Or No)となります。

............................................................................
On Error GoTo Err_ImportData

この On Error GoTo は前回に解説しました。
エラーが発生した時、Err_ImportData と言うラベルの付いた所に処理が移ります。

............................................................................
Dim SqlStr As String

これは、もうお馴染みの変数宣言です。
SqlStr と言う変数を文字列型で宣言しています。

............................................................................
If Dir(Me.FileName1) = "" Then
  MsgBox "取込ファイルが存在しません。"
  ImportData = True
  Exit Function
End If

この If文では、ファイル名のテキストボックス(FileName1)のファイルが存在して
いるかをチェックしています。
Dir 関数は、ファイル名やファイルの属性を指定して、該当するファイルがあれば
そのファイル名を返してくれる関数です。
該当するファイルが無い場合、Dir関数は長さ0の文字列("")を返します。
テキストボックス(FileName1)に入力されたファイル名のファイルが存在しない場合、
"取込ファイルが存在しません。"のメッセージを表示し、この関数(ImportData)の
戻り値が True で戻るようにします。

............................................................................
Call CreateTmpTable

Call文はサブルーチンの呼び出しです。
CreateTmpTable は、郵便番号をインポートするために使用するテンポラリ(一時)
テーブルを作成します。

Call文は省略する事が出来ます。
Call を付けずに、ただ単に CreateTmpTable と書いても良いのですがサブルーチン
を呼び出している事を明示的に表すため、Callを付けています。

............................................................................
DoCmd.TransferText acImportDelim, "郵便番号データ インポート定義", _
"ZipCodeTableTMP", Me.FileName1

ここで、CSVファイル(テキストボックスで指定したファイル)をインポートして
います。
DoCmd.TransferText は、メニューの[ファイル]-[外部データの取込]-[インポート]
と同じ事を行います。

acImportDelim は、区切り文字で区切られたテキストファイルをインポートすると
言う意味です。
ここの引数によって、インポート、エクスポート、リンクの指定ができます。
また、テキストファイルの種類(区切り文字、固定長など)の指定もこの引数です。

"郵便番号データ インポート定義" はインポート定義ファイルのファイル名です。
(インポート定義ファイルの作成の仕方は、Vol.20にあります。)

メニューからインポートを行うと、CSVファイルの区切り文字や、その他の色々な
定義をダイアログから指定できます。
しかし、プログラムからインポートする場合、指定画面が出ませんので、その指定を
インポート定義ファイルを用いて行います。

"ZipCodeTableTMP" は、インポート先のテーブル名です。

最後の Me.FileName1 は、インポートするテキストファイルのファイル名です。

............................................................................
SqlStr = "UPDATE ZipCodeTableTMP SET RegistDate = #" & Me.LatestDate & _
     "#, ModifyDate = #" & Me.LatestDate & "#;"
DoCmd.SetWarnings False
DoCmd.RunSQL SqlStr
DoCmd.SetWarnings True

上記4行でSQLを実行しています。
まず、SqlStr と言う変数にSQL文を代入しています。

SQL文の解説
UPDATE はテーブルの更新です。

ZipCodeTableTMP と言うテーブルの RegistDate と ModifyDate と言う2つの
フィールドに値を設定(SET)します。
設定する値は RegistDate ModifyDate 共に Me.LatestDate(テキストボックスの値)
です。

DoCmd.SetWarnings False は、メッセージの抑制です。
ここで言うメッセージは、テーブルのデータを更新したり削除したりする時に表示
される確認メッセージです。
DoCmd.SetWarnings で、パラメータに True を指定するとメッセージは表示され、
False を指定するとメッセージは非表示になります。

............................................................................
Forms![ZipCodeForm].RecordSource = ""
DoCmd.DeleteObject acTable, "ZipCodeTable"
DoCmd.Rename "ZipCodeTable", acTable, "ZipCodeTableTMP"
Forms![ZipCodeForm].RecordSource = "ZipCodeTable"

この4行では、元の郵便番号テーブルを削除し、インポートした郵便番号テーブルに
差し替える処理を行っています。

まず最初に Forms![ZipCodeForm].RecordSource = "" でフォームのレコードソースを
長さ0の文字列("")にしてから、DoCmd.DeleteObject で郵便番号テーブルを削除
します。
DoCmd.DeleteObject はオブジェクトの削除で、acTable はテーブルを削除する事を
意味します。
ここでは "ZipCodeTableTMP" と言うテーブルを削除しています。

DoCmd.Rename はオブジェクトの名前の変更です。
"ZipCodeTable" と言う名前のテーブル acTable を "ZipCodeTableTMP" と言う名前に
変更しています。

そして Forms![ZipCodeForm].RecordSource = "ZipCodeTable" でフォームのレコード
ソースに再び "ZipCodeTable" を設定しています。

............................................................................
ImportData = False

サブルーチンが正常に処理が終了したと言う事で、関数の戻り値を False に設定して
います。

............................................................................
Exit_ImportData:

ラベルです。
ラベル名は予約語を除いて、好きな名前を付けることができます。
ラベルは最後に : を付加します。

............................................................................
Exit Function

サブルーチンを終了します。
Sub で宣言したサブルーチンを終了する場合、Exit Sub と書きます。

............................................................................
Err_ImportData:

こちらは、エラー時のラベルです。

............................................................................
DoCmd.DeleteObject acTable, "ZipCodeTableTMP"

エラーの時は、インポートしたテーブル "ZipCodeTableTMP" を削除します。

............................................................................
ImportData = True

エラーなので、戻り値に True を設定しています。

............................................................................
MsgBox Err.Description

エラーメッセージを表示しています。
Errも、前回に解説しました。

............................................................................
Resume Exit_ImportData

ラベル Exit_ImportData から、再開します。
これも前回に解説してあります。

............................................................................
End Function

サブルーチンの終了です。
Exit Function はサブルーチンの途中で終了する場合に使用します。
End Function は、サブルーチンの最後に記述します。

............................................................................

今回は、ここまでです。

CreateTmpTable サブルーチンの解説は次回に行います。
______________________________________
 □ サブルーチンについての補足

 サブルーチンには、引数の有無、戻り値の有無、そして参照範囲があります。

 それぞれを、例を見ながら説明していきましょう。


【同一モジュール内でのみ参照可能で、引数、戻り値が無いサブルーチン】

 (宣言)
 Private Sub XXX()

 (呼び出し方)
 Call XXX


【他のモジュールでも参照可能で、引数が有り、戻り値が無いサブルーチン】

 (宣言)
 Public Function XXX(a As Integer)

 (呼び出し方)
 Call XXX(10) <--- Call をつけた場合、引数を( )で括る。

 又は

 XXX 10 <--------- Call を省略する場合、引数の( )も省略しなくてはならない。


【他のモジュールでも参照可能で、引数、戻り値が有るサブルーチン】

 (宣言)
 Public Function XXX(a As Integer) As Boolean

 (呼び出し方)
 Ret As Boolean
 Ret = XXX(10) <----- 戻り値を取得する場合、Call で呼び出す事はできない。

 又は

 If XXX(10) Then <--- こちらも戻り値があるので、Call では呼び出せない。


※ Function も Sub も Private や Public を省略すると、Public になります。

______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ 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.

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