Avatar billede jensen363 Forsker
02. november 2004 - 10:48 Der er 17 kommentarer og
1 løsning

Komprimering af åben database

Jeg bøvler fortsat med en database som vokser voldsomt ifbm. dataimport via Citrix.

Er nu gået igang med omstrukturering af hele sql-koden, som afvikles i 14 moduler/step

Step 1 varetager sletning af data
Step 2 og 3 varetager import af nye oplysninger
Step 4 varetager databerigelse o.s.v.

Jeg har behov for at komprimere databasen imellem step 1 og 2

Kan dette lade sig gøre ?
Avatar billede rbj_fp Nybegynder
02. november 2004 - 10:50 #1
Er det inde i selve access du vil gøre det? eller er det fra et program?
Avatar billede jensen363 Forsker
02. november 2004 - 10:51 #2
Det hele foregår i Access
Avatar billede rbj_fp Nybegynder
02. november 2004 - 11:06 #3
CommandBars("Menu Bar"). _
Controls("Tools"). _
Controls("Database utilities"). _
Controls("Compact and repair database..."). _
accDoDefaultAction

Dette kode virker fint... Det komprimere databasen(Det kan dog være at Navnet på controls'ne skal ændres hvis du bruger en dansk access
Avatar billede rbj_fp Nybegynder
02. november 2004 - 11:12 #4
glemte at skrive at denne kode kun fungere fra access 2000 og frem efter
Avatar billede jensen363 Forsker
02. november 2004 - 11:38 #5
Det er jo en fornøjelse ... :o)

Takker
Avatar billede rbj_fp Nybegynder
02. november 2004 - 11:41 #6
Det var så lidt
Avatar billede jensen363 Forsker
02. november 2004 - 11:43 #7
Var måske en anelse hurtig på aftrækkeren ... den kan godt nok afvikles selvstændigt, men ikke sammen med den øvrige modulkode ...
Avatar billede jensen363 Forsker
02. november 2004 - 13:38 #8
Øhhhh ... har du en metode hvormed den kan afvikles indeni en eksisterende modulkode ??

Løsningen som den er nu, er uanvendelig
Avatar billede rbj_fp Nybegynder
02. november 2004 - 13:47 #9
Mens man kører VBA/makro kan man ikke compacte den samme database.
Avatar billede jensen363 Forsker
02. november 2004 - 13:49 #10
Se det vidste jeg jo i forvejen ... :o) ...
Det er jo derfor løsningen er uanvendelig ...
Avatar billede rbj_fp Nybegynder
02. november 2004 - 13:52 #11
Jeg havde nok valgt at skrive kode til at indsætte data i databasen via en VB applikation, syntaxen er næsten lige som VBA og der kan man netop anvende alle mulighederne for komprimere databasen.
Avatar billede jensen363 Forsker
02. november 2004 - 13:56 #12
Men arbejdsgiver accepterer ikke andre udviklingsapplikationer :o(
Avatar billede rbj_fp Nybegynder
02. november 2004 - 14:02 #13
Så bør du prøve at lave en løsning, hvor alt data og tabler ligger i 1 fil, mens alt kode ligger i en anden access-fil.

Og så bør du kigge på funktionen compactRepair i VBA
Avatar billede terry Ekspert
02. november 2004 - 20:19 #14
You can use this to compact another dBFunction 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
Avatar billede rbj_fp Nybegynder
03. november 2004 - 07:27 #15
Virker den funktion også hvis man kører kode fra den samme Database?
Avatar billede terry Ekspert
03. november 2004 - 19:05 #16
I dont think so
Avatar billede terry Ekspert
08. november 2004 - 19:43 #17
Avatar billede rbj_fp Nybegynder
09. november 2004 - 08:18 #18
Godt link der, Terry :-)  Det burde få løst jensens problemer.
Det er dog træls at microsoft har været så usmarte at man ikke kan kompimere en åben DB
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