開発環境:win8.1 + access2010
今回はリンク先をMySQLではなく、Accessにしたいと思います。
アプリ用のAccessとDB用の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で実行するためにメニューにボタンを用意します。
メニューのリンク設定ボタンをクリックします。
テーブルにリンクテーブルが追加されました。
リンクテーブルは手動でも可能ですが、毎回手動で行うのは面倒なので
メニューに用意しておくとお客様に配布した時に、アプリの置いてあるディレクトリ
が異なっている時に、再度リンク設定しなくても良いので非常に便利です。
コメント