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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 423 fois - Téléchargée 34 fois

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

Ajouter un commentaire

Commentaires

Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

MERCI, je n'ai même pas eu besoin de chercher longtemps pour trouver une solution fonctionnelle.

Juste quelques remarques :
- La variable strConnectionString n'est pas utilisée
- La ligne
objJRO.GetType().InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, Nothing, oJRO, oParams)
est fausse, ce n'est pas "objJRO" mais "oJRO"
- La ligne
strLdbPath = Mid(pSource, 1, Len(pSource) - 3) & "ldb"
n'est pas très .NET, je lui préfère :
strLdbPath = pSource.Substring(0, pSource.Length - 3) + "ldb"

Et un 10/10 pour m'avoir aidé.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
utilises l'utilitaire JetComp (Microsoft)

il est gratuit, et répare les bases qui sont parfois, (et étrangement) défectueuses.
il est pilotable par ligne de commande.
Messages postés
85
Date d'inscription
mardi 6 janvier 2004
Statut
Membre
Dernière intervention
7 mai 2007

Salut

objJRO n'est pas declaré

en plus il faut posseder le JRO.JetEngine pour que sa marche

Quelqu'un a mieux?
Messages postés
6
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
19 mai 2006

Merci beaucoup c'est ce que je cherchais j'avais une base de donée trop volumineuse
:)))
Merci
Afficher les 7 commentaires

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.