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 : 15 787

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
 

Historique

04 janvier 2005 13:51:04 :
-

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

peut -on réparer une base access 2000 (DAO ne marche pas) [ par steph ] j'ai essayé avec repairDatabase mais cette option ne supporte pas access 2000 ! Pour les pros seulement (Compacter une BD Access 2000) [ par Wardall ] J'ais besoin d'un coup de main:- J'ai voudrais savoir comment compacter une BD Microsoft Access 2000.-Je sais comment faire avec Microsoft 97 mais la Réparer base Access [ par Chrystelle ] Bonjour,Est il possible de réparer une base Access, est ce qu'il y a quelque chose dans Access qui le permet ?Merci Pbme pour réparer une base Access [ par Chrystelle ] J'ai le code suivant : DBEngine.RepairDatabase (BDname)BDname reçoit le chemin de ma base en .mdb, j'ai vérifié.Quand je lance la procédure j'ai le me Pbme pour réparer une base Access [ par Chrystelle ] J'ai le code suivant : DBEngine.RepairDatabase (BDname)BDname reçoit le chemin de ma base en .mdb, j'ai vérifié.Quand je lance la procédure j'ai le me réparer une base access 2000 sous vb [ par namor21 ] avec jet 3.51 on utilise dbengine.RepairDatabase(<nom base>) mais cette commande ne passe pas avec jet 4.0 donc utiliser dbengine.CompactDataba Compacter une base access 2002 [ par beabea ] Bonjour,j'essaie de compacter une base access 2002 en ADO. J'ai écrit le code en déclarant le JRO.et quand je veux compacter, un message me dit que la Compacter une base Access [ par olanfr ] Bonjour,Quelqu'un aurait il un exemple de code vb.Net pour compresser une base Ms Access ?D'avance merciOlan Réparer une base Access [ par gandalflegris007 ] Bonjour a tous, je m'adresse à vous car j'ai un GROS soucis avec une base de données Access97. En fait, pour être clair, je viens de COMPACTAGE BD ACCESS [ par multipac ] Bonjour,Y a t-il quelqu'un qui peut m'aider comment compacter une base de données ACCESS en VB6.Sachant que j'utilise une base volumineuse, et j'


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.