Office: (Office 2016) Frontend verteilen

Helfe beim Thema Frontend verteilen in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Leute, ich habe nun endlich den Schritt gewagt und eine Datenbank auf Front- und Backend auftegeilt. Da im Frontend immer wieder Änderungen... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von SisterFriede, 3. Juni 2020.

  1. Frontend verteilen


    Hallo Leute,

    ich habe nun endlich den Schritt gewagt und eine Datenbank auf Front- und Backend auftegeilt.

    Da im Frontend immer wieder Änderungen gemacht werden würde ich das gerne "zentral" steuern.

    Ich habe mir dazu folgendes überlegt:

    Das Frontend liegt in einem Ordner am Server (zB V: Datenbank) zusammen mit der Datei Version.txt. Dort ist die aktuelle Versionsnummer eingetragen.

    Am lokalen PC ist der gleiche Ordner (zB C: UsersxxxDatenbank). Dort liegt das Frontend und ebenfalls die Datei Version.txt.

    Über ein Skript soll nun die Versionsnummer am Server mit der lokalen verglichen werden und bei bedarf aktualisiert werden.

    Habt ihr da einen Tipp, wie man das realisieren kann (batch, vbs, ...)?

    :)
     
    SisterFriede, 3. Juni 2020
    #1
  2. Hallo und willkommen im Forum.

    Der User startet an seinem lokalen PC eine Batch, die die einzige und damit aktuelle Version des Frontends vom Netzlaufwerk auf seine Festplatte kopiert, womit die Prüfung auf Versionsnummer und Aktualisierungsdatum entfällt - auch wenn damit eine 1:1-Kopie erzeugt wird.

    Was hältst Du davon?
     
    Maxel, 5. Juni 2020
    #2
  3. So habe ich das auch gelöst: Wenn einer Benutzer seine Datenbank öffnet, holt diese (in deinem Fall aus dem File auf dem Server) die aktuelle Versionsnummer und vergleicht diese mit der lokalen. Sollte hier ein Unterschied bestehen, wird eine Batch gestartet und die aktuelle Datenbank geschlossen. Die Batchdatei wiederum löscht die lokale Frontend-Version (ist ja out-to-date) und kopiert vom Server die aktuelle Version des Frontends in das entsprechende lokale Verzeichnis. Danach öffnet die Batch diese Datenbank und schließt sich selbst.

    Funktioniert wunderbar.
     
    narfomat, 6. Juni 2020
    #3
  4. Frontend verteilen

    \@narformat
    Das kannst du auch vom Script erledigen lassen. Da ist es gar nicht nötig
    die DB erst zu öffnen, das erledigt das Script einmal am Ende.
    Mit dem anliegenden AddIn kannst du dir das Starter-Script autom. erstellen
    lassen.
    gruss ekkehard
     
    Beaker s.a., 6. Juni 2020
    #4
  5. Dankeschön Ekkehard,

    ich habe das halt so realisiert, dass der Nutzer sein Frontend öffnet und sich einloggt und dann auf eine neue Version hingewiesen wird und der Rest läuft auch automatisch ab. Läuft perfekt und ich wollte es nicht wieder umbasteln. Aber ich werde mir den Wizard mal anschauen, da kann ich bestimmt noch etwas draus lernen.

    LG

    Chris
     
    narfomat, 6. Juni 2020
    #5
  6. dto. allerdings wird bei mir jedesmal bei DB start die Batch ausgeführt und rüberkopiert. Der user hat somit immer ein frisches und aktuelles FE
     
    Axel37, 6. Juni 2020
    #6
  7. Vielen Dank für die Tipps,

    ich werd mir das heute mal anschauen.

    Lg
     
    SisterFriede, 7. Juni 2020
    #7
  8. Frontend verteilen

    \@Beaker s.a.

    ich war so frei und hab mir das auch mal runtergeladen *biggrin.gif*

    Ich bekomm das allerdings nicht zum laufen *frown.gif*

    Ich hab das Addin in der Datei installiert und aktiviert und das Script erstellt, allerdings kopiert es mir die neue Version nicht in den Ordner rein und startet die Datenbank auch nicht *frown.gif*

    Hab ich da was falsch gemacht?

    Lg
     
    DeathSoldier01, 1. Juli 2020
    #8
  9. \@DeathSoldier01
    Hm, schwer zu sagen aus der Ferne. Die Versionstabelle hast du in FE und
    BE eingerichtet?
    Schicke mir das erstellte Script doch mal per PN.
    gruss ekkehard
     
    Beaker s.a., 1. Juli 2020
    #9
  10. Hey,

    ist leider zu lange für eine PN:


    PHP:
             Option Explicit

    Const AppName "BDE.accdb"

    '----- Start: Check 32/64-Bit -----'
    'Quelle: https://stackoverflow.com/questions/2806584/how-do-i-run-a-vbscript-in-32-bit-mode-on-a-64-bit-machine
    Dim sArg
    Dim Arg
    Dim sCmd
    Dim oWShell
    Dim oProcEnv
    Dim ScriptHost

    ScriptHost = Mid(WScript.FullName, InStrRev(WScript.FullName, "") + 1, Len(WScript.FullName))
    Set oWShell = CreateObject("WScript.Shell")
    Set oProcEnv = oWShell.Environment("Process")
    '
    Am I running 64-bit version of WScript.exe/Cscript.exeSocall script again in x86 script host and then exit.'
    If InStr(LCase(WScript.FullName), LCase(oProcEnv("windir") & "System32")) _
    And oProcEnv("PROCESSOR_ARCHITECTURE") = "AMD64" Then
    '
    rebuild arguments'
    If Not WScript.Arguments.count = 0 Then
    sArg = ""
    For Each Arg In WScript.Arguments
    sArg = sArg & " " & """" & Arg & """"
    Next
    End If

    sCmd = """" & oProcEnv("windir") & "SysWOW64" & ScriptHost & """" & " """ & WScript.ScriptFullName & """" & sArg
    oWShell.Run sCmd

    Set oProcEnv = Nothing
    WScript.Quit

    End If
    '
    ----- EndCheck 32/64-Bit -----'

    Dim FSO
    Dim LocalPath
    Dim UpdatePath

    On Error Resume Next

    Set FSO = CreateObject("Scripting.FilesystemObject")

    '
    prüfen ob Schlüssel angelegtwird nur beim ersten Start durchlaufen
    oWShell
    .RegRead "HKCUSoftwareMicrosoftOffice16.0AccessAppPaths"

    If Err.Number = -2147024894 Then
    'Schlüssel existiert nicht -> Schlüssel anlegen
    oWShell.RegWrite "HKCUSoftwareMicrosoftOffice16.0AccessAppPaths", ""

    '
    Pfade vom User abfragen und eintragen
    'local
    RequestAndSetPaths 0
    '
    update
    RequestAndSetPaths 1

    End 
    If

    'Ablauf nach Einrichtung
    '
    Prüfung auf verschobene Files
    LocalPath 
    oWShell.RegRead("HKCUSoftwareMicrosoftOffice16.0AccessAppPathsLocalPath")
    If 
    FSO.FileExists(LocalPath AppName) = False Then
    MsgBox 
    "Die Anwendung befindet sich nicht (mehr) im erwarteten Verzeichnis!" vbCrLf _
    "Bitte das neue Verzeichnis auswählen.", , "Anwendung nicht gefunden!"
    RequestAndSetPaths 0
    End 
    If

    UpdatePath oWShell.RegRead("HKCUSoftwareMicrosoftOffice16.0AccessAppPathsUpdatePath")
    If 
    FSO.FileExists(UpdatePath AppName) = False Then
    MsgBox 
    "Das Update befindet sich nicht (mehr) im erwarteten Verzeichnis!" vbCrLf _
    "Bitte das neue Verzeichnis auswählen.", , "Anwendung nicht gefunden!"
    RequestAndSetPaths 1
    End 
    If

    'Versionen vergleichen
    Const adLockOptimistic = 3
    Const adOpenStatic = 3
    Const adUseClient = 3

    Dim connectString
    Dim objConnection
    Dim objRecordset
    Dim OldVersionNo
    Dim NewVersionNo
    Dim AccessPath

    Set objConnection = CreateObject("ADODB.Connection")
    Set objRecordset = CreateObject("ADODB.Recordset")

    '
    alte Version (lokal)'
    connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & LocalPath & AppName & ";"
    objConnection.Open connectString
    objRecordset.CursorLocation = adUseClient
    objRecordset.Open "SELECT VersionsID FROM Versionen ORDER BY VersionsID DESC", objConnection, adOpenStatic, adLockOptimistic
    OldVersionNo = objRecordset.Fields(0)
    objConnection.Close

    '
    neue Version'
    connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & UpdatePath & AppName & ";"
    objConnection.Open connectString
    objRecordset.CursorLocation = adUseClient
    objRecordset.Open "SELECT VersionsID FROM Versionen ORDER BY VersionsID DESC", objConnection, adOpenStatic, adLockOptimistic
    NewVersionNo = objRecordset.Fields(0)
    objRecordset.Close
    objConnection.Close

    If OldVersionNo < NewVersionNo Then
    '
    die Version auf dem Server ist neuer
    Set FSO 
    CreateObject("Scripting.FilesystemObject")
    'Backup des lokalen (alten) FE erstellen
    FSO.CopyFile LocalPath & AppName, LocalPath & "BAK_" & AppName
    '
    neue Version kopieren
    FSO
    .CopyFile UpdatePath AppNameLocalPath AppName
    End 
    If

    AccessPath oWShell.RegRead ("HKLMSOFTWAREMicrosoftWindowsCurrentVersionApp PathsMSACCESS.EXE")
    oWShell.Run AccessPath " " LocalPath AppName

    Set oWShell 
    Nothing
    Set FSO 
    Nothing

    '--------------- Functions ---------------

    Function RequestAndSetPaths(eLocation)

    Dim sTitle
    Dim sPath
    Dim bFileExists
    bFileExists = False

    Select Case eLocation
    Case 0  '
    local
    sTitle 
    "Bitte den Ordner der lokal installierten Access-Anwendung ('" AppName "') auswählen!"
    Case 1  'update
    sTitle = "Bitte den Ordner, in dem die Updates der Access-Anwendung ('" & AppName & "') abgelegt sind, auswählen!"
    End Select

    Do While sPath = "" Or bFileExists = False
    sPath = GetPath(sTitle, &H0001 + &H0010, "")
    If sPath = "canceled" Then
    WScript.Quit
    End If
    '
    prüfen ob richtiger Ordner
    bFileExists 
    FSO.FileExists(sPath AppName)
    If 
    bFileExists False Then
    MsgBox 
    "Die Anwendung ('" AppName "') befindet sich nicht im ausgewählten Ordner!"
    End If
    Loop

    Select 
    Case eLocation
    Case 0  'local
    oWShell.RegWrite "HKCUSoftwareMicrosoftOffice16.0AccessAppPathsLocalPath", sPath
    LocalPath = sPath
    Case 1  '
    update
    oWShell
    .RegWrite "HKCUSoftwareMicrosoftOffice16.0AccessAppPathsUpdatePath"sPath
    UpdatePath 
    sPath
    End Select

    End 
    Function

    Function 
    GetPath(sTitlehFlagsDir)
    Quellehttp://wsh2.uw.hu/ch12f.html

    Dim oShell
    Dim oFDlg
    Dim sPath
    Dim iPos

    Set oShell 
    CreateObject("Shell.Application")
    Set oFDlg oShell.BrowseForFolder(0sTitlehFlagsDir)

    If 
    InStr(1TypeName(oFDlg), "Folder") > 0 Then
    iPos 
    InStr(1oFDlg.Title":")
    If 
    iPos 0 Then
    sPath 
    Mid(oFDlg.Title, (iPos 1), 2) & ""
    Else
    sPath oFDlg.ParentFolder.ParseName(oFDlg.Title).Path
    sPath 
    FSO.GetAbsolutePathName(sPath) & ""
    End If
    Else
    sPath "canceled"
    End If

    GetPath sPath

    Set oFDlg 
    Nothing
    Set oShell 
    Nothing

    End 
    Function
     
    DeathSoldier01, 1. Juli 2020
    #10
  11. Das habe ich auch in meiner Lösung so praktiziert, aber nicht explizit formuliert, dass er dies nur passiv tut.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Maxel, 1. Juli 2020
    #11
  12. \@DeathSoldier01
    Eine Fehlermeldung bekommst du aber nicht?

    Aber dann kopierst du die DB ja auf sich selber, - Update- und Local-Pfad müssen
    schon unterschiedlich sein. Kopiere das Script auf einen Client mit einer "älteren"
    Version der DB. Beim ersten Start wird der Anwender dann zur Auswahl der richtigen
    Pfade aufgefordert. Das hat bei mir im Test immer funktioniert.

    Frage an die Regulars:
    Der Provider für den Connectionstring wird mit dieser Function bestimmt
    Code:
    Kurz danach gegoogelt, und gesehen, dass es inzwischen auch 15.0 und 16.0 gibt.
    Kann das das Problem des OP sein (A2016)?
    Ich kann die Function ja dahingehend erweitern, nur wo erfahre ich welcher
    Provider ab welcher Version benötigt wird?

    gruss ekkehard
     
    Beaker s.a., 1. Juli 2020
    #12
  13. Frontend verteilen

    Hey,

    ja, hab beim Script die 2 verschiedenen Pfade eingegeben. Habe Office 2016.

    Kommt aber keine Fehlermeldung und passiert nichts.
     
    DeathSoldier01, 1. Juli 2020
    #13
  14. Hallo,
    Heisst, dass das Script in so weit funktioniert, dass es die Pfade abfragt, dann
    aber keine Kopie zieht?
    Steht denn in der Versionstabelle im FE auf dem Client auch eine kleinere Nummer
    als im FE im Update-Verzeichnis?
    gruss ekkehard
     
    Beaker s.a., 2. Juli 2020
    #14
  15. Hallo,
    Also noch mal ein bisschen gegoogelt, und nachdem was ich bis jetzt lesen konnte,
    könnte es tatsächlich an dem Provider liegen.
    Versuche Folgendes,
    - deinstalliere das AddIn
    - öffne die "FE-Updater-Wizard.mda"
    - ersetzte im Modul "mdlAllgemein" die Funktion "GetProvider" hiermit
    Code:
    (kompilieren nicht vergessen)
    - installiere es neu und teste

    gruss ekkehard
     
    Beaker s.a., 2. Juli 2020
    #15
