Avatar billede Slettet bruger
09. august 2004 - 12:17 Der er 32 kommentarer og
1 løsning

Kan brugeren lave backup

Jeg ønsker en knap i min db, som brugeren trykker på og så laves der en backup af hele databasen.
Avatar billede overchord Nybegynder
09. august 2004 - 14:11 #1
Det skulle nok kunne lade sig goere, men det er svaert at afgoere uden mere info.
Har du sat nogle sikkerhedsbegraesninger paa. Hvor mange forskellige "ting" skal der laves backup paa (tabeller, forespoergsler, forms, makroer, moduler)?
Skal backup vaere til et netvaerksdreve eller lokale drev?
Avatar billede Slettet bruger
09. august 2004 - 14:28 #2
Det vil være nok med backup på lokalt drev, men det ville være rart hvis det kunne være på et netværksdrev.
Der er ingen begrænsninger, jeg vil bare kopiere hele databasen, men hvis det er nemmere, så er det nok at kopiere og gemme 2 tabeller.
Avatar billede overchord Nybegynder
09. august 2004 - 17:05 #3
ok det lyder ikke umuligt :-) - hvilken version af access drejer det sig om?
Avatar billede hekla Nybegynder
09. august 2004 - 22:40 #4
Du finder en guide til det på http://www.mvps.org/access/modules/mdl0045.htm
Avatar billede hekla Nybegynder
09. august 2004 - 22:50 #5
Eller brug den her til at lave backup af hele databasen: http://www.mvps.org/access/api/api0026.htm
Avatar billede Slettet bruger
10. august 2004 - 09:16 #6
Jeg brugte http://www.mvps.org/access/api/api0026.htm men fik meddelsen:

Only comments may appear after End Sub, End Function or End Property
Avatar billede mugs Novice
10. august 2004 - 09:30 #7
Dinkode starter med f.eks.:

Private Sub og så lidt mere
her følger din kode, som slutter med:
End Sub

Fejlen kommer fodi, du har skrevet noget kode EFTER End Sub

Som fejhlen siger er kun kommentarer tilladt. Du gør teksten efter End Sub til kommentarer ved at sætte en apostrof: ' til venstre for teksten. Dette er tilladt:

Private Sub og så lidt mere
her følger din kode, som slutter med:
End Sub
'dette er en kommentar
Avatar billede Slettet bruger
10. august 2004 - 09:58 #8
Den ser sådan ud:

Private Sub Kommandoknap39_Click()

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 = "Are you sure that you want to make a copy of the database?"
    If MsgBox(strMsg, vbQuestion + vbYesNo, "Please confirm") = vbNo Then _
            Err.Raise cERR_USER_CANCEL
           
    lngFlags = FOF_SIMPLEPROGRESS Or _
                            FOF_FILESONLY Or _
                            FOF_RENAMEONCOLLISION
    strSaveFile = CurrentDb.Name
    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


End Sub
Avatar billede mugs Novice
10. august 2004 - 10:10 #9
Prøv at fjerne den sidste linie: End Sub
Avatar billede Slettet bruger
10. august 2004 - 14:18 #10
Virker ikke. Debug standser ved:

Private Declare Function apiSHFileOperation Lib "Shell32.dll" _
            Alias "SHFileOperationA" _
            (lpFileOp As SHFILEOPSTRUCT) _
            As Long
Avatar billede mugs Novice
10. august 2004 - 14:21 #11
spg > den fejl jeg skriver om er denne:

"Only comments may appear after End Sub, End Function or End Property"

Og da den ikke kommer mere, er min kommentar korrekt.

Den anden fejl kender jeg ike noget til. Men inden du trykker på Debug, må du have en feklmeddelelse. Hvad siger den?
Avatar billede Slettet bruger
10. august 2004 - 15:20 #12
"Only comments may appear after End Sub, End Function or End Property"

Fremkommer desværre stadig og det er det debug'en siger når den stopper ved:

Private Declare Function apiSHFileOperation Lib "Shell32.dll" _
            Alias "SHFileOperationA" _
            (lpFileOp As SHFILEOPSTRUCT) _
            As Long
Avatar billede mugs Novice
10. august 2004 - 15:29 #13
Når du starter en Function, skal du også slutte med en end function.
Når du starter en sub, skal du også slutte med en end sub.

