Avatar billede juks Novice
13. juni 2002 - 12:46 Der er 44 kommentarer og
2 løsninger

compact and rep. runction

Hej,
Hvordan kan man lave en funktion i access , hvor kan komprimere og rep. den back-end man er tilknyttet til. Den skal kunne virker i en runtime version
Avatar billede itbjarne Nybegynder
13. juni 2002 - 13:09 #1
Dette virker fra VB - måske kan det bruges ?
(Fik jeg lige fra Terry, så måske kan jeg snige mig nogle points til her på hans bekostning ;-)

Dim JRO    As New JetEngine
'  To compact MDB databases using ADO, just include a reference to the
'  'Microsoft Jet and Replication Objects 2.6 Library'
'  Tried out on 2.5 lib and worked as well.
JRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\laptop\vb\Compact_Access_DB_VB5\sysmon.mdb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\laptop\vb\Compact_Access_DB_VB5\new_db.mdb"
Avatar billede terry Ekspert
13. juni 2002 - 13:10 #2
I was too slow there i can see>well you need th epoints there itbjarne :o)
Avatar billede juks Novice
13. juni 2002 - 13:12 #3
den opretter en ny db eller ?
Avatar billede terry Ekspert
13. juni 2002 - 13:20 #4
Yes it does then you have to delete the original and re-name the new.
Avatar billede terry Ekspert
13. juni 2002 - 13:20 #5
Hey itbjarne>If you want points you have to palce an ANSWER :o)
Avatar billede terry Ekspert
13. juni 2002 - 13:23 #6
Something else>You may get problems trying to compact your backend dB IF it is LINKED form your frontend. It has to be opened in EXCLUSIVE mode I would think!
Avatar billede itbjarne Nybegynder
13. juni 2002 - 13:27 #7
Actually, I think the credit should go to you, Terry, as I just copied your answer. I guess we also have to have a bit of fairness here ;-)
Avatar billede juks Novice
13. juni 2002 - 13:33 #8
front-end er lokalt instaleret ???
og der er når back-enden crasher(hver 2. dagen) og der kun kan logge 1 bruger at denne funktion skal kunne bruges
Avatar billede terry Ekspert
13. juni 2002 - 13:44 #9
Hey itbjarne one thing I have learnt since I started working as a programmer is pinch as much code as you can, why make it yourself if it already exists? So I so NOTHING wrong with you using my example, after all I gave it to you :o)
Avatar billede hugopedersen Nybegynder
13. juni 2002 - 13:53 #10
Avatar billede terry Ekspert
13. juni 2002 - 13:53 #11
juks>With this solution a copy of the original database is made. It is then necessary to delete the original and then re-name the new. IF the tables are LINKED then deleting the original will more than likely be a problem.
Avatar billede terry Ekspert
13. juni 2002 - 13:58 #12
take a look at this link http://www.mvps.org/access/modules/mdl0020.htm
If you look at the VB code you will see that the Current db gets closed BEFORE the actual compact takes place then it gets opened again when its all finished. This is actually what Access does when you compact FROM within Access. You should be able to pinch ( itbjarne take NOTE :o) ) som ecode from here.
Avatar billede juks Novice
13. juni 2002 - 14:58 #13
hugo .....
jeg for godt nok mange fejl når jeg kører dit modul
den 1.
--------------
    If FileLen(avarUniqueDBs(lngI)) < fhpGetDiskFreeSpace(avarUniqueDBs(lngI)) Then
----------
error = "sub or function not defined"
Avatar billede fynbohans Nybegynder
13. juni 2002 - 15:33 #14
Makroer er ofte en nem og hurtig løsning!
Man kan faktisk under KørKommando vælge KomprimerDatabase.
Avatar billede susanne_larsen Nybegynder
13. juni 2002 - 15:50 #15
>>fynbohans

se lige her http://www.eksperten.dk/spm/220813

sorry jeg spammer :D
Avatar billede juks Novice
13. juni 2002 - 17:13 #16
fynbohans------- hvis du kan må du gerne sende mig en løsning
help@mail.dk
Avatar billede fynbohans Nybegynder
13. juni 2002 - 17:27 #17
Måske vil andre også gerne se det  .....

Under Makroer vælg Ny.
Handling: KørKommando.
Kommando: Klik på den blanke linje og vælg KomprimerDatabase.
Gem makroen som f.eks. "Komprimer".

Kør makroen i VBA med DoCmd.RunMacro "Komprimer".
Avatar billede terry Ekspert
13. juni 2002 - 18:01 #18
yes but does that compact the BACKEND database too? I dont think so!
Avatar billede juks Novice
13. juni 2002 - 18:15 #19
lige mine ord Terry
Avatar billede juks Novice
13. juni 2002 - 18:16 #20
tror heller ikke du kan kører en VBA kode mens du komprimere ??????
Avatar billede terry Ekspert
13. juni 2002 - 18:24 #21
I am sure that the link I gave earlier will do the trick
http://www.mvps.org/access/modules/mdl0020.htm
Avatar billede terry Ekspert
13. juni 2002 - 18:25 #22
Avatar billede juks Novice
13. juni 2002 - 18:36 #23
iam on it terry ?
just got one more database to fix now .......
Avatar billede terry Ekspert
13. juni 2002 - 18:38 #24
Try this: Make a new form and place a button on it named cmdCheckup
Then copy this into the form and change the path and file name to the name of the BACKEND dB

Private Sub cmdCheckup_Click()

    ' Do the actual work
On Error GoTo cmdCheckup_Err

    Dim db As Database
    Dim ws As Workspace
    Dim strDB As String
    Dim strLDB As String
    Dim strNewDB As String

    strDB = "C:\temp\yourdb.mdb"

    ' First, check to make sure we can get to the database exclusively
    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(strDB, True)

    'Next, whack the locking file
    strLDB = Left$(strDB, Len(strDB) - 3) & "LDB"
    Kill strLDB

    ' Repair the database
    db.Close
    DBEngine.RepairDatabase strDB

    ' Compact the database
    strNewDB = Left$(strDB, Len(strDB) - 1) & "N"
    DBEngine.CompactDatabase strDB, strNewDB

    ' Kill the old database
    Kill strDB

    ' And rename the new one
    Name strNewDB As strDB

   
cmdCheckup_Exit:
    Exit Sub

cmdCheckup_Err:
    Select Case Err
        Case 3356  ' Couldn't open exclusively
            MsgBox "The file is open on another machine. Cannot complete checkup. Please close and try again."
        Case Else
            MsgBox "Error " & Err & ": " & Error$, 16, "Call Programmer"
    End Select
    Resume cmdCheckup_Exit
End Sub
Avatar billede hugopedersen Nybegynder
14. juni 2002 - 07:06 #25
juks> jeg må nok erkende at der nok er funktioner i den kode jeg sendte/viste der er afhængig af andre moduler fra http://www.hugopedersen.dk/access/
Det var jeg ikke lige opmærksom på - beklager.
Jeg bruger selv funktionen i flere af mine kørende applikationer og jeg er derfor sikker på at det virker.
Avatar billede terry Ekspert
15. juni 2002 - 10:34 #26
juks>whats the status on this question?
Avatar billede juks Novice
18. juni 2002 - 14:02 #27
jeg har ikke haft tid til at teste den endnu , men jeg tror det virker men hvordan finder man ud automatisk hvor tabellerne er linked til (altså stien)
Avatar billede terry Ekspert
18. juni 2002 - 14:34 #28
You can see the connection string of your linked tables with this code

Dim db As Database
Dim tdf As TableDef
Dim sConnect As String


    Set db = CurrentDb
   
    With db
        For Each tdf In .TableDefs
            Debug.Print "Connect String: " & tdf.CONNECT
                       
        Next tdf
   
    End With
