Back-up maken

Status
Niet open voor verdere reacties.

GerbenDenker

Gebruiker
Lid geworden
29 mrt 2013
Berichten
74
Hallo,

Ik probeer voor mijn base een back-up te maken.
Uit een eerder forum heb ik de code gehaald en dit werkt.
Bedoeling is om 10 x een back-up te maken; daarna mag de 1e weer overschreven worden.
Dat werkt groetendeels; na 10 x wordt nr 1 overschreven.
Maar.... daarna wordt nr 2 en verder niet meer overschreven.
Kan iemand aangeven waar de fout zit en hoe de code juist moet zijn ?



Code:
Private Sub Knop4_Click()
On Error GoTo fout
Dim MijnBestand
Dim fileObj As Object
Dim strBestandNaam As String
Dim strBackupNaam As String
Dim strBackupNaam01 As String
Dim strBackupNaam02 As String
Dim strBackupNaam03 As String
Dim strBackupNaam04 As String
Dim strBackupNaam05 As String
Dim strBackupNaam06 As String
Dim strBackupNaam07 As String
Dim strBackupNaam08 As String
Dim strBackupNaam09 As String
Dim strBackupNaam10 As String
Dim MijnBestand01 As String
Dim MijnBestand02 As String
Dim MijnBestand03 As String
Dim MijnBestand04 As String
Dim MijnBestand05 As String
Dim MijnBestand06 As String
Dim MijnBestand07 As String
Dim MijnBestand08 As String
Dim MijnBestand09 As String
Dim MijnBestand10 As String
Dim msg As Integer
'Dim fout As String

strBestandNaam = "Planten.accdb"
strBackupNaam01 = "BU-01-" & strBestandNaam
strBackupNaam02 = "BU-02-" & strBestandNaam
strBackupNaam03 = "BU-03-" & strBestandNaam
strBackupNaam04 = "BU-04-" & strBestandNaam
strBackupNaam05 = "BU-05-" & strBestandNaam
strBackupNaam06 = "BU-06-" & strBestandNaam
strBackupNaam07 = "BU-07-" & strBestandNaam
strBackupNaam08 = "BU-08-" & strBestandNaam
strBackupNaam09 = "BU-09-" & strBestandNaam
strBackupNaam10 = "BU-10-" & strBestandNaam
MijnBestand01 = Dir(CurrentProject.Path & "\BU-01-" & strBestandNaam)
MijnBestand02 = Dir(CurrentProject.Path & "\BU-02-" & strBestandNaam)
MijnBestand03 = Dir(CurrentProject.Path & "\BU-03-" & strBestandNaam)
MijnBestand04 = Dir(CurrentProject.Path & "\BU-04-" & strBestandNaam)
MijnBestand05 = Dir(CurrentProject.Path & "\BU-05-" & strBestandNaam)
MijnBestand06 = Dir(CurrentProject.Path & "\BU-06-" & strBestandNaam)
MijnBestand07 = Dir(CurrentProject.Path & "\BU-07-" & strBestandNaam)
MijnBestand08 = Dir(CurrentProject.Path & "\BU-08-" & strBestandNaam)
MijnBestand09 = Dir(CurrentProject.Path & "\BU-09-" & strBestandNaam)
MijnBestand10 = Dir(CurrentProject.Path & "\BU-10-" & strBestandNaam)
      If MijnBestand01 = "" Then
            strBackupNaam = strBackupNaam01
            Laatste = strBackupNaam01
            ElseIf MijnBestand02 = "" Then
            strBackupNaam = strBackupNaam02
            Laatste = strBackupNaam02
            ElseIf MijnBestand03 = "" Then
            strBackupNaam = strBackupNaam03
            Laatste = strBackupNaam03
            ElseIf MijnBestand04 = "" Then
            strBackupNaam = strBackupNaam04
            Laatste = strBackupNaam04
            ElseIf MijnBestand05 = "" Then
            strBackupNaam = strBackupNaam05
            Laatste = strBackupNaam05
            ElseIf MijnBestand06 = "" Then
            strBackupNaam = strBackupNaam06
            Laatste = strBackupNaam06
            ElseIf MijnBestand07 = "" Then
            strBackupNaam = strBackupNaam07
            Laatste = strBackupNaam07
            ElseIf MijnBestand08 = "" Then
            strBackupNaam = strBackupNaam08
            Laatste = strBackupNaam08
            ElseIf MijnBestand09 = "" Then
            strBackupNaam = strBackupNaam09
            Laatste = strBackupNaam09
            ElseIf MijnBestand10 = "" Then
            strBackupNaam = strBackupNaam10
            Laatste = strBackupNaam10
                                     
        End If
            If Laatste = MijnBestand10 Then
                strBackupNaam = strBackupNaam10
                ElseIf Laatste = MijnBestand10 Then
                strBackupNaam = strBackupNaam10
                End If
                    If strBackupNaam = "" Then
                    strBackupNaam = strBackupNaam01
                    Else
                    End If

