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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 835 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

cs_dragon
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
3 -
ouin.... t'avais pas a aller aussi loin, j'avais déjà poster une source sur le compactage de base de donnée access en VB6.0

la seule différence avec mon code est que tu utilises InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, Nothing, oJRO, oParams)

et moi une référence a access et j'appel compactdatabase de la référence. Je crois pas qu'il y a une façon plus rapide que l'autre
DocPhiphi
Messages postés
42
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 novembre 2008
-
GENIAL !!!!
C'est exactement ce que je cherchais.
Merci :-)))))))))))))))))
kevin_prec
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
Silmon
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?
Renfield
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
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.

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.