Access実践入門 TOPへ
 ■ マイクロソフトアクセス、テーブルのリンク操作
テーブルを自動でリンクする

いままでのサンプルデータでは、テーブルのリンクは、手作業でAccessのメニューからしていましたが、それでは面倒ですので、プログラムのメニューの中から実行できるようにしています。

「folink指定」を見てください。
非連結の[data場所]に ”c:\acadd” (規定の場所)のように入力することになります。

入力後、実行ボタンが押されます。
実行ボタンの「フォーカス取得時」に、入力されていなかった場合のチェックがあります。
「クリック時」に次のようにモジュールが書かれています。

--------------------------------------------
Dim db As Database
Dim Datapath As String

Set db = CurrentDb
Datapath = Me.data場所 & "\会員処理Data01.mdb"

On Error Resume Next

db.TableDefs.Delete "ta会員"
db.TableDefs.Delete "ta請求"
db.TableDefs.Delete "ta請求単価"
db.TableDefs.Delete "ta大会"
db.TableDefs.Delete "ta大会参加者"
db.TableDefs.Delete "ta郵便番号"



On Error GoTo ErrorHandler

DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta会員", "ta会員"
DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta請求", "ta請求"
DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta請求単価", "ta請求単価"
DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta大会", "ta大会"
DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta大会参加者", "ta大会参加者"
DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta郵便番号", "ta郵便番号"


MsgBox ("リンクテーブルの設定が完了しました。")
DoCmd.Close


Exit Sub


ErrorHandler:

MsgBox ("指定されたフォルダにデータがありません。もう一度指定してください。")
DoCmd.GoToControl "data場所"

--------------------------------------------

Datapath = Me.data場所 & "\会員処理Data01.mdb"
ここで、入力されたデータに"\会員処理Data01.mdb"をプラスして、
変数、Datapathに ”c:\acadd\会員処理Data01.mdb” が代入されます。

On Error Resume Next は、ここの行以降でエラーが発生しても、止まらないで次の行へ処理を進めるという意味になります。リンクが失敗した場合等で、そのまま終了したら、ta会員等のテーブルは無い状態なので、db.TableDefs.Delete "ta会員"でエラーになりますが、そのあとリンクをするので、無い状態でも問題ありません、リンクテーブルの存在の有無にかかわらず、とりあえずDeleteするということです。

On Error GoTo ErrorHandler は、ここの行以降でエラーが発生したら、ErrorHandlerに飛びなさいという意味です。
ここでのエラーは、フォルダの指定違いか、”会員処理data01.mdb”が存在しない場合ですので、プログラムを止めて、再入力を指示しなければいけません。
エラー処理部分に飛んで、コントロールをdata場所に戻しています。

DoCmd.TransferDatabase acLink, "Microsoft Access", Datapath, acTable, "ta会員", "ta会員"
この一連の処理で、テーブルをリンクしています。

MsgBox ("リンクテーブルの設定が完了しました。")
DoCmd.Close
エラーがなければ、メッセージを表示して、フォームを閉じます。


「中止」ボタンの「クリック時」は、次のようになっています。

--------------------------------------------
Dim n As Long

On Error GoTo ErrorHandler

n = DCount("請求単価cd", "ta請求単価")

DoCmd.Close
Exit Sub

ErrorHandler:

MsgBox ("データのリンクが正常に終了していません。もう一度指定してください。")
DoCmd.GoToControl "data場所"

--------------------------------------------

n = DCount("請求単価cd", "ta請求単価")
ここでは、ta請求単価の、請求単価cdの数を計算しています。
要するに、答えはいくつでもいいわけで、リンクテーブルが成功していれば、エラーは出ません。
リンクテーブルが無ければ必ずエラーが出ます。
(ta請求単価は”9999”のコードは必ず存在します。レコードが存在しないことはありません)

中止するにも、リンクテーブルが無ければ、戻れなくなっています。
ただし、Accessのウインドを閉じてしまえば、終了できます。