Laatste = strBackupNaam
strBestandNaam = CurrentProject.Path & "\" & strBestandNaam
strBackupNaam = CurrentProject.Path & "\" & strBackupNaam
Set fileObj = CreateObject("scripting.filesystemobject")
fileObj.copyfile strBestandNaam, strBackupNaam, True
msg = MsgBox("De backup van de database is gelukt!")


Exit Sub
fout:
MsgBox "De backup is mislukt!", vbCritical

End Sub

De fout zit mogelijk in het onderste stukje...

Code:
 End If
            If Laatste = MijnBestand10 Then
                strBackupNaam = strBackupNaam10
                ElseIf Laatste = MijnBestand10 Then
                strBackupNaam = strBackupNaam10
                End If
                    If strBackupNaam = "" Then
                    strBackupNaam = strBackupNaam01
                    Else
                    End If

Alvast heel erg bedankt !
 
Laatst bewerkt:
Je checkt alleen maar of je backup bestand bestaat. Dat houdt dus op na 10 keer. Overigens een erg onhandige constructie die je gemaakt hebt, met al die variabelen. Kan 10 keer (letterlijjk ;) ) korter. Maar dan nog: het probleem los je daar niet mee op. Zelf zou ik dus een backup maken met daarin de datum van de backup en een vaste naam. Met DIR tel je dan het aantal bestaande backup bestanden en als dat 10 is, vervang je de oudste.
 
Dankje voor het antwoord. Ik begrijp het niet.
Zou je dan de code kunnen maken, want zelf zou ik het niet kunnen.

Bij voorbaat dank.
 
Ik heb dit net gemaakt en getest, en 't werkt.
Code:
Private Sub cmdBackup_Click()
On Error GoTo fout
Dim fileObj As Object
Dim strBestandNaam As String, strBackupNaam As String, MijnBestand As String
Dim Pad As String
Dim DB() As Variant
Dim i As Integer

    Pad = CurrentProject.Path & "\"
    strBestandNaam = "Planten_"
    MijnBestand = Dir(Pad & strBestandNaam & "*.accdb")
    Do While Not MijnBestand = ""
        ReDim Preserve DB(i)
        DB(i) = MijnBestand
        i = i + 1
        ReDim Preserve DB(i)
        MijnBestand = Dir
    Loop
    
    strBackupNaam = CurrentProject.Path & "\" & strBestandNaam & Format(Date, "_yyyymmdd") & ".accdb"
    strBestandNaam = Pad & CurrentProject.Name
    
    Set fileObj = CreateObject("Scripting.FileSystemObject")
    If i > 10 Then fileObj.DeleteFile (DB(0))
    fileObj.CopyFile strBestandNaam, strBackupNaam, True

Exit Sub

fout:
MsgBox "De backup is mislukt!", vbCritical

End Sub
 
Dank je.
Maar het werkt niet helemaal; er wordt 1 back-up gemaakt en daarna niet meer.
Ik begrijp uit je verhaal (en mijn wens) dat er 10 back-up gemaakt moeten/kunnen worden en dat dan nr.1 overschreven wordt.
Dat is ook mijn bedoeling, maar dat gebeurt nu niet.
Er wordt slechts 1 back-up gemaakt en daarmee houdt het op.
 
Ik heb een voorbeeldje gemaakt die één backup per dag maakt. Je moet de code uiteraard aanpassen als je wat anders wilt.
 
Ok, duidelijk; als je nu bv de tijd meeneemt in de back-up, zou je dan meerdere per dag kunnen maken ?
't Liefst zou ik per dag dan meerdere kunnen maken. - is dat mogelijk en kan je de code er van maken ?
Of is dat te ingewikkeld / tijdrovend.
Zelf kan ik het niet. (nog te weinig kennis..)
 
Je kunt uiteraard meerdere backups per dag maken, maar waarom zou je dat doen? Als het systeem zo onbetrouwbaar is, zou ik dat eerst oplossen :). Ik ging er eigenlijk ook vanuit dat je per keer (dag dus) 1 backup wilde maken, en dat je na 10 dagen de oudste zou willen vervangen. Nu leg je ook een extra belasting op je database door een geopend bestand steeds maar weer te kopiëren, waardoor de kans dat hij stuk gaat alleen maar groter wordt. In welk geval de noodzaak voor een backup ook weer groter wordt natuurlijk. Eigenlijk een neerwaartse spiraal, als je het mij vraagt :).
 
Je hebt gelijk, maar ik wil niet afhankelijk zijn van een datum.
Of te wel dat je pas de volgende dag een back-up kunt maken.
Is er geen mogelijkheid gewoon 10 x een back-up te maken (wanneer je maar wilt) en dan weer bij 1 beginnen etc ?
 
Jawel, maar dan moet je de naam van de backup dus aanpassen. Bijvoorbeeld door er een tijd achter te hangen.
 
OK, welke stukje code voeg je dan toe en waar ?
Bvd; als ik dat weet, is het volgens mij opgelost.
 
Zoiets?
Code:
    strBackupNaam = CurrentProject.Path & "\" & strBestandNaam & Format(Date, "_yyyymmdd") & Format(Time, "_HHMM") & ".accdb"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan