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 :

Executer une procédure Access sous C++Builder


Sujet :

C++Builder

  1. #21
    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
    La Macro1 avec le nom MaMacro est elle deja presente dans ta base Access.

  2. #22
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Oui, mais sous le nom de Update()
    Pièce jointe 7480

  3. #23
    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 sais ouvrir Access et charger la base, je ne sais pas s'il faut utiliser < #include <utilcls.h> >, je ne l'ai pas fait.
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant vMSAccess;
    vMSAccess = Variant::CreateObject("Access.Application");
    vMSAccess.OlePropertySet("Visible", true);
    Variant vFileName;
     
    // ouverture d'une table Access
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\UtilisationBDE\\fichiers\\maBdd\\maBdd1.mdb";
     
    vMSAccess.OleFunction("OpenCurrentDatabase", vFileName, false);
    }
    Je cherche pour lancer la macro.

  4. #24
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    J'ai repris ton code, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Variant vMSAccess;
    vMSAccess = Variant::CreateObject("Access.Application");
    vMSAccess.OlePropertySet("Visible", true);
    Variant vFileName;
     
    // ouverture d'une table Access
    vFileName = "E:\\MDB\\GDO.mdb";
     
    vMSAccess.OleFunction("DoCmd.RunMacro \"update\", false, false");
    il me manque la façon de faire l'appel

  5. #25
    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
    Comme je ne connais pas Access, et que je n'ai aucune Doc, je n'arrive pas a programmer une Macro pour tester, je te donne donc le code pour ouvrir et fermer Access charger ta base, la je suis sur que cela fonctionne, pour lancer la Macro a voir?
    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant vMSAccess;
    vMSAccess = Variant::CreateObject("Access.Application");
    vMSAccess.OlePropertySet("Visible", true);
    Variant vFileName;
     
    // ouverture d'une base Access
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\UtilisationBDE\\fichiers\\maBdd\\maBdd1.mdb";
    vMSAccess.OleFunction("OpenCurrentDatabase", vFileName, false);
    // ici la base est chargee dans Access
     
    // AccessApplication1.DoCmd.RunMacro('Macro1.MaMacro',emptyparam,emptyparam);
    vMSAccess.OlePropertyGet("DoCmd").OlePropertySet("RunMacro", "essai"); // les parametres NULL sont optionnels
     
    // fermeture d'Access
    vMSAccess.OleProcedure("CloseCurrentDatabase"); // on ferme la base
    vMSAccess.OleFunction("Quit"); // on quitte Access
    // liberation memoire
    vMSAccess = Unassigned;
    }

  6. #26
    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 reussi avec Access 2003 a ouvrir Access charger une base executer une macro integree a la base fermer la base quitter Access.
    le 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
    17
    18
    19
    20
    21
    22
    23
     
    // je ne suis pas sur mais au cas ou ne pas oublier #include <utilcls.h>
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant vMSAccess;
    vMSAccess = Variant::CreateObject("Access.Application");
    vMSAccess.OlePropertySet("Visible", true);
    Variant vFileName;
     
    // ouverture d'une table Access
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\MySQL\\UtilisationBDE\\fichiers\\maBdd\\maBdd1.mdb";
    vMSAccess.OleFunction("OpenCurrentDatabase", vFileName, false);
     
    // executer la macro
    vMSAccess.OleProcedure("Run", "essai");
     
    // fermeture d'Access
    vMSAccess.OleProcedure("CloseCurrentDatabase"); // on ferme la base
    vMSAccess.OleFunction("Quit"); // on quitte Access
    // liberation memoire
    vMSAccess = Unassigned;
    }

  7. #27
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Merci pour vos efforts.

    1- J'ai créé une nouvelle base de données, sauvée dans c:\\mabd.mdb
    2- Créé une macro "Macro1" comme action j'ai fait: BoitMsg ,
    elle affiche juste une boite de dialogue // comme ShowMessage.

    J'ai executer les deux solutions que tu as proposé :

    Pour la première solution, il me génère une exception : Membre introuvale ??
    pour la deuxième solution, il me génère une exception : EOleSysError ???

    Je ne comprend pas tout cela .


    Merci encore une fois "Blondelle"

  8. #28
    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
    A tu essaye ta macro directement dans Access.
    Sur quelle ligne se situe l'erreur.
    Je joind la base avec la macro qui affiche une boite de dialogue

  9. #29
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    OK j'ai trouver mon erreur.
    voici le code final :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    //
    // DECLARATION
    //
       Variant vMSAccess,  // Application ACCESS
                 vFileName;   // Nom de la base de données
     
    //
    // LANCEMENT DE MS ACCESS : en arrière plan
    //
       vMSAccess = Variant::CreateObject("Access.Application");
       vMSAccess.OlePropertySet("Visible", false);
     
    //
    // OUVERTURE DE LA BASE DE DONNES
    //
       vFileName = "C:\\maBdd1.mdb";
       vMSAccess.OleFunction("OpenCurrentDatabase", 
                                        vFileName, 
                                        false);
     
    //
    // EXECUTION DE LA PROCEDURE :: ESSAI
    //
       vMSAccess.OleProcedure("Run", "essai");
     
    //
    // FERMETURE DE LA BASE DE DONNEES
    //
       vMSAccess.OleProcedure("CloseCurrentDatabase"); 
     
    //
    // FERMETURE DE MS ACCESS
    //
       vMSAccess.OleFunction("Quit"); 
     
    //
    // LIBERATION DE LA MEMOIRE
    //
       vMSAccess = Unassigned;
    Ce code sert pour executer une procédure stockée dans Access, implémentée dans un module.

    MERCI "BLONDELLE"

  10. #30
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Supposons que l'on veux executer une macro, comment-faire.
    j'ai fais ceci :

    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
    28
    29
    30
    31
    32
    33
    34
     
    //
    // LANCEMENT DE MS ACCESS : en arrière plan
    //
       vMSAccess = Variant::CreateObject("Access.Application");
       vMSAccess.OlePropertySet("Visible", false);
     
    //
    // OUVERTURE DE LA BASE DE DONNES
    //
       vFileName = "C:\\maBdd1.mdb";
       vMSAccess.OleFunction("OpenCurrentDatabase", 
                                        vFileName, 
                                        false);
     
    //
    // EXECUTION DE LA MACRO:: Macro1
    //
       vMSAccess.OleProcedure("RunMacro", "Macro1");
     
    //
    // FERMETURE DE LA BASE DE DONNEES
    //
       vMSAccess.OleProcedure("CloseCurrentDatabase"); 
     
    //
    // FERMETURE DE MS ACCESS
    //
       vMSAccess.OleFunction("Quit"); 
     
    //
    // LIBERATION DE LA MEMOIRE
    //
       vMSAccess = Unassigned ;
    Mais sans succé !!

  11. #31
    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 kmaniche:
    Je suis tres content pour toi que cela marche.
    vMSAccess.OleProcedure("RunMacro", "Macro1");
    Pour pouvoir te repondre je suis alle faire un tour sur la FAQ Access, il y a des commandes qui ne fonctionnent que pour Access 97, "RunMacro" refuse de fonctionner en Access 2003? quand a appeler Macro1 dans Access, a voir comment c'est concu Macro1 semble correspondre a Module1 (en Excel), et un Module peut contenir plusieurs procedures, d'ailleurs la fonction RunMacro demande la Macro puis la procedure puis deux parametres Null (facultatifs).
    Pour ecrire la Procedure VBAccess j'ai galere, je ne connais pas Access, et je n'ai aucun document sur son fonctionnement, l'essentiel est d'avoir trouve une solution de depannage.

  12. #32
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Merci encore une fois,

    Alors je fais

  13. #33
    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
    Ce qui est dommage c'est qu'il faut access sur le poste, contrairement à OLEDB pour l'accès aux requêtes et tables.

    Merci pour vos recherches.

    Je pense que certaines solutions pourraient aller en FAQ

  14. #34
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par Fbartolo
    Ce qui est dommage c'est qu'il faut access sur le poste, contrairement à OLEDB pour l'accès aux requêtes et tables.

    Merci pour vos recherches.

    Je pense que certaines solutions pourraient aller en FAQ
    Ben oui, et tout ça grace à BLONDELLE

  15. #35
    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
    Fbartolo a écrit :
    Ce qui est dommage c'est qu'il faut access sur le poste, contrairement à OLEDB pour l'accès aux requêtes et tables.

    Merci pour vos recherches.

    Je pense que certaines solutions pourraient aller en FAQ
    C'est propose a la FAQ comme il n'existe rien pour gerer Access avec BCB c'est un debut.

  16. #36
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonsoir,

    Histoire de mise au point,

    Comment dois-je faire si ma base de donnée été protégée par mot de passe.

    Merci "Blondelle"

  17. #37
    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
    kmaniche a ecrit:
    Bonsoir,

    Histoire de mise au point,

    Comment dois-je faire si ma base de donnée été protégée par mot de passe.
    Sans garantie car je ne connais pas Access et je n'ai pas de DOC dans la FAQ access j'ai trouve ca.
    Il est possible d'intégrer le mot de passe au code lors de l'ouverture de la base de données :
    Dim db as Dao.DataBase

    Set db = DBEngine.OpenDatabase("C:\MaBase.mdb", False, False, ";pwd=password")

    'Effectuer le traitement sur la base de données ici.

    db.Close
    Je pense donc que le code devrait ressembler a ca.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Variant password;
    password = "MotDePasse";
    vMSAccess.OleFunction("OpenDatabase", vFileName, false, false, password);

  18. #38
    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 trouve dans l'aide une autre facon qui correspond a la facon qui avait servi au debut pour lancer ton appli.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vMSAccess.OleFunction("OpenCurrentDatabase", vFileName, false, password);

  19. #39
    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
    Peut tu me dire si les fonction d'ouverture de fichier proteges fonctionnent.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Lecture d'une table Access sous C++ Builder 6
    Par guiling dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/06/2010, 11h36
  2. executée une procédure stockée depuis access 97
    Par sandmil dans le forum Access
    Réponses: 1
    Dernier message: 12/07/2007, 12h51
  3. Executer une procédure Access sous Delphi
    Par kmaniche dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/12/2006, 21h51
  4. [VBA-E]Execution d'une macro access sous excel VBA
    Par virtualinsanity dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 21/04/2006, 18h27
  5. Pb pour executer une procédure sous SQL PLUS
    Par rabddoul dans le forum Oracle
    Réponses: 4
    Dernier message: 21/10/2005, 16h40

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