Compacter et réparer une base de données access

Contenu du snippet

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

A voir également

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.