Ce code permet de compacter et réparer une base de données Access.
Ce code n'est pas entièrement de moi, c'est une traduction du code C# de Alexander Youmashev que vous pourrez trouvé sur le site
http://www.codeproject.com/cs/database/mdbcompact_latebind.asp.
Il faudra utiliser l'espace de nom :
Imports System.IO
Source / Exemple :
Public Function CompactAndRepair(ByVal dbPath As String, ByVal tmpFolder As String) As Boolean
'Declaration
Dim strConnectionString As String
Dim oParams() As Object
Dim oJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))
Dim strLdbPath As String
'Checked that database exist
If Not File.Exists(dbPath) Then
'File not found
Return False
End If
'Checked that database is not open
strLdbPath = Mid(dbPath, 1, Len(dbPath) - 3) & "ldb"
If File.Exists(strLdbPath) Then
'Database is open
Return False
End If
'Compact and repair
Try
oParams = New Object() {"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";Jet OLEDB:Engine Type=5", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tmpFolder & "~tempdb.mdb;Jet OLEDB:Engine Type=5"}
objJRO.GetType().InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, Nothing, oJRO, oParams)
File.Delete(dbPath)
File.Move(tmpFolder & "~tempdb.mdb", dbPath)
Runtime.InteropServices.Marshal.ReleaseComObject(oJRO)
oJRO = Nothing
Return True
Catch ex As Exception
Return False
End Try
End Function
Conclusion :
L'appel à cette fonction se fera de la manière suivante :
dim strFilePath, strFileName as string
strFilePath="C:\"
strFileName="MyDatabase.mdb"
if CompactAndRepair(strFilePath & strFileName,strFilePath) then
msgbox "Success"
else
msgbox "Error - Cannot compact db"
end if
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.