Compacter une base ACCESS avec VB

Gilles - 14 sept. 2001 à 10:26
 soaz - 14 sept. 2001 à 15:51
J'utilise une base ACCESS qui grossi à chaque acces que je fais avec un programme VB et il arrive une limite où la base est trop grosse.
Selon microsoft c'est normal, il faut réguliérement compacter la base pour effacer les traces de tous les accès. (pour exemple : actuellement elle fait près de 600 000Ko et si je la compacte, elle ne fait plus que 800Ko)

Comment peut-on faire pour compacter la base ACCESS à partir d'un programme VB?
Cela me permettrait de l'automatiser à un moment où elle n'est pas accédée.

1 réponse

Avec JRO référence à msjro.dll
Public Function CompressDatabase(mSourceDB As String, ByVal sPassWord As String) As Boolean
On Error GoTo CheckErr
Dim JRO1 As JRO.JetEngine
Set JRO1 = New JRO.JetEngine
Dim srcDB As String
Dim destDB As String
srcDB = mSourceDB
destDB = "backup.mdb"

JRO1.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & srcDB & ";Jet OLEDB:Database Password=" & sPassWord, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & destDB & ";Jet OLEDB:Database Password=" & sPassWord & ";Jet OLEDB:Engine Type=4"

Kill srcDB

DoEvents
Name destDB As srcDB
CompressDatabase = True
Exit Function
CheckErr:
CompressDatabase = False
End Function

Avec DAO
If Len(sMotPasse) > 0 Then
sPasswordString = ";pwd=" & sMotPasse
Else
sPasswordString = ""
End If


DBEngine.CompactDatabase sFileNameAndPath, _
sFileNameComp, , , sPasswordString
où sFileNameComp est le chemin complet de la base compactée.
La base d'origine n'est pas compactée
0
Rejoignez-nous