:-[
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
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").
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