Avatar billede fuskeren Nybegynder
16. februar 2005 - 12:08 Der er 8 kommentarer og
1 løsning

Lukkeknap der sikre komprimering og reparering.

For at sikre at databasen jævntlig bliver komprimeret og repareret har jeg tænkt, at lægge en kode ind for dette på lukkeknappens "VedUdgang".

Vil det give problemer? Er der nogle af "eksperterne" der kan ryste en sådanne ud af ærmet.
PS. til Access 2000.
Avatar billede jensen363 Forsker
16. februar 2005 - 12:14 #1
I indstillinger/generelt har du mulighed for at sætte det som standard, altså komprimering ved lukning
16. februar 2005 - 12:23 #2
øh, hvorfor har du oprettet spørgsmålet 2 gange?
Avatar billede fuskeren Nybegynder
16. februar 2005 - 12:30 #3
Jeg beklager men der er store problemer med vores netopkobling i dag.
Det er korekt at access kan indstilles til at komprimering ved lukning, men det gælder da kun for det eksemplar at access der er foretaget den indstilling. Jeg forventer ikke at fremtidige bruger af databasen her lavet denne indstilling. Jeg søger en løsning der er en del af databasen.
Avatar billede jensen363 Forsker
16. februar 2005 - 12:36 #4
Option Compare Database

Function KomprimérData()

    CommandBars("Menu Bar"). _
    Controls("Funktioner"). _
    Controls("Databasefunktioner"). _
    Controls("Komprimer og reparer database..."). _
    accDoDefaultAction
   
End Function

Function CompactDb(strDbPath As String) As Boolean

    ' This procedure creates a backup copy of a database
    ' and then compacts it.
    '
    ' Arguments:
    '  strDbPath: The path to the database to be compacted.
    '
    ' Returns:
    '  A Boolean value indicating success or failure.
   
    Dim dbs As Database
    Dim intLength As Integer
    Dim varPosition As Variant
    Dim strDbTemp As String, strDbCompacted As String
    Dim strDbBackup As String
    Dim strMsg As String
    Const conPermissionDenied As Integer = 70
   
    On Error GoTo Err_CompactDb
    ' Initialize string for message.
    strMsg = "Database " & strDbPath & " cannot be opened exclusively. " _
        & "The database may have already been opened by you or another user."

    ' Compact the database to a temporary file.
    intLength = Len(strDbPath)
    varPosition = InStr(strDbPath, ".mdb")
    If varPosition > 0 Then
        strDbTemp = Left(strDbPath, varPosition - 1)
       
        ' Create backup file before compacting.
        strDbBackup = strDbTemp & ".bak"
        FileCopy strDbPath, strDbBackup
       
        ' Check whether database can be opened exclusively.
        ' This line calls a function defined in Chapter 2.
        If Not CanOpenDbExclusively(strDbPath) Then
            MsgBox strMsg
            GoTo Exit_CompactDb
        End If
       
        ' Compact to new file.
        strDbCompacted = strDbTemp & "Compacted.mdb"
        DBEngine.CompactDatabase strDbPath, strDbCompacted
       
        ' Delete uncompacted database.
        Kill strDbPath
       
        ' Rename compacted database to original name.
        Name strDbCompacted As strDbPath
    End If
    CompactDb = True
   
Exit_CompactDb:
    On Error Resume Next
    dbs.Close
    Set dbs = Nothing
    Exit Function
   
Err_CompactDb:
    If Err = conPermissionDenied Then
        MsgBox strMsg
    Else
        MsgBox "Error " & Err & ": " & vbCrLf & Err.Description
    End If
    CompactDb = False
    Resume Exit_CompactDb

End Function
16. februar 2005 - 12:52 #5
Indstillingen "Komprimer ved lukning" er da en database-egenskab (og ikke en Access-egenskab) Derved vil indstillingen også gælde for alle de brugere, som har databasen, og du behøver ikke at spekulere på mere.
Avatar billede fuskeren Nybegynder
16. februar 2005 - 13:03 #6
Thomas kom med en simpel kode "DoCmd.Quit" til afslut knappen, men bliver databasen komprimere og reparere ved denne kode? Jeg mener at det er den kode aom access selv opretter når man bruger knapværktøjet og laver an afslutknap.

Din kode jensen363, kan formodentlig både komprimere og reparere databasen. Er det korekt opfattet, at databasen kopieres og overskriver den gamle db ? Er det samme procedure der sker med din kode, som skre når man gennem access menuen komprimere og reparere.
Avatar billede jensen363 Forsker
16. februar 2005 - 13:07 #7
Function KomprimérData()

    CommandBars("Menu Bar"). _
    Controls("Funktioner"). _
    Controls("Databasefunktioner"). _
    Controls("Komprimer og reparer database..."). _
    accDoDefaultAction
   
End Function

udfører nøjagtigt det samme som via menufunktionen
16. februar 2005 - 13:10 #8
Ja, jeg skrev bare Docmd.Quit til at afslutte Access.
Men hvis du samtidig sætter egenskaben "Komprimer ved luk", så vil databasen altid blive komprimeret, når den lukkes og ingen yderligere kode er påkrævet.
Denne egenskab følger med databasen og har altså ikke noget med den enkelte brugers indstillinger at gøre.
Avatar billede fuskeren Nybegynder
16. februar 2005 - 13:27 #9
Jeg har store problemer med netværket her, så jeg afslutter spårgsmålet og fordeler point lige. Tak for hjælpen, jeg vil prøve de to løsninger.
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