Frage an version-control, ms-access-2007, vba, database, ms-access – Versionskontrolle Access 2007-Datenbank und -Anwendung

8

Ich muss eine Microsoft Access 2007-Datenbank und -Anwendung versionieren. Derzeit ist alles in einer einzigen MDB-Datei enthalten.

Die Anwendung beinhaltet:

FormenVBA-CodeAktuelle Datenbank

Ich würde annehmen, dass ich die Datenbank von den Formularen / vom Code trennen muss. Ich möchte in der Lage sein, die Formulare / den Code als Text zur Unterstützung von Versionsunterschieden zu versionieren.

Im Moment habe ich keinen Zugriff auf SourceSafe (ich habe gehört, dass es möglicherweise Zugriffsunterstützung gibt), daher bevorzuge ich eine Lösung, die mit Subversion oder Git funktioniert.

Deine Antwort

3   die antwort
3

mit der Sie eine Datenbank in ihre Tabellen / Abfragen (Back-End) und Formulare / Berichte (Front-End) aufteilen können. Da in Ihrer Frage nur die Version erwähnt wird, die die Formulare und Module steuert, ist dies möglicherweise eine elegantere Lösung. Ich weiß nicht, wohin die Module nach dem Split gehen, das könnte ein Stolperstein sein.

Microsoft bietetVSTO (Visual Studio Tools für Office), mit dem Sie VS entwickeln und die Versionskontrolle über ein beliebiges VS-Plugin (CVS / SVN / VSS / etc.) ausführen können.

Schließlich können Sie direkt eine Verbindung zu Visual Source Safe herstellen.Dieser MSKB Artikel hat einige gute Informationen und Hintergrundinformationen zu durchlaufen, währenddiesen Office Online-Artikel wurde entwickelt, um Sie zum Laufen zu bringen.

Letztendlich würde ich vorschlagen, den Code möglichst nicht aus Access zu entfernen. Angenommen, der VBA-Editor ist Ihre primäre Entwicklungsumgebung, werden Sie Ihrem Entwicklungsprozess zusätzliche Schritte hinzufügen, die nicht einfach automatisiert werden können. Jede Änderung, die Sie vornehmen, muss manuell exportiert, differenziert und gespeichert werden, und es gibt kein Application.OnCompile-Ereignis, mit dem Sie die Änderungen exportieren könnten. Noch härter müssen Sie alle geänderten Quelldateien von anderen Entwicklern manuell importieren, wenn sie eingecheckt werden.

Bonuspunkt für mehrere dieser Methoden: Sie bestehen den Joel-Test für einen automatisierten Erstellungsprozess. Andrew Scagnelli
Ich stimme zu ... es sieht so aus, als wäre es wahrscheinlich der beste Weg, alles in Access zu belassen. Ich werde die Datei aufteilen. Müssen nur ausführliche Kommentare einchecken, wenn Sie den Code ändern. Ich freue mich darauf, dieses Ding auf ein etwas entwicklerfreundlicheres zu migrieren :) Jesse Vogt
Visual Source Safe muss sterben! ja72
Das Synchronisieren des Codes ist nicht mehr so ​​schwierig wie früher.Musste nur die Sache selbst in die Hand nehmen. RubberDuck
2

um den VBA-Code aus Excel-Dateien zu extrahieren. Möglicherweise können Sie diesen ändern, um ihn aus Access zu extrahieren.

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

Können Sie die Formulare vielleicht als XML extrahieren?

Interessante Idee ... Ich kann etwas später damit herumspielen. Wie einfach ist es, es umzudrehen? Im Idealfall möchte ich in der Lage sein, ohne großen Aufwand von der Kasse zur Arbeit am Code zu gelangen. Danke für die Antwort. Jesse Vogt
Die Rundreise ist alles manuell (Import / Export). Sie können die Formulare als Code exportieren, müssen diese jedoch noch manuell ausführen. Andrew Scagnelli
2

de geschrieben, der der vorhandenen Antwort sehr ähnlich ist.Der Trick ist, alle Ihre Module auf das Dateisystem zu bekommen, aber diese Methode hat einige Nachteile. Wenn Sie diesen Weg gehen, können Sie Ihre Formulare und Berichte aus den VBA-Projekten abrufen, aber Sie können sie nicht wieder einspielen. Also, ichhat eine Bibliothek erstellt als Teil unsererGummiente VBE Add-In. Die Bibliothek, die ich geschrieben habe, kümmert sich um den Import und Exportalles von Ihrem Code zum / vom VBA-Projekt zum / vom Repository, während Sie scheinbar ohne Verzögerung Push-, Pull- und Commit-Vorgänge ausführen. Es ist ein freies und Open Source Projekt, also zögern Sie nichtLaden Sie die neueste Version herunter und installieren Sie sie.

Hier ist ein Beispiel für die Verwendung der Bibliothek. In einer zukünftigen Version werde ich die eigentliche Integration mit dem VBA-Editor hinzufügen.

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

Verwandte Fragen