1月22日(2009)


accessデータベースのリンクテーブルについて

管理していてたAccessによるデータベース。
データベースをフォームとテーブルに分割し、別mdbファイルとして扱い、
リンクテーブルマネージャーでリンクしておくという方法を取っていた。
ここでは便宜上、メインとして使うフォームデータベースをForm.mdb
参照先のテーブルデータベースをTable.mdbとしておく
Form.mdbTable.mdbをリンクしているという構成。

現状ではサーバーにある2つのmdbをローカルに持ってきてローカル用に
リンクテーブルマネージャーを使ってリンク。
以降はサーバーからTalbe.mdbを持ってきて、ローカルで更新したら
同ファイルをサーバーにあげるという、ちょっと危うい手法をとっている。

ただ、Form.mdbを更新した場合がちょっと曲者で、
ローカルに持ってきた際にローカル用にリンクテーブルも再設定しなければならなくなる。
アプリケーションを立ち上げた時点でメインフォームを開くようにしているので
テーブルが参照できずフォームが開けない感じになってしまう。

まぁ、以上のような状況のときにどうすれば起動時に動的にテーブルをリンクできるかというのが
問題になってくるわけで、その方法について書き記しておく。

1)起動時実行用マクロの作成
AutoExecという名前でマクロを作成すると、データベース起動時にアクションを起こせる。
今回の場合だったらアクションに「プロシージャの実行」を指定し、「プロシージャ名」も設定する。
(とりあえずここではOpenMainForm()としておく)
注意
Accessのメニューで「ツール」⇒「起動時の設定」でフォームの表示をしてしまうと
先にフォームが表示されてしまうっぽいので、マクロから実行されるプロシージャ内で
フォームを開くこと

2)プロシージャの記述
とりあえず手っ取り早くサンプルコードを…

Public Function OpenMainForm() As Integer
   On Error GoTo relink
   
   'フォームを開く
   DoCmd.OpenForm ("F_Main")
   
   Exit Function
   
relink:
   'フォームを開くのに失敗したらこっちに流れてくる
   MsgBox "リンクテーブルを更新します"
   
   'リンクテーブルデータベースが存在するかチェック
    Dim table_path As String
   Dim buf As String
   
   table_path = CurrentProject.Path & "\Table.mdb"
   
   buf = Dir(table_path)
   
   If buf = "" Then
       MsgBox "Form.mdbが置いてあるフォルダにTable.mdbを置いてください"
       
       DoCmd.Quit
   End If
   
   'データ管理.mdb内のテーブルと同じ名前のリンクテーブル
   Dim db As Database
   Dim tbd As TableDef
   
   Set db = CurrentDb
   
   For Each tbd In db.TableDefs
       If Len(tbd.Connect) <> 0 And InStr(tbd.Connect, "ODBC;") = 0 Then
           If InStr(tbd.Connect, "Table") <> 0 Then
               tbd.Connect = ";DATABASE=" & table_path
               tbd.RefreshLink
           End If
       End If
   Next
   
   db.TableDefs.Refresh
   db.Close: Set db = Nothing
   
   'フォームを開く
   DoCmd.OpenForm ("F_Main")
End Function

テーブルがリンクされているとき、tbd.Connectに値が入っている。0の場合は空だと思っていい。
ODBCは不明っていうかあまり調べていない…
次にInStr(tbd.Connect, "Table")で、再リンクしたいテーブルのみを抽出。
Connectプロパティのリンクテーブルの設定は;DATABASE=テーブルのフルパスなのでそれをセット。
後はRefreshLinkとかで更新すればいけるということが判明。
最終更新:2009年01月22日 16:14
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。