Συμπύκνωση (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")
·
Χρήστος
Μουρατίδης