begin process at 2008 07 04 00:57:37
1 204 456 membres
3 nouveaux aujourd'hui
14 114 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPACTER ET RÉPARER UNE BASE DE DONNÉES ACCESS


Information sur la source

Catégorie :Base de Donnees Source .NET ( DotNet ) Classé sous : compacter, access, réduire, réparer, repair Niveau : Initié Date de création : 04/01/2005 Date de mise à jour : 04/01/2005 13:51:00 Vu : 12 765

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

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

  • 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
 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
04 janvier 2005 13:51:04 :
-
  • signaler à un administrateur
    Commentaire de dragon le 04/01/2005 14:53:48

    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

  • signaler à un administrateur
    Commentaire de DocPhiphi le 16/02/2005 09:53:15

    GENIAL !!!!
    C'est exactement ce que je cherchais.
    Merci :-)))))))))))))))))

  • signaler à un administrateur
    Commentaire de kevin_prec le 19/05/2006 14:44:31

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

  • signaler à un administrateur
    Commentaire de Silmon le 30/01/2007 19:58:13

    Salut

    objJRO n'est pas declaré

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

    Quelqu'un a mieux?

  • signaler à un administrateur
    Commentaire de Renfield le 30/01/2007 21:09:52 administrateur CS

    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.

  • signaler à un administrateur
    Commentaire de Renfield le 30/01/2007 21:20:13 administrateur CS

    http://support.microsoft.com/kb/295334/fr

  • signaler à un administrateur
    Commentaire de NHenry le 07/05/2008 09:34:19 10/10

    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é.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS