Управление версиями Access 2007 базы данных и приложения

Мне нужно управление версиями базы данных и приложения Microsoft Access 2007. В настоящее время все содержится в одном файле MDB.

Приложение включает в себя:

ФормаVBA код Актуальная база данных

Я предполагаю, что мне нужно отделить базу данных от форм / кода. Я хотел бы иметь возможность контроля версий форм / кода в виде текста для поддержки различий версий.

В настоящее время у меня нет доступа к SourceSafe (я слышал, что может быть некоторая поддержка доступа), поэтому я бы предпочел решение, которое будет работать с Subversion или Git.

Ответы на вопрос(3)

Решение Вопроса

позволяющую разделить БД на таблицы / запросы (бэкэнд) и формы / отчеты (интерфейс). Поскольку в вашем вопросе упоминается только версия, управляющая формами и модулями, это может быть более элегантным решением. Я не знаю, куда идут модули после разделения, поэтому это может стать камнем преткновения.

Microsoft предлагаетVSTO (Инструменты Visual Studio для Office), что позволит вам разрабатывать в VS и запускать управление версиями через любой плагин VS (CVS / SVN / VSS / и т. д.).

Наконец, вы можете напрямую подключиться к Visual Source Safe. Эта статья MSKB обладает хорошей информацией и опытом, а эта статья Office Online предназначен для того, чтобы заставить вас работать.

В конце концов, я бы посоветовал не выводить код из Access, если это вообще возможно. Предполагая, что редактор VBA является вашей основной средой разработки, вы будете добавлять дополнительные шаги в процесс разработки, которые не могут быть легко автоматизированы. Каждое внесенное вами изменение необходимо будет экспортировать, разложить и сохранить вручную, и нет события Application.OnCompile, которое вы могли бы использовать для экспорта изменений. Еще сложнее, вам придется вручную импортировать все измененные исходные файлы от других разработчиков, когда они делают проверки.

 RubberDuck01 мар. 2015 г., 12:59
Синхронизация кода теперь не так сложна, как раньше. Надо было взять дело в свои руки.
 ja7224 февр. 2014 г., 21:53
Визуальный источник Сейф нужно умереть!
 Jesse Vogt10 июл. 2009 г., 16:45
Я согласен ... похоже, что оставить все в Access - это, наверное, лучший маршрут. Я собираюсь разделить файл. Нужно будет просто держать подробную проверку в комментариях при изменении кода. С нетерпением жду возможности перенести эту штуку на что-то более дружелюбное для разработчиков
 Andrew Scagnelli10 июл. 2009 г., 19:48
Бонусные баллы за несколько из этих методов - они проходят тест Джоэля за автоматизированный процесс сборки.

el, вы можете изменить его для извлечения из 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?

 Jesse Vogt06 июл. 2009 г., 23:06
Интересная идея ... Я могу поиграть с ней чуть позже. Насколько легко это туда и обратно? В идеале я хотел бы иметь возможность перейти от проверки к работе над кодом без особых хлопот. Спасибо за ответ
 Andrew Scagnelli07 июл. 2009 г., 16:50
В оба конца все вручную (импорт / экспорт). Вы можете экспортировать формы в виде кода, но вам все равно придется делать это вручную.

очень похожий на существующий ответ. Хитрость заключается в том, чтобы поместить все ваши модули в файловую систему, но у этого метода есть некоторые недостатки. Идя по этому пути, вы можете получать свои формы и отчеты из проектов VBA, но вы не можете вернуть их обратно. Итак, я создал библиотеку как часть нашегоRubberduck VBE Надстройка. Библиотека, которую я написал, заботится об импорте и экспортвс вашего кода в / из проекта 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

Ваш ответ на вопрос