Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Backendsicherung

Begonnen von 69bruno, Oktober 30, 2012, 13:18:44

⏪ vorheriges - nächstes ⏩

69bruno

 :-[

Ich hätte da mal eine Frage......
Ich habe eine DB, in FE und BE aufgeteilt. Wegen Netzwerkfehlern die nicht beseitigt werden können (Netzlaufwerk verschwindet unvermittelt und kehrt unvermittelt wieder zurück) muss meine Kollegin teilweise auf einem Laptop lokal mit der BE arbeiten. Dazu wird sie (erhängt mich jetzt nicht) zwischen Netzwerklaufwerk und lokaler Platte hin und her kopiert. (Die elegante Lösung mit SQL-Datenbank wird irgendwann angegangen).
Jetzt passiert aber wegen der Netzwerkfehler folgendes, die BE lässt sich manchmal nicht vollständig auf das Netzlaufwerk zurückspeichern (kopieren) und ist dann Datenschrott. Bisher ist es zum Glück noch nicht passiert, dass die defekte BE über die lokale BE geschrieben wurde. Lucky Fingers.....
Kann man per VBA die Backend beim Beenden der FE in ein Sicherungsverzeichnis kopieren lassen und erst dann den Beendigungsvorgang schliessen, wenn der Sicherungsvorgang verifiziert wurde ?
Script- und Batchversionen sind wegen der Nutzerrechte nicht möglich. Habe ich schon versucht. Die IT-Abteilung sieht auch keine Lösung, da man für mich als einzelnen User nicht das Rechtekonzept ändern möchte.
Ich habe gesucht, aber fast nur Hinweise auf Script- oder Batchversionen gefunden, insbesondere fehlt mir die Verifizierung des Sicherungsvorgangs.
Für einen Code-Schnipsel wäre ich sehr dankbar.....

Gruß
Bruno
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

Wurliwurm

Zitat von: 69bruno am Oktober 30, 2012, 13:18:44
Script- und Batchversionen sind wegen der Nutzerrechte nicht möglich.

Letzlich wären auch über VBA nur Betriebssystemaufrufe möglich.

Du kannst mal etwas versuchen mit FileSystemObject (Google mal mit "Datei kopieren FileSystemObject VBA").

69bruno

Für die die es interessieren mag,habe ich mal angehängt, welchen Code ich mir zusammengesucht habe.
Er legt eine Backup-Datei der BE an (mit Datum und Zeit) und begrenzt die Anzahl der Sicherungsdateien auf 10.....

Dank an Wurliwurm für den Tip !!!

Option Compare Database

Dim oFSO As Object

Public Type SPLITPATH
    sDrive As String
    sPath   As String
    sFile     As String
    sExt As String
End Type

Public Const sSicherung As String = "Sicherungen\"

Public Function fileSplit(ByVal sFilePath As String) As SPLITPATH
' die Prozedur zerlegt den Dateinamen sFilePath in LW, Path, Name, Extension
    Dim I As Integer

    With fileSplit
        If Mid$(sFilePath, 2, 1) = ":" Then
            .sDrive = Left$(sFilePath, 2)
            sFilePath = Mid$(sFilePath, 3)
        End If
        For I = Len(sFilePath) To 1 Step -1
            If Mid(sFilePath, I, 1) = "\" Then  ' keine Extension vorhanden
                .sExt = ""
                Exit For
            End If
            If Mid(sFilePath, I, 1) = "." Then
                .sExt = Right(sFilePath, Len(sFilePath) - I)
                sFilePath = Left(sFilePath, I - 1)
                Exit For
            End If
        Next I
        I = Len(sFilePath)
        If InStr(sFilePath, "\") <> 0 Then
            While Mid(sFilePath, I, 1) <> "\"
                I = I - 1
            Wend
        End If
        .sPath = Left(sFilePath, I)
        .sFile = Right(sFilePath, Len(sFilePath) - I)
    End With
End Function

Public Function CopyFileFSO(strSourceFile As String, strTargetFile As String, _
                            Optional boolOverwrite As Boolean = True)
'*******************************************
'Name:      CopyFileFSO (Function)
'Purpose:   Datei kopieren
'Author:    Tommyk
'Date:      März 11, 2004, 04:15:02
'Inputs:    strSourceFile=Pfad und Name der Quelldatei,
'           strTargetFile= Pfad und Name der Zieldatei,
'           boolOverwrite= vorhandene Dateien werden überschrieben
'Output:
'*******************************************
On Error GoTo Err_Handler

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If boolOverwrite = True Then
        oFSO.CopyFile strSourceFile, strTargetFile
      Else
        oFSO.CopyFile strSourceFile, strTargetFile, False
    End If
   
Err_Handler_Exit:
    Exit Function
Err_Handler:
    Dim strErrString As String
    strErrString = "Error Information..." & vbCrLf
    strErrString = strErrString & "Error#: " & Err.Number & vbCrLf
    strErrString = strErrString & "Description: " & Err.Description & vbCrLf
    strErrString = strErrString & "Datenbanksicherung nicht erfolgreich, bitte Administrator informieren!" & vbCrLf
    MsgBox strErrString, vbCritical + vbOKOnly, "Error in Function: CopyFileFSO"
    Resume Err_Handler_Exit
End Function


Public Sub SaveDB()
    Dim sSicherungsname As String
    Dim sDBPathName As String
    Dim sDir As String
    Dim tSplitPath As SPLITPATH
       
    sDBPathName = "K:\DATENBANKEN\Bereitschaften_be.mdb"
    tSplitPath = fileSplit(sDBPathName)
    sDir = tSplitPath.sDrive & tSplitPath.sPath
    sSicherungsname = tSplitPath.sFile & Year(Date) & Month(Date) & _
                      Day(Date) & Hour(Time()) & Minute(Time()) & _
                      Second(Time()) & ".mdb"
    CopyFileFSO sDBPathName, sDir & sSicherung & sSicherungsname, True
   
    Const Pfad = "K:\DATENBANKEN\Sicherungen\"
    Const MaxDat = 10
    Dim AktDat As String, Zaehler As Integer
   
    ' erster Durchlauf zählen
    AktDat = Dir(Pfad & "*.mdb")
    While AktDat <> ""
        Zaehler = Zaehler + 1
        Debug.Print "Gefunden :" & Pfad & AktDat
        AktDat = Dir
    Wend
    ' zweiter Durchlauf löschen
    AktDat = Dir(Pfad & "*.mdb")
    While AktDat <> ""
        Zaehler = Zaehler - 1
        If Zaehler >= MaxDat Then
            'MsgBox "Löschen :" & Pfad & AktDat
            Kill (Pfad & AktDat)
        End If
        AktDat = Dir
    Wend
End Sub
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If