2011年10月15日土曜日

ACCESSでのアドイン作成

前にACCESSでのソース管理について雑記したけど
その時にアドインも作成したので
その方法を。
他にもアドイン作成方法はあると思うけど未調査^_^;

なを、元ネタはACCESS2000で作成時の記録

-----------------------------------------------------------------
手順1.アドイン用MDBの作成
           通常のMDB作成と同じ

手順2.定義用テーブルの作成
           テーブル名:USysRegInfo
                      フィールド名                属性
                          Subkey                 テキスト型  255文字
                          Type                     長整数型
                          ValName              テキスト型  255文字
                          Value                    テキスト型  255文字
手順3.アドイン機能の作成
             呼出モジュール(Function)の作成
             戻り値指定は不要
                     ex:   Public Function adin_Main()
                                   :
                            End Function
             ※)このモジュール等はアドイン外からも参照可能なので
                 名称が重ならないように配慮するべし。

定義4.定義テーブルのレコード作成
             手順2で作成したテーブルに3レコード追加

USysRegInfo
SubkeyTypeValNameValue
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%0

HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%1Expression=%手順3で作成したFunction名%
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\%アドイン名%1Library|ACCDIR\%アドイン実体名%

                          %アドイン実体名% は ○○.mda って奴ね

定義5.ファイルの拡張子を変更(MDB->MDA)

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

これでACCESS用アドインは完成。
後は実行用PCにコピーしてACCESSのメニューから登録すればOKかな。

そうそう、UsysRegInfoってシステムオブジェクト扱いなんで通常は見えません。
オプションを変更すれば見えるよ。

        

2011年10月8日土曜日

MS-ACCESSのソース管理

それほど大きくないシステムでMS-ACCESSを利用して構築する案件は
予想外に多かったりする。
(オイラのまわりだけかもw)

で、単独での開発なら良いけど複数人での開発となると
ちょっと厄介。
どうしてもデグレが発生しやすい。

VBAのソースだけなら良いけど、フォーム等のプロパティもあるし。

ただ、各オブジェクトをテキストとして出力もできるんだよね。
ヘルプ等では公開されてないようだけど。
SaveAsText ってやつね。

で以下のモジュールをつくってみた。
'-----------------------------------------------
'モジュール一括出力
'-----------------------------------------------
Public Sub Addin_subOutModule(strFolder As String)
    Dim aObj As Object
    Dim FName As String
    On Error GoTo Err_Addin_subOutModule
    '全モジュール出力
    For Each aObj In CurrentProject.AllModules
        FName = strFolder & "module_" & aObj.Name & ".txt"
        Application.SaveAsText acModule, aObj.Name, FName
    Next
   
    '全フォーム出力
    For Each aObj In CurrentProject.AllForms
        FName = strFolder & "form_" & aObj.Name & ".txt"
        Application.SaveAsText acForm, aObj.Name, FName
    Next
   
    '全レポート出力
    For Each aObj In CurrentProject.AllReports
        FName = strFolder & "report_" & aObj.Name & ".txt"
        Application.SaveAsText acReport, aObj.Name, FName
    Next
   
    '全マクロ出力
    For Each aObj In CurrentProject.AllMacros
        FName = strFolder & "macro_" & aObj.Name & ".txt"
        Application.SaveAsText acMacro, aObj.Name, FName
    Next
   
    '全クエリ出力
    For Each aObj In CurrentData.AllQueries
        FName = strFolder & "querydef_" & aObj.Name & ".txt"
        Application.SaveAsText acQuery, aObj.Name, FName
    Next

    Set aObj = Nothing
   
    Exit Sub
   
Err_Addin_subOutModule:
   
    MsgBox Err.Description
    Resume Next
End Sub
-------------------------------------------
strFolder に出力先フォルダ名(最終文字に¥付き)を指定してコールするだけ。
ただオブジェクト名に"/"等があると駄目だけど^_^;

出力ファイルで差分を取れば変更箇所が判定できる。
(編集しなくても変わる項目もあるけど…)
以前アドインとして公開してるソースから引用してます。
VBAStepCounterForAccess2000 ってやつね(^^ゞ

ACCESS2000 ~ 2007までは出来るはず。2010は知らんw

2011年10月3日月曜日

テスト環境がぁ

現在、某システムの連携テストをしてるのだが・・・
テスト関係(コンパイルも含め)ドキュメントが無い。
と、言うより
ドキュメントが整理できてなくて探せない(無いかもしれない^_^;)

うみゅう。。。。な訳で試行錯誤中www

自分用に作成しているけど、開発用ドキュメントとして共有すべきだよなぁ。。。
(若干意識して作成中w)