Pytanie w sprawie vba, ms-access, database, ms-access-2007, version-control – Kontrola wersji Baza danych i aplikacja Access 2007

8

Muszę kontrolować wersję bazy danych i aplikacji Microsoft Access 2007. Obecnie wszystko jest zawarte w jednym pliku mdb.

Aplikacja zawiera:

FormularzeKod VBARzeczywista baza danych

Zakładam, że muszę oddzielić bazę danych od formularzy / kodu. Chciałbym mieć możliwość kontroli wersji formularzy / kodu jako tekstu w celu obsługi różnic wersji.

W tej chwili nie mam dostępu do SourceSafe (słyszałem, że może istnieć jakaś obsługa dostępu), więc wolałbym rozwiązanie, które działałoby z subversion lub git.

Twoja odpowiedź

3   odpowiedź
3

w której możesz podzielić bazę danych na jej tabele / zapytania (backend) i formularze / raporty (front-end). Ponieważ twoje pytanie wspomina tylko o wersji kontrolującej formularze i moduły, może to być bardziej eleganckie rozwiązanie. Nie wiem, gdzie moduły idą po podziale, więc może to być przeszkodą.

Microsoft oferujeVSTO (Visual Studio Tools for Office), który pozwoli ci rozwijać się w VS i uruchomić kontrolę wersji poprzez dowolną wtyczkę VS (CVS / SVN / VSS / etc.).

Wreszcie możesz po prostu bezpośrednio połączyć się z Visual Source Safe.Ten artykuł MSKB ma kilka dobrych informacji i tła do przejściaten artykuł w witrynie Office Online jest przeznaczony do uruchamiania i uruchamiania.

Ostatecznie sugerowałbym, żeby nie zabrać kodu z Accessa, jeśli to możliwe. Zakładając, że edytor VBA jest Twoim podstawowym środowiskiem programistycznym, dodasz dodatkowe kroki do procesu programowania, które nie mogą być łatwo zautomatyzowane. Każda wprowadzona zmiana będzie musiała zostać ręcznie wyeksportowana, zróżnicowana i zapisana, i nie ma żadnego zdarzenia Application.OnCompile, którego można użyć do eksportowania zmian. Jeszcze trudniej będzie ręcznie zaimportować wszystkie zmienione pliki źródłowe od innych deweloperów, gdy wykonują checkins.

Zgadzam się ... wygląda na to, że pozostawienie wszystkiego w Accessie jest prawdopodobnie najlepszą trasą. Podzielę plik. Będę musiał po prostu sprawdzać komentarze podczas modyfikowania kodu. Czekamy na przeniesienie tego do czegoś bardziej przyjaznego dla programistów :) Jesse Vogt
Dodatkowy punkt dla kilku z tych metod - zdają test Joela na zautomatyzowany proces budowania. Andrew Scagnelli
Synchronizacja kodu nie jest już tak trudna jak kiedyś.Musiałem wziąć sprawy w swoje ręce. RubberDuck
Visual Source Safe musi umrzeć! ja72
2

dobnie do istniejącej odpowiedzi.Sztuczka polega na umieszczeniu wszystkich modułów w systemie plików, ale ta metoda ma pewne wady. Idąc tą trasą, możesz pobrać formularze i raporty z projektów VBA, ale nie możesz ich odzyskać.stworzył bibliotekę jako część naszejDodatek Rubberduck VBE. Biblioteka, którą napisałem, zajmuje się importowaniem i eksportowaniemwszystko twojego kodu do / z projektu VBA do / z repozytorium, ponieważ wydaje ci się, że pushujesz, ciągniesz i zatwierdzasz. To darmowy i otwarty projekt, więc nie krępuj siępobierz i zainstaluj najnowszą wersję.

Oto przykład użycia biblioteki. Dodam faktyczną integrację z edytorem VBA w przyszłej wersji.

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
2

aby wyodrębnić kod vba z plików Excela, możesz zmodyfikować ten kod, aby wyodrębnić go z programu 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

Napis końcowy

Czy możesz wyodrębnić formularze jako XML?

Podróż w obie strony jest ręczna (importowanie / eksportowanie). Możesz wyeksportować formularze jako kod, ale nadal musisz to zrobić ręcznie. Andrew Scagnelli
Ciekawy pomysł ... Mogę się nim trochę pobawić. Jak łatwo jest to okrążyć? Idealnie chciałbym móc przejść od kasy do pracy nad kodem bez zbytniego kłopotu. Dziękuję za odpowiedź. Jesse Vogt

Powiązane pytania