8

Microsoft Access 2007 データベースとアプリケーションのバージョン管理が必要です。現在、すべてが単一の mdb ファイルに含まれています。

アプリケーションには以下が含まれます:

  • フォーム
  • VBA コード
  • 実際のデータベース

データベースをフォーム/コードから分離する必要があると思います。バージョン差分をサポートするために、フォーム/コードをテキストとしてバージョン管理できるようにしたいと考えています。

現時点では、SourceSafe にアクセスできないので (アクセスのサポートがあるかもしれないと聞きました)、subversion または git で動作するソリューションを希望します。

4

3 に答える 3

3

Access 2007には、DBをテーブル/クエリ(バックエンド)とフォーム/レポート(フロントエンド)に分割できる機能があります。あなたの質問はフォームとモジュールを管理するバージョンのみに言及しているので、これはより洗練された解決策かもしれません。分割後にモジュールがどこに行くのかわからないので、それはつまずきかもしれません。

MicrosoftはVSTO(Visual Studio Tools for Office)を提供しています。これにより、VSで開発し、任意のVSプラグイン(CVS / SVN / VSSなど)を介してバージョン管理を実行できます。

最後に、VisualSourceSafeに直接接続できます。 このMSKBの記事には、いくつかの優れた情報と背景がありますが、このOffice Onlineの記事は、ユーザーを起動して実行するために設計されています。

最終的には、可能であれば、Accessからコードを削除しないことをお勧めします。VBAエディターが主要な開発環境であると仮定すると、開発プロセスに、簡単に自動化できない追加の手順を追加することになります。行ったすべての変更は、手動でエクスポート、差分、および保存する必要があり、変更のエクスポートに使用できるApplication.OnCompileイベントはありません。さらに難しいことに、他の開発者がチェックインするときに、変更されたすべてのソースファイルを手動でインポートする必要があります。

于 2009-07-07T12:59:29.383 に答える
2

以下のコードを使用してExcelファイルからvbaコードを抽出します。これを変更して、Accessから抽出できる場合があります。

Sub ExtractVBACode(strSource, objFSO, strExportPath, objLogFile)
Dim objExcel
Dim objWorkbook
Dim objVBComponent
Dim strFileSuffix
Dim strExportFolder


Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = true

Set objWorkbook = objExcel.Workbooks.Open(Trim(strSource))

strExportFolder = strExportPath & objFSO.GetBaseName(objWorkbook.Name)

If Not objFSO.FolderExists(strExportFolder) Then
    objFSO.CreateFolder(strExportFolder)
End If

For Each objVBComponent In objWorkbook.VBProject.VBComponents
    Select Case objVBComponent.Type
        Case vbext_ct_ClassModule, vbext_ct_Document
            strFileSuffix = ".cls"
        Case vbext_ct_MSForm
            strFileSuffix = ".frm"
        Case vbext_ct_StdModule
            strFileSuffix = ".bas"
        Case Else
            strFileSuffix = ""
    End Select
    If strFileSuffix <> "" Then
        On Error Resume Next
        Err.Clear
        objVBComponent.Export strExportFolder & "\" & objVBComponent.Name & strFileSuffix
        If Err.Number <> 0 Then
            objLogFile.WriteLine ("Failed to export " & strExportFolder & "\" & objVBComponent.Name & strFileSuffix)
        Else
            objLogFile.WriteLine ("Export Successful: " & strExportFolder & "\" & objVBComponent.Name & strFileSuffix)
        End If
        On Error Goto 0
    End If
Next

objExcel.DisplayAlerts = False
objExcel.Quit

サブ終了

フォームをXMLとして抽出できますか?

于 2009-07-06T05:41:34.793 に答える
2

私はこの同じ問題に苦労しました。私は元々、既存の回答と非常によく似たコードを書きました。秘訣は、すべてのモジュールをファイル システムに配置することですが、この方法にはいくつかの欠点があります。その方法で、VBA プロジェクトからフォームとレポートを取得できますが、元に戻すことはできません。そこで、Rubberduck VBE Add-inの一部としてライブラリを作成しました。私が書いたライブラリは、一見したところプッシュ、プル、コミットするように、VBA プロジェクトとリポジトリの間ですべてのコードをインポートおよびエクスポートします。これは無料のオープン ソース プロジェクトですので、最新バージョンをダウンロードしてインストールしてください。

ライブラリの使用例を次に示します。今後のリリースで、VBA エディターとの実際の統合を追加する予定です。

Dim factory As New Rubberduck.SourceControlClassFactory 
Dim repo As Rubberduck.IRepository 
Dim git As ISourceControlProvider

Dim xl As New Excel.Application
xl.Visible = true
Dim wb As Excel.Workbook

Set wb = xl.Workbooks.Open("C:\Path\to\workbook.xlsm")

' create class instances to work with
Set repo = factory.CreateRepository(wb.VBProject.Name, "C:\Path\to\local\repository\SourceControlTest", "https://github.com/ckuhn203/SourceControlTest.git")
Set git = factory.CreateGitProvider(wb.VBProject, repo, "userName", "passWord")

' Create new branch to modify.
git.CreateBranch "NewBranchName"

' It is automatically checked out.
Debug.Print "Current Branch: " & git.CurrentBranch

' add a new standard (.bas) code module and a comment to that file
wb.VBProject.VBComponents.Add(vbext_ct_StdModule).CodeModule.AddFromString "' Hello There"

' add any new files to tracking
Dim fileStat As Rubberduck.FileStatusEntry
For Each fileStat In git.Status
    ' fileStat.FileStatus is a bitwise enumeration, so we use bitwise AND to test for equality here
    If fileStat.FileStatus And Rubberduck.FileStatus.Added Then
        git.AddFile fileStat.FilePath
    End If
Next

git.Commit "commit all modified files" 

' Revert the last commit, throwing away the changes we just made.
git.Revert
于 2015-03-01T11:56:23.570 に答える