Thema:

Frontend verteilen

Die Seite wird geladen...
  1. Frontend verteilen - Similar Threads - Frontend verteilen

  2. Acces FrontEnd und MS SQL-Server als BackEnd

    in Microsoft Access Hilfe
    Acces FrontEnd und MS SQL-Server als BackEnd: Hallo zusammen, möchte MS access 2010 als FrontEnd und MS SQL-Server als Backend verwenden. Die Backend Tabellen sind bereits auf dem Server. Mit welchem VBA-Code sollte ich nun die MS...
  3. Unterschiedliche Varianten eines Frontends durch direkte Anpassungen der Datei?

    in Microsoft Access Hilfe
    Unterschiedliche Varianten eines Frontends durch direkte Anpassungen der Datei?: Guten Morgen Zusammen, ich habe eine kurze Frage, um sicherzugehen, dass ich bei der Aufteilung meiner DB und der späteren Pflege/Entwicklung richtig vorgehe: Wenn ich die DB in Front- und...
  4. Wechsel des Access Frontend auf andere Datenbanken

    in Microsoft Access Hilfe
    Wechsel des Access Frontend auf andere Datenbanken: Hallo zusammen, ich bin noch ziemlich neu hier bei Euch, aber ich hoffe auf viele erfolgreiche Threads :-) Ich baue gerade eine Anwendung auf Basis von Access und komme damit auch ganz gut...
  5. Access 2016 Frontend mit Backend auf Sharepoint verknüpfen

    in Microsoft Access Hilfe
    Access 2016 Frontend mit Backend auf Sharepoint verknüpfen: Hallo Zusammen, kann mir jemand helfen? Ich habe eine Access 2016 Datenbank, als BE und FE geteilt. Ich kann die Tabellen aus dem BE auch als SharePoint - Listen ablegen. Und mit der FE drauf...
  6. Performance / langsames Netzwerk / Frontend

    in Microsoft Access Hilfe
    Performance / langsames Netzwerk / Frontend: Hallo zusammen, Ich habe mal eine Frage an die erfahrenen hier: Situation: - Netzwerk ist unglaublich langsam - Aufteilung in Front- und Backend war notwendig Lösung: jegliche Stammdaten sind...
  7. ODBC Anbindung zur SQL Datenbank in Access Frontend einbauen

    in Microsoft Access Hilfe
    ODBC Anbindung zur SQL Datenbank in Access Frontend einbauen: Hallo zusammen, ich habe folgendes Setup: Datenbank auf SQL Frontend MSAccess User ca. 50 Damit ich nun nicht bei jedem User lokal eine ODBC Anbindung am Rechner einrichten muss, suche ich eine...
  8. Access Ausdrucks Generator fuer das Frontend

    in Microsoft Access Hilfe
    Access Ausdrucks Generator fuer das Frontend: Hallo zusammen Ich hab ein (hoffe) kleines Problem. Ich hab eine Form in der Kalkulationen rein muessen. Das Problem ist das diese Kalkulationen sich stetig veraendern. Ich moechte die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden