Microsoft Accessで構築した業務アプリケーションの運用において、アプリケーションのバージョンアップ版の配布、データや業務ロジックの共有化をどのように行うか、弊社で採用している方法を紹介します。
これは、ほぼ皆さんも採用されているのではないかと思います。
データとアプリケーションのaccdbを分離して、アプリケーションaccdbではリンクテーブルとしてデータaccdb内のテーブルを参照するようにします。
Microsoft Accessデータ共有データaccdbは、さらにマスターとデータをaccdbレベルで分離しています。
また、データaccdbもデータの属性等により、さらにaccdbレベルで分離しています。
データaccdbは共有されるため、必然的に社内共有ファイルサーバーに配置されることになります。
業務ロジックの共有化は、共有するロジック(関数)をライブラリaccdbに作成して、アプリケーションaccdbからは『参照設定』でライブラリaccdbを参照して行います。
Microsoft Access業務ロジック共有アプリケーションaccdbから『参照設定』でライブラリaccdbを参照します。
ライブラリaccdbのプロジェクト名.関数名(図では Library.BusinessYear())で関数を呼び出します。
ライブラリaccdbは共有されますので、社内共有ファイルサーバーに配置させたくなるのですが、後述するアプリケーションの配布の仕組みで、個人のローカルディレクトリに配置されます。
詳細は、アプリケーションの配布を参照してください。
バージョンアップされたアプリケーションを効率よく配布したり、共有されているライブラリaccdbをロック(使用中)であることを気にすることなく改修したりするため、弊社ではランチャー方式によるアプリケーション起動を採用しています。
Microsoft Accessアプリケーション配布
①ユーザーがランチャーアプリケーションを起動します
②ランチャーアプリケーションがライブラリaccdbをローカル環境にコピーします
③ランチャーアプリケーションがアプリケーションaccdbをローカル環境にコピーします
④ランチャーアプリケーションがローカル環境のアプリケーションaccdbを起動します
アプリケーションaccdbはローカル環境のライブラリaccdbを参照設定するようにしておきます。
共有ファイルサーバーにテスト済のアプリケーションやライブラリを配置しておけば、ランチャー方式により、ユーザーは最新のアプリケーションやライブラリを使用して業務を行うことができます。
ローカル環境のアプリケーションを起動する際に/CMDスイッチにより、実行する際に必要なパラメーターを与えていますので、ランチャーアプリケーションを切り替えることにより、管理者モードで起動したりすることも可能です。
ランチャーアプリケーションのサンプルは下記になります。
ランチャーアプリケーションとアプリケーションのファイル名は同じにしておきます。
共有ファイルサーバーはX:にマウントされ、AccessのアプリケーションはX:\AccessApplicationに配置されているものとします。
ローカル環境はC:\AccessApplicationフォルダーを作成し、Accessのオプション➡セキュリティセンター➡信頼できる場所に登録しておきます。
Option Compare Database Option Explicit Private Const PUB_BASE_DIR As String = "X:\AccessApplication" Private Const PUB_APP_DIR As String = PUB_BASE_DIR & "\System" Private Const PUB_LIB_DIR As String = PUB_BASE_DIR & "\Lib" Private Const LOCAL_BASE_DIR As String = "C:\AccessApplication" Private Const LOCAL_APP_DIR As String = LOCAL_BASE_DIR & "\System" Private Const LOCAL_LIB_DIR As String = LOCAL_BASE_DIR & "\Lib" Public Function AutoExec() Dim strPubLibFile As String Dim strPubAppFile As String Dim strExeLibFile As String Dim strExeAppFile As String With CreateObject("Scripting.FileSystemObject") ' ローカル環境内のライブラリフォルダが存在しなければ作成します If .FolderExists(LOCAL_APP_DIR) = False Then .CreateFolder LOCAL_APP_DIR If .FolderExists(LOCAL_LIB_DIR) = False Then .CreateFolder LOCAL_LIB_DIR ' ライブラリaccdbをローカル環境へコピーします strPubLibFile = PUB_LIB_DIR & "\Library.accdb" strExeLibFile = LOCAL_LIB_DIR & "\Library.accdb" If .FileExists(strExeLibFile) Then .DeleteFile strExeLibFile .CopyFile strPubLibFile , strExeLibFile ' アプリケーションをローカル環境へコピーします strPubAppFile = PUB_APP_DIR & "\" & CurrentProject.Name strExeAppFile = LOCAL_APP_DIR & "\" & CurrentProject.Name If .FileExists(strExeAppFile) Then .DeleteFile strExeAppFile .CopyFile strPubAppFile , strExeAppFile End With ' アプリケーションを起動します Shell Application.SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE" _ & " " & strExeAppFile & " /cmd" & CurrentProject.Path End Function