Uanset hvad, så er antallet af function eller sub ikke det samme som end function eller end sub.
Avatar billede mugs Novice
10. august 2004 - 15:51 #14
Du slutter ikke din Private Declare Function inden du starter en ny Function:

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

Function fMakeBackup() As Boolean
Avatar billede Slettet bruger
11. august 2004 - 08:18 #15
Private Declare Function apiSHFileOperation Lib "Shell32.dll" _
            Alias "SHFileOperationA" _
            (lpFileOp As SHFILEOPSTRUCT) _
            As Long

End function

Function fMakeBackup() As Boolean

Denne ændring gør ingen forskel.
Avatar billede mugs Novice
11. august 2004 - 10:31 #16
Jeg er blank - Beklager
Avatar billede Slettet bruger
11. august 2004 - 10:56 #17
Tak for forsøget mugs, jeg værdsætter det...
Avatar billede mugs Novice
11. august 2004 - 11:17 #18
Selv tak. Hvis du stadig får fejlen:

"Only comments may appear after End Sub, End Function or End Property"

er jeg overbevist om, at min kommentar hvor fejlen ligger er korrekt.
Avatar billede hekla Nybegynder
11. august 2004 - 11:42 #19
Prøv i stedet at sætte koden ind i et modul og kald funktionen vha:
call fMakeBackup
Avatar billede Slettet bruger
11. august 2004 - 11:56 #20
debug'en standser ved:

Dim db As Database

i funktionen:

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

og siger:

Compile error:
User-defined type not defined
Avatar billede hekla Nybegynder
11. august 2004 - 12:02 #21
Jeg kan ikke huske om det er ADO eller DAO. Har du reference til dem begge?
Avatar billede mugs Novice
11. august 2004 - 12:17 #22
hekla > korrekt, helt klart en referencefejl!
Avatar billede hekla Nybegynder
11. august 2004 - 12:28 #23
spg >> Det er noget rod, at du afviser svar, før du ved, om de kan bruges.
Avatar billede Slettet bruger
11. august 2004 - 12:33 #24
Undskyld, jeg var for hurtig med at afvise, jeg tænkte ikke helt klart.
Avatar billede Slettet bruger
11. august 2004 - 12:37 #25
hekla > jeg forstår ikke helt din kommentar 12:02:14
Avatar billede marwied Nybegynder
11. august 2004 - 12:47 #26
Hvis du står i designvisning kan du gå ind i under programkode (MS VBA) og her skal du gå ind i tools->references og sætte flueben ved ADO og DAO. På den måde bliver Access sat op til at køre ADO og DOA
Avatar billede hekla Nybegynder
11. august 2004 - 12:52 #27
ADO hedder også Microsoft ActiveX Data Objects 2.5 Library
DAO hedder også Microsoft DAO 3.6 Object Library

Versionsnumrene kan være nogle andre
Avatar billede mugs Novice
11. august 2004 - 12:53 #28
spg > Groft sagt er en reference til et andet program. Som stanard bliver disse referencer ikke oprettet ved installation af Access.

Hvis du f.eks skal have en Access db til at "snake" med Excel, skal du oprette en reference i Access til Excel. Ligeledes med Word.

DAO benyttes af Access98
ADO benyttess af Access2000

Hvis din kode er lavet i DAO, kan du ikke afvikle den hvis ikke du laver en reference til DAO.
Avatar billede marwied Nybegynder
11. august 2004 - 12:53 #29
Præcis!!! (for at bruge et meget slidt udtryk)
Avatar billede marwied Nybegynder
11. august 2004 - 12:58 #30
Er der i øvrigt nogen af jer der ved om ovenstående kode til backup også kan bruges hvis databasen er opdelt i "frontend" og "Backend"?
Avatar billede Slettet bruger
11. august 2004 - 12:59 #31
marwied > tak
Avatar billede Slettet bruger
11. august 2004 - 13:02 #32
hekla > selvfølgelig virkede koden... Tak for hjælpen

P.s. Det var referencen til DAO, der manglede.
Avatar billede keldo Nybegynder
12. august 2004 - 14:38 #33
Jeg har et tillægsspørgsmål til ovenstående, se venligst http://www.eksperten.dk/spm/528610

Håber en kan hjælpe. På forhån tak.
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