IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Compresser une base de donn�es *.mdb sans Access


Sujet :

C++Builder

  1. #1
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut Compresser une base de donn�es *.mdb sans Access
    Bonjour � tous,

    Je souhaite compresser une base de donn�es Access sans que Access soit install� sur le poste, donc directement avec Jet Engine.

    J'ai trouv� ce code chez nos parrains Delphynautes mais je suis incapable de l'adater � C++, donc si vous avez des id�es...:

    function CompactAccessDB(DB, MdP : string): Boolean; {DB = path complet de la base Access, MdP = password de la DB }
    // Ajouter ComObj dans les Uses
    var
    v: OLEvariant;
    begin
    Result := False;
    try
    v := CreateOLEObject('JRO.JetEngine');
    try
    if CopyFile(PAnsiChar(DB),PAnsiChar(DB+'.bak'),False) then //backup de la base
    begin
    V.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+';Jet OLEDB: Database Password='+MdP,
    'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'comp'+';Jet OLEDB: Database Password='+MdP); //compactage
    DeleteFile(DB);// suppression de la base d'origin
    RenameFile(DB+'comp',DB); // mise en place de la base compact�e
    Result := True;
    end;
    finally
    V := Unassigned;
    end;
    except
    Result := False;
    end;
    end;

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    J'ai trouv� cette page, mais pareil impossible � impl�menter :

    http://support.microsoft.com/kb/230501/EN-US/

  3. #3
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Salut Fbartolo:
    Un lien dans la FAQ Access, je pense qu'il faut utiliser Ole
    Je viens de me rendre compte qu'il faut Access

  4. #4
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Merci Blondel, avec le composant XP Application Access, cela fonctionne, mais moi je souhaite me passer d'access comme le fait ADO d'ailleurs.

    Le code Delphy le fait bien semble t-il via JRO (donc avec le moteur Jet directement), mais je ne suis pas arriv� � l'impl�menter en C++

  5. #5
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    J'ai commence a traduire je te donne ce qui est fait:
    le norceau de code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // ne pas oublier d'inclure
    // #include <comobj.hpp>
    // #include <utilcls.h>
    Variant v;
    unsigned char * DB;
    unsigned char * DB_BAK;
    unsigned char * Mdp;
    DB = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\UtilisationBDE\\fichiers\\maBdd\\maBdd1.mdb";
    DB_BAK = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\UtilisationBDE\\fichiers\\maBdd\\maBdd1.bak";
    Mdp = "";
    v = CreateOleObject("JRO.JetEngine");
    if (CopyFile(DB, DB_BAK, false))
    {
    v.OleFunction("CompactDatabase");
    }
    Je cree un fichier .Bak pour la fonction "CompactDatabase" je n'ai pas encore trouve.

  6. #6
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Oui bien vu, sans soute quelque chose comme:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    v.OleFunction("CompactDatabase",Provider1,Provider2);
    ou
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    v.OleProcedure("CompactDatabase",Provider1,Provider2);
    a tester donc...

  7. #7
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    J'en suis a ceci mais j'ai une exception
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    v.OleFunction("CompactDatabase", "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = DB;Jet OLEDB:Database Password = Mdp","Provider = Microsoft.Jet.OLEDB.4.0;Data Source = DB_comp;Jet OLEDB:Database Password = Mdp");

  8. #8
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Idem exeption...

  9. #9
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Merci Blondel pour ton aide pr�cieuse.

    Ci dessous en exemple le r�sultat qui fonctionne et en plus c'est hyper rapide:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    void  CompactDatabase(AnsiString Base1, AnsiString psw1, AnsiString Base2, AnsiString psw2)
    {
     
    	   AnsiString  Provider1=	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Base1 + ";Password =" + psw1;
    	   AnsiString  Provider2=	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Base2 + ";Password =" + psw2;
     
    	   Variant  v=Variant::CreateObject("JRO.JetEngine");
    	   v.OleFunction("CompactDatabase",  Provider1.c_str(), Provider2.c_str());
     
    	  v = Unassigned;
    }
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    		 AnsiString  Base1="C:\\Documents and Settings\\Fernand Bartolo\\Dev\\Testxxxxxx\\Iris.mdb";
    		 AnsiString  psw1="";
     
    		 AnsiString  Base2="C:\\Documents and Settings\\Fernand Bartolo\\Dev\\Testxxxxxx\\Test.mdb";
    		 AnsiString  psw2="";
     
     
    		 if  (FileExists(Base2))
    				 DeleteFile(Base2);
    		 CompactDatabase(Base1,psw1,Base2,psw2);
    		 ShowMessage("OK!!");
    }
    //---------------------------------------------------------------------------

  10. #10
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    C'est super je suis comptant pour toi, je pense que le code devrait etre propose pour la FAQ.

  11. #11
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Je pense qu'il faut remplacer v.Clear( ); par v = Unassigned; comme dans la Doc Delphi.

  12. #12
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    D'apr�s ce que j'ai pu lire c'est la m�me chose.

    J'ai v�rifi� avec CodeGuard, il n'y a pas de fuite m�moire (m�me en enlevant la ligne consern�e).

    Mais je pense que ta solution est plus adapt�e car document�e, je modifie de suite.

    Merci

  13. #13
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut Une petite merveille!
    Excellent code!

    Merci!

    ciao

    antoine

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Comment ouvrir une base vide avec OleADO sans Access
    Par blondelle dans le forum C++Builder
    R�ponses: 12
    Dernier message: 06/03/2007, 13h34
  2. Comment cr�er une base utilisable sur PC sans ACCESS
    Par lesalloues dans le forum Runtime
    R�ponses: 4
    Dernier message: 22/08/2006, 14h52
  3. Connexion � une base de donn�es mysql via access
    Par eautret dans le forum Access
    R�ponses: 2
    Dernier message: 07/04/2006, 10h02
  4. Peut-on manipuler une base de donn�e oracle sans oracle
    Par sillycoder dans le forum Oracle
    R�ponses: 8
    Dernier message: 19/01/2006, 09h00
  5. compresser une base de donn�e
    Par mic79 dans le forum PostgreSQL
    R�ponses: 2
    Dernier message: 23/02/2005, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo