Accessリンクテーブル設定をメニューに組込む

開発環境:win8.1 + access2010

今回はリンク先をMySQLではなく、Accessにしたいと思います。
アプリ用のAccessDB用のAccessを作成します。

1. DB用のAccessを作成

DB用のAccessを作成します。ここをMySQLやSQLServerにすることも可能です。
小規模システムで1~3人程度で使用するならAccessでも十分と思います。
DBを分けるメリットは、いったんシステム開始した後に
ちょっと修正したいという時に、アプリ部分の修正だけならアプリを上書きすれば
そのまま使えるというメリットがあります。そうするとDB部分は上書きされないので
データに影響なく使えるので、アプリとDBは別!は私の中では基本と思っています。

▼家計簿DB.accdb
[テーブル]
t_kakeibo

t_kakeibo というテーブルを作成します。

2. アプリ用のAccessを作成

▼家計簿AP.accdb
[テーブル]
link_tbl

・・link_tblを作成して中にリンクしたいテーブルを設定します。

3. メニューを作成

[フォーム]
メニューを作成します。

メニューに「リンク設定」ボタンを作成します。
リンク設定ボタンのイベントは下記のように記述します。

▼リンク設定ボタン

Private Sub cmdリンク設定_Click()
    Application.Echo False
    If funSetConnect = True Then
        DoCmd.SelectObject acForm, "", True
        DoCmd.Minimize
        MsgBox "リンク設定が正常に終了しました。", vbInformation + vbOKOnly, "リンク設定"
    End If
    Application.Echo True
End Sub

4. モジュールを作成

[モジュール]
commonモジュールを作成します。

モジュールを作成してDBのパスをConst(定数)に定義しておき
リンク設定のイベントを行う関数を作成します。

Public Const C_DB_NAME As String = "家計簿DB.accdb"

Public Function funSetConnect() As Boolean
Dim db As Database
Dim lnkPath As String
Dim rec As Recordset
Dim tblNm As String
    
On Error GoTo Error
    
    funSetConnect = False
    
    Set db = CurrentDb
    Set rec = db.OpenRecordset("link_tbl", dbOpenDynaset)
    lnkPath = getLnkPath

    With rec
        If .EOF = False Then .MoveFirst
        Do Until .EOF
            tblNm = rec.Fields(0)
            
            If ExistTable(tblNm) Then
                db.TableDefs.Delete tblNm
            End If
            DoCmd.TransferDatabase acLink, "Microsoft Access", lnkPath, acTable, tblNm, tblNm, False
            .MoveNext
        Loop
    End With
        
    db.Close
    
    funSetConnect = True
    
Exit Function

Public Function getLnkPath() As String
Dim db As Database
Dim lnkPath As String
    Set db = CurrentDb
    lnkPath = Left(db.Name, Len(db.Name) - Len(CurrentProject.Name)) & C_DB_NAME
    getLnkPath = lnkPath
End Function

MySqlの時と違うのは
DoCmd.TransferDatabase acLink, “Microsoft Access”, lnkPath, acTable, tblNm, tblNm, False
の部分です。ここをAccess用に修正します。

5. リンク設定ボタンを押下

リンク設定をVBAで実行するためにメニューにボタンを用意します。
メニューのリンク設定ボタンをクリックします。

テーブルにリンクテーブルが追加されました。

リンクテーブルは手動でも可能ですが、毎回手動で行うのは面倒なので
メニューに用意しておくとお客様に配布した時に、アプリの置いてあるディレクトリ
が異なっている時に、再度リンク設定しなくても良いので非常に便利です。

 

 

コメント

タイトルとURLをコピーしました