Avatar billede madiedk Nybegynder
11. februar 2008 - 11:35 Der er 7 kommentarer og
1 løsning

automatisk sikkerhedskopi

Hej

jeg har en accessdatabase som jeg gerne vil have der bliver oprettet en sikkerhedskopi af en gang i døgnet, hvordan sætter jeg den til at gøre det automatisk?
Avatar billede Slettet bruger
11. februar 2008 - 12:04 #1
Hvis du skal gøre det fra access, så skal du have en database åben hele døgnet og så på OnTimer Eventen køre eksempelvis flg. modul:

Call fMakeBackup

Selve modulet:

Option Compare Database
Option Explicit

Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type

Private Const FO_MOVE As Long = &H1
Private Const FO_COPY As Long = &H2
Private Const FO_DELETE As Long = &H3
Private Const FO_RENAME As Long = &H4

Private Const FOF_MULTIDESTFILES As Long = &H1
Private Const FOF_CONFIRMMOUSE As Long = &H2
Private Const FOF_SILENT As Long = &H4
Private Const FOF_RENAMEONCOLLISION As Long = &H8
Private Const FOF_NOCONFIRMATION As Long = &H10
Private Const FOF_WANTMAPPINGHANDLE As Long = &H20
Private Const FOF_CREATEPROGRESSDLG As Long = &H0
Private Const FOF_ALLOWUNDO As Long = &H40
Private Const FOF_FILESONLY As Long = &H80
Private Const FOF_SIMPLEPROGRESS As Long = &H100
Private Const FOF_NOCONFIRMMKDIR As Long = &H200

Private Declare Function apiSHFileOperation Lib "Shell32.dll" _
            Alias "SHFileOperationA" _
            (lpFileOp As SHFILEOPSTRUCT) _
            As Long

Function fMakeBackup() As Boolean
Dim strMsg As String
Dim tshFileOp As SHFILEOPSTRUCT
Dim lngRet As Long
Dim strSaveFile As String
Dim lngFlags As Long
Const cERR_USER_CANCEL = vbObjectError + 1
Const cERR_DB_EXCLUSIVE = vbObjectError + 2
    On Local Error GoTo fMakeBackup_Err

    If fDBExclusive = True Then Err.Raise cERR_DB_EXCLUSIVE
   
    'strMsg = "Er du sikker på at du vil lave et kopi af databasen?"
    'If MsgBox(strMsg, vbQuestion + vbYesNo) = vbNo Then _
            Err.Raise cERR_USER_CANCEL
           
    'lngFlags = FOF_SIMPLEPROGRESS Or _
    '                        FOF_FILESONLY Or _
    '                        FOF_RENAMEONCOLLISION
    'strSaveFile = CurrentDb.Name
   
    lngFlags = FOF_SIMPLEPROGRESS Or _
                            FOF_FILESONLY
    strSaveFile = "c:\DinSti\DinDatabase.mdb"
   
   
   
   
    With tshFileOp
        .wFunc = FO_COPY
        .hwnd = hWndAccessApp
        .pFrom = CurrentDb.Name & vbNullChar
        .pTo = strSaveFile & vbNullChar
        .fFlags = lngFlags
    End With
    lngRet = apiSHFileOperation(tshFileOp)
    fMakeBackup = (lngRet = 0)
   
fMakeBackup_End:
    Exit Function
fMakeBackup_Err:
    fMakeBackup = False
    Select Case Err.Number
        Case cERR_USER_CANCEL:
            'do nothing
        Case cERR_DB_EXCLUSIVE:
            MsgBox "The current database " & vbCrLf & CurrentDb.Name & vbCrLf & _
                    vbCrLf & "is opened exclusively.  Please reopen in shared mode" & _
                    " and try again.", vbCritical + vbOKOnly, "Database copy failed"
        Case Else:
            strMsg = "Error Information..." & vbCrLf & vbCrLf
            strMsg = strMsg & "Function: fMakeBackup" & vbCrLf
            strMsg = strMsg & "Description: " & Err.Description & vbCrLf
            strMsg = strMsg & "Error #: " & Format$(Err.Number) & vbCrLf
            MsgBox strMsg, vbInformation, "fMakeBackup"
    End Select
    Resume fMakeBackup_End
End Function

Private Function fCurrentDBDir() As String
'code courtesy of
'Terry Kreft
Dim strDBPath As String
Dim strDBFile As String
    strDBPath = CurrentDb.Name
    strDBFile = Dir(strDBPath)
    fCurrentDBDir = Left(strDBPath, InStr(strDBPath, strDBFile) - 1)
End Function

Function fDBExclusive() As Integer
Dim db As Database
Dim hFile As Integer
    hFile = FreeFile
    Set db = CurrentDb
    On Error Resume Next
    Open db.Name For Binary Access Read Write Shared As hFile
    Select Case Err
        Case 0
            fDBExclusive = False
        Case 70
            fDBExclusive = True
        Case Else
            fDBExclusive = Err
    End Select
    Close hFile
    On Error GoTo 0
End Function
Avatar billede Slettet bruger
11. februar 2008 - 12:07 #2
Du kan så sætte din Timer til at køre hver 60000 millisekunder (1 time) eller hvordan det nu er og så lave en if sætning, som siger, at hvis Time er ml. 00:00 og 01:00 så skal den fyre modulet af eller hvordan du nu lige vil strikke et eller andet sammen!~)
Avatar billede mugs Novice
11. februar 2008 - 13:30 #3
Dwet er vel ikke nødvendigt at have db kørende konstant. Med Windows Scheduler kan db åbnes på et givent tidspunkt, og med et ur på formen fyrer modulet af.
Avatar billede madiedk Nybegynder
11. februar 2008 - 13:45 #4
skal man virkelig selv skrive vba koden til det!? er det noget man normalt gør ude i virksomhederne der bruger access, nu er der måske ikke så mange der bruger access af de store virksomheder, men alligevel. hvad med de professionelle som oracle osv. har de en indbygget funktion der tager backup automatisk. jeg går udfra at backup er noget virksomhederne bruger flittigt? har læst noget om replika i access også er det noget der kan anbefales som sikkerhed, er lidt i tvivl om hvad forskellel på replika og sikkerhedskopi af databasen er
Avatar billede Slettet bruger
11. februar 2008 - 14:00 #5
Normalt vil man bruge et eksternt program og modulet er også mest tænkt, som en manuel backup. Altså en knap, som aktiverer koden (Call fMakeBackup!~)
Avatar billede mugs Novice
11. februar 2008 - 14:02 #6
I virksomheder er det normalr, at filerne ligger på et netværk. Der er så en back up server, der een gang i døgnet laver en back up af udvalgte drev.

Skrive og skrive koden. Du kan blor copy og paste.
Avatar billede madiedk Nybegynder
11. februar 2008 - 14:41 #7
okay, tak for svar og info
Avatar billede Slettet bruger
11. februar 2008 - 15:05 #8
Bare for god ordens skyld så er en time 3600000 millisekunder!~)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester