Backup van DB en verwijderen van vorige versies

Status
Niet open voor verdere reacties.

Scallebe

Gebruiker
Lid geworden
29 okt 2014
Berichten
528
Goede middag ontwikkelaars,

Ik wil bij het afsluiten van mijn database een backup maken en vorige versies van die backups verwijderen (De twee laatste mogen blijven staan)

Ik heb wat rondgezocht op het www en deze code gevonden die perfect werkt. Het bestand krijgt een datum met "Back-up" en de bestandsnaam. De code vervangt ook steeds de laatste versie met dezelfde datum.

Echter de volgende dag maakt hij opnieuw een backup met de huidige nieuwe datum. Enz....

Ik zou nu alle backups die ouder zijn dan 2 dagen eerst willen verwijderen. Kortom de folder niet gaan overstelpen met backups...

Dit is de code voor het creëren van de Back-up :

Code:
Private Sub Knop11_Click()
On Error GoTo fout

Dim fileObj As Object
Dim strBestandNaam As String
Dim strBackupNaam As String
Dim strSpatie As String
Dim strBU As String
Dim msg As Integer
'Dim fout As String

strBestandNaam = "Get Inked and Bie Pierced.accdb"
strSpatie = " - "
strBU = "BackUp "
strBackupNaam = Format$(Now(), "dd-mm-yyyy") & strSpatie & strBU & strBestandNaam

strBestandNaam = CurrentProject.Path & "\" & strBestandNaam
strBackupNaam = CurrentProject.Path & "\" & strBackupNaam
Set fileObj = CreateObject("scripting.filesystemobject")
fileObj.copyfile strBestandNaam, strBackupNaam, True

msg = MsgBox("Lies, WOEHOE!!! De backup is gelukt!!!")
Application.Quit acQuitSaveAll
'DoCmd.RunMacro "DBAfsluiten"
Exit Sub
fout:
MsgBox "Sorry Lies, de backup is mislukt!", vbCritical

End Sub


Wie kan mij helpen bij het delete gedeelte voor de oudere versies? www bied momenteel geen bruikbare oplossingen...


Thanks :thumb:

Pascal
 
Ik ben niet kapot van je naamgeving; in VBA werk je met Amerikaanse datumnotatie dus de Nederlandse notatie gebruiken is niet handig. Sowieso is sorteren op dag niet handig. Ik sorteer altijd op Jaar-Maand-Dag, dan heb je altijd de juiste volgorde. Daarnaast zie ik het voordeel niet van eenmalige variabelen waarvan de naam langer is dan de inhoud. Je bent dus meer tijd kwijt met het intypen van de variabelenaam dan van de feitelijke tekst. Niet handig :). Dus ik heb je code even toegepast in de laatste versie die ik had staan, en dan krijg je zoiets:
Code:
Dim strBestandNaam As String, strBackupNaam As String, tmp As Variant

    strBestandNaam = "Get Inked and Bie Pierced v2.accdb"
    strBackupNaam = Format(Date, "yyyymmdd") & "_BackUp_" & strBestandNaam
    
    tmp = Dir(CurrentProject.Path & "\*_backup_Get Inked and Bie Pierced v2.accdb")
    Do While tmp <> ""
        If DateSerial(Left(tmp, 4), Mid(tmp, 5, 2), Mid(tmp, 7, 2)) < Date - 2 Then
            Kill CurrentProject.Path & "\" & tmp
        End If
        tmp = Dir
    Loop
    
    strBestandNaam = CurrentProject.Path & "\" & strBestandNaam
    strBackupNaam = CurrentProject.Path & "\" & strBackupNaam
    CreateObject("Scripting.Filesystemobject").CopyFile strBestandNaam, strBackupNaam, True
    
    msg = MsgBox("Lies, WOEHOE!!! De backup is gelukt!!!")
    Exit Sub
 
Octafish,

Ja die Amerikaanse toestanden soms....

Ik heb jouw advies ter harte genomen en ze ook zo in mijn Afsluit-knop gezet.

Echter wanneer de gebruiker afsluit met het kruisje wordt er geen backup gemaakt. In Excel heb je zo iets als "Thisworkbook" waar je die code dan kan inplaatsen On Close... (code achter het kruisje)

Bestaat er ook zoiets voor Access?


Groetjes

Pascal
 
Je hebt de gebeurtenis <Bij sluiten> van het formulier. Daar zou je 'm bij kunnen zetten.
Code:
Private Sub Form_Close()
     .. code
End Sub
 
OctaFish,

Het zijn niet de kruisjes op de formulieren, dat ken ik wel.

Het is het kruisje van Access zelf...

Groetjes

Pascal
 
Je kunt eventueel dat kruisje uitschakelen, maar mij lijkt het een stuk simpeler om een afsluit knop te maken waarin je de code gebruikt. En als een gebruiker die weigert te gebruiken, en toch steeds dat kruisje gebruikt.... ik zou het wel weten. Dan ging die naald op een plek waar de 'dader' hem echt niet wil hebben :).
 
Goede morgen OctaFish,

Je hebt gelijk...

Het was maar een idee, jammer dat je achter het kruisje geen code kan zetten, dan was het probleem opgelost...

Ze moeten de knop maar gebruiken...:):)


Bedankt

Pascal
 
Je kan de standaard interface verbergen, dan is het kruisje dus óók weg. Mij lijkt het de moeite niet om daar tijd in te steken; zorg voor een prettige interface voor de gebruikers, met een goede instructie erbij en ze eten uit je hand :d.
 
Octafish,

Ik heb op mijn Afsluit - knop een tekst gezet dat ze niet mogen afsluiten met het kruisje maar deze knop moeten gebruiken... :):thumb:

Groetjes

Pascal
 
Je zou natuurlijk ook standaard een formulier hebben openstaan (desnoods verborgen), en je afsluitcode zetten achter de unload gebeurtenis van dat formulier.
 
Lijkt mij een onhandige constructie. Het lijkt mij veel handiger om oude backups te checken/verwijderen bij het openen van de database met code op je op startformulier. Dat wordt namelijk altijd geopend. En bij sluiten van je hoofdformulier maak je dan de backup.
 
LucHeyndrickx, Octafish,

Momenteel heb ik duidelijk gemaakt op de knop dat ze daar moeten mee afsluiten omdat anders de backup niet wordt gemaakt.

# LucHeyndrickx

Maar om alle opties open te houden en vooral om bij te leren, hoe pak ik dat dan aan?

Om het formulier te verbergen volstaat het het met de code :

Code:
Me.Visible = False

Maar waar zet ik die dan in, Open event? load event?

thanks

Pascal
 
Dat is het probleem met de oplossing van Luc: die gaat niet voor je werken, omdat dat formulier dus verder niet aangestuurd wordt. En dat gebeurt wél op je uiteindelijke werkformulier. Dáár kun je de code dus prima vanaf schieten.

En wat het opruimen betreft: dat zou ik doen op de manier die ik reeds heb aangegeven, dus bij het opstarten van je startformulier. Dan zijn in ieder geval de overtollige backups kwijt. En als mensen onverhoopt tóch op een foute manier afsluiten (sneltoets bijvoorbeeld; dan omzeil je de knop ook) dan is er toch niks aan de hand? Hooguit heb je de backup niet gemaakt, maar eerlijk gezegd is dat een beetje érg doemdenken, want hoe vaak gebeurt het nu dat de db verkeerd wordt afgesloten? En, veel belangrijkere vraag: hoe vaak gebeurt het dat je db corrupt/kapot is? Als ik dit soort vragen lees denk ik in eerste instantie: waarom? Waarom zou je elke dag een kopie maken van je database? Ik doe dat eerlijk gezegd nooit/zelden, en heb daar ook nooit een probleem mee gehad. Als je de map documenten (want je hebt vast meer documenten die je niet kwijt wilt) regelmatig backupt met een programma dat daar speciaal voor bedoeld is, dan héb je immers al een kopie van je db. En is het dus volslagen onnodig om op deze manier extra kopieën te maken.

Maar stel vooral jezelf de vraag: wanneer is de db voor het laatst kapot gegaan, en heb ik een muurtje gesloopt omdat ik geen backup had? Ander voorbeeldje: als je een nieuwe auto koopt, hoeveel koop je er dan? Twee, drie of één? Wat zeg je? Eén? Maar wat als die gelijk kapot gaat? I hope you get my point :).
 
Octafish,

De Backup is in dit geval geen overbodige luxe hoor.

De DB staat bij ons op het netwerk omdat verschillende personen er gebruik van maken en werkt over het algemeen zoals het hoort.

Maar dat netwerk laat het af en toe toch wel eens afweten met het rare gevolg dat de DB op één of andere manier door elkaar geschud wordt.

Plots gaat de DB open, niet meer met het openingsformulier, met alle access objecten zichtbaar...

Ook komt het voor dat er nieuwe records worden gecreëerd maar niet opgeslagen in de tabellen...

Dus jammer genoeg moet ik (soms te dikwijls) te veel terugvallen op een backup.

je zou van een bedrijf waar ik voor werk wel wat anders verwachten maar nee.... :confused:

De gebruikers hebben ondertussen wel al begrepen om af te sluiten met de aangemaakte knop.


Bedankt voor alle moeite.:thumb:


Groetjes

Pascal
 
Warrig verhaal
De gebruikers hebben ondertussen wel al begrepen om af te sluiten met de aangemaakte knop.
msg = MsgBox("Lies, WOEHOE!!! De backup is gelukt!!!")

Worden ingewikkelde sollicitatieprocedures. Heet u Lies? Ja, dan bent u gelijk aangenomen. Nee, dan werkt mijn database niet meer en mag u dus niet komen.

Net als @OctaFish zou ik de back-ups door de daarvoor bedoelde applicaties laten maken.
Je gaat toch ook geen brieven opstellen in Excel en complexe berekeningen door Word laten doen? ;)
 
Als de db op een netwerk staat, zal de netwerkbeheerder voor die map de eigenschap <Vorige versies> toch wel hebben aangezet? Dan kun je vanuit een archief map die een paar keer per dag wordt gemaakt een versie terugzetten met zo min mogelijk data verlies.
Als een database crasht tijdens het gebruik, ben je sowieso de data kwijt. En heb je geen nieuwe backup. Het lijkt mij dan veel logischer om met een Backend te gaan werken. Dat je database na een ‘crash’ niet goed opstart, kun je doorgaans met de optie <Comprimeren en Herstellen> wel weer goed krijgen. Daar heb je geen backup voor nodig.

Ik blijf het een raar verhaal vinden, en raad je toch maar aan eens een capabele netwerkbeheerder te zoeken :).
 
VanA,

Het is een beetje een mengeling van twee DB, waar ik het maken van een backup op toepas...

1 = privé de ander op het netwerk...

Er wordt van de Map network drives dagelijks een backup genomen, dus theoretisch zou een extra backup van de DB niet nodig zijn,
maar ik heb het vertrouwen daar een beetje verloren.
Het is ook al een heel gedoe om zo een backup eventueel terug te laten zetten met de laatste bruikbare versie.

Een eigen aangemaakte backup heeft mij al heel wat tijd en moeite bespaard. Het is correct dat er soms wat input verloren is gegaan, maar wat dat netwerk soms met het origineel doet is mij een raadsel.


Bedankt voor de hulp.

Groetjes

Pascal
 
Heb je nu al gekeken of de map staat ingesteld op <Vorige versies>? Dan ben je echt van dit ‘probleem’ af.
 
Rechtsklikken op een map, Eigenschappen.
 

Bijlagen

  • Vorige Versies.jpg
    Vorige Versies.jpg
    83,1 KB · Weergaven: 69
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan