Συμπύκνωση (Compact) Access database

Το παρακάτω κομμάτι κώδικα είναι τυπικό για την ενέργεια της συμπύκνωσης (compact) μίας Access database. Έχει διαμορφωθεί ως μία ρουτίνα που δέχεται ως παράμετρο το path της Βάσης, το path μίας temp (βοηθητικής) Βάσης που θα χρησιμοποιηθεί εσωτερικά καθώς και το password, αν έχει. Επειδή η VB.NET δεν έχει εγγενή υποστήριξη για συμπύκνωση (δεν την παρέχει ο OLEDB Data Provider) θα καταφύγουμε στην ActiveX βιβλιοθήκη Microsoft Jet and Replication Objects 2.1 ή 2.5, ή 2.6 Library. Έτσι θα δημιουργηθούν wrappers για την ActiveX. Θα προστεθούν, στον Solution Explorer, οι αναφορές ADODB (Interop.ADODB.dll) και JRO Engine (Interop.JRO.dll).

Για να προσθέσετε την αναφορά επιλέξτε menu Project --> Add Reference... --> πηγαίνετε στην καρτέλα CΟΜ και βρείτε την καταχώρηση Microsoft Jet and Replication Objects 2.1 ή 2.5 ή 2.6 Library.

Public Sub CompactDBFile(ByVal strFilePathDB$,_

 ByVal strTempFilePath$, _

 ByVal strDBPassword$)

Try

Dim objJRO As New JRO.JetEngine

'Διαγραφή πρώτα του temp DB file, αν υπάρχει.
If System.IO.File.Exists(strTempFilePath) = True Then

System.IO.File.Delete(strTempFilePath)

EndIf

'Κλήση στη μέθοδο CompactDatabase της μηχανής JRO.
if strDBPassword="" then

objJRO.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;
                        Data Source=" + strFilePathDB,
                       "Provider=Microsoft.Jet.OLEDB.4.0;
                       Data Source=" + strTempFilePath &
                                ";Jet OLEDB:Engine Type=5")

else

objJRO.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;
                        Data Source=" + strFilePathDB + ";
              Jet OLEDB:Database Password=" & strDBPassword,
                        "Provider=Microsoft.Jet.OLEDB.4.0;
                         Data Source=" + strTempFilePath +
            ";Jet OLEDB:Database Password=" & strDBPassword &
                         ";Jet OLEDB:Engine Type=5")

EndIf

'Μεταφορά του συμπυκνωμένου tempDB στο κανονικό DB.
System.IO.File.Delete(strFilePathDB)
System.IO.File.Move(strTempFilePath, strFilePathDB)

objJRO = Nothing

Catch ex As Exception

MsgBox("Δεν μπορώ να κάνω συμπύκνωση του αρχείου : " & strFilePathDB &
           vbCrLf & vbCrLf & ex.Message, MsgBoxStyle.Exclamation,
                                                 "
Συμπύκνωση αρχείου")

End Try

End Sub


To παραπάνω παράδειγμα αφορά μία Access database με format 2000 (Jet 4.0) και μεταγενέστερο.

Δύο παραδείγματα κλήσης :

CompactDBFile("C:\ΠΕΛΑΤΟΛΟΓΙΟ.mdb", "C:\ΠΕΛΑΤΟΛΟΓΙΟ.mdb.tmp","")

ή

CompactDBFile("C:\ΠΕΛΑΤΟΛΟΓΙΟ.mdb", "C:\ΠΕΛΑΤΟΛΟΓΙΟ.mdb.tmp","chris68")

 

·         Χρήστος Μουρατίδης