Avatar billede juks Novice
21. juni 2002 - 11:14 #29
terry , jeg kan sagtens bruge den kode du lavet til mig pånær..
'Next, whack the locking file
de her to ----

    strLDB = Left$(strDB, Len(strDB) - 3) & "LDB"
    Kill strLDB

    ' Repair the database
    db.Close
    DBEngine.RepairDatabase strDB
--------
den kan ikke finde ldb'en
og den funktion repairdatabase "understøttes ikke for denne object type"
Avatar billede terry Ekspert
21. juni 2002 - 12:38 #30
LDB file is created when you the database it holds infromation about those using the database. Normally when the LAST user leaves the database the LDB file will be removed. But if an error occurs the file may still exist, therefore this line!
If the file doesnt exist then you cant delete it!

Not sure what you mean with "understøttes ikke for denne object type"
is it an error you get when you run this line?

DBEngine.RepairDatabase strDB

what about ?

DBEngine.CompactDatabase strDB, strNewDB
Avatar billede hugopedersen Nybegynder
21. juni 2002 - 12:52 #31
Jeg mener at kunne huske at DBEngine.RepairDatabase ikke er understøttet af Access 2000 - eller er jeg helt galt på den her.
Avatar billede juks Novice
21. juni 2002 - 12:53 #32
understøttes ikke for denne object type" is the error i recive when i try running the code..
DBEngine.CompactDatabase strDB, strNewDB
works perfekt`!!
Avatar billede terry Ekspert
21. juni 2002 - 13:01 #33
Try making a reference to DAO
Avatar billede juks Novice
22. juni 2002 - 10:11 #34
jeg har også prøvet dao det virker sku heller ikke  men er det ikke nok kun at komprimere ?
kan man ikke tjekke om LDB eksitere og hvis ikke så spring kil ldb over.
Avatar billede terry Ekspert
22. juni 2002 - 20:19 #35
Hi juks>Your question was you wanted a "compact and rep. function".

If you dont want to repair then dont! You could also make two functions, one for compacting and one for repairing.
Avatar billede hugopedersen Nybegynder
24. juni 2002 - 06:58 #36
Som jeg tidligere har 'påstået', så virker DBEngine.RepairDatabase ikke i Access 2000 - kan det ikke være det der er dit problem?
Avatar billede terry Ekspert
24. juni 2002 - 08:19 #37
Hi Hugo!Access uses ADO, but making a reference to DAO should solve this problem.
Avatar billede hugopedersen Nybegynder
24. juni 2002 - 08:22 #38
Note  The RepairDatabase method is no longer available, but listed for backwards compatibility. Use the CompactDatabase method instead.

Dette er taget direkte fra hjælpefilen til Access 2000 !
Avatar billede juks Novice
26. juni 2002 - 10:38 #39
takker
Avatar billede terry Ekspert
26. juni 2002 - 10:58 #40
selv tak:o)
Avatar billede juks Novice
27. juni 2002 - 12:27 #41
kan man ikke tjekke om LDB eksitere og hvis ikke så spring kil ldb over.
Avatar billede hugopedersen Nybegynder
27. juni 2002 - 12:49 #42
Hvis du bruger min metode ( som godt nok bruger mere kode ) så behøver du ikke bekymre dig om ldb filen for funktionen checker om du kan åbne databasen eksklusivt og så er det intet problem.
Avatar billede juks Novice
27. juni 2002 - 12:57 #43
´ja men din version lavede en masse fejl , og dit link var en link til gennerelle downloads
Avatar billede hugopedersen Nybegynder
27. juni 2002 - 13:04 #44
Det der er 'problemet' i det er at rutinen kalder andre funktioner der findes til download på den nævnte side.  Desværre har jeg ikke en udgave der ligger bare i et modul.
Avatar billede juks Novice
27. juni 2002 - 13:22 #45
nej men hvor ligger de moduler på siden der er jo mange at vælge imellem.
Avatar billede hugopedersen Nybegynder
27. juni 2002 - 13:28 #46
Jeg kan dårligt huske det, men moddbutilities.bas og modformutilities.bas bliver i hvert fald brugt.
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