我需要版本控制Microsoft Access 2007数据库和应用程序。目前,所有内容都包含在一个mdb文件中。
该申请包括:
我认为我需要将数据库与表单/代码分开。我希望能够将表单/代码的版本控制为文本以支持版本差异。
目前我无法访问SourceSafe(我听说可能有一些访问支持),所以我更倾向于使用subversion或git的解决方案。
答案 0 :(得分:3)
Access 2007具有以下功能:您可以将数据库拆分为其表/查询(后端)和表单/报表(前端)。由于您的问题仅提到控制表单和模块的版本,因此这可能是更优雅的解决方案。我不知道拆分后模块在哪里,所以这可能是一个绊脚石。
Microsoft提供VSTO (Visual Studio Tools for Office),它允许您在VS中开发并通过任何VS插件(CVS / SVN / VSS /等)运行版本控制。
最后,您可以直接连接到Visual Source Safe。 This MSKB article有一些很好的信息和背景可供使用,而this Office Online article则是为了帮助您启动和运行。
最终,如果可能的话,我建议不要将代码从Access中删除。假设VBA编辑器是您的主要开发环境,您将在开发过程中添加额外的步骤,这些步骤无法轻松实现自动化。您所做的每个更改都需要手动导出,差异和存储,并且没有可用于导出更改的Application.OnCompile事件。更难的是,您必须在签入时手动从其他开发人员导入所有已更改的源文件。
答案 1 :(得分: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
End Sub
您是否可以将表单解压缩为XML?
答案 2 :(得分:2)
我一直在努力解决同样的问题。我最初编写的代码与现有的答案非常相似。 The trick is to get all of your modules onto the file system,但该方法有一些缺点。走这条路线,你可以从VBA项目中获取表格和报告,但是你无法让他们重新进入。所以,我created a library作为Rubberduck VBE Add-in的一部分。我编写的库负责将您的代码的所有导入和导出到VBA项目/从存储库导出/导出,无需推送,拉取和提交。它是一个免费的开源项目,所以请download and install the latest version随意。
以下是如何使用库的示例。我将在以后的版本中添加与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