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. #1
    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 Executer une procédure Access sous C++Builder
    Bonjour,

    sur une application j'utilise une base de donnée Access, dans Access j'ai fais une procédure écrite dans un module.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub update()
    ....
    ....
    ....
    ....
    End Sub
    Maintenant, dans mon programme je veux lancé l'execution de cette procédure "update()". comment le faire svp.


    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    C'est très compliqué; en général c'est l'inverse que l'on fait : des modules ou plug-ins en C++ qui sont appelés sous Access.
    Sinon il faut créer un lien OLE/Automation sur Access , accéder aux objets qui permettent d'exécuter des méthodes de modules de classe.
    Il faut prendre l'aide VBA voir la hiérarchie des objets...
    Le mieux vraiment c'est de déporter les traitements d'Access vers C++, Access ne servant qu'à stocker et trier les données via SQL

  3. #3
    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, mais la procédure stockée dans access sert à mettre à jour la base de données (tables) depuis un serveur de données.

    Comment le faire même si c en utilisant le pilotage ole.

    @+

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par kmaniche
    Ok, mais la procédure stockée dans access sert à mettre à jour la base de données (tables) depuis un serveur de données.

    Comment le faire même si c en utilisant le pilotage ole.

    @+
    ? Impossible de faire des procédures stockées dans Access

  5. #5
    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 Mat.M
    ? Impossible de faire des procédures stockées dans Access
    Non, mais ma procédure est enregistrée dans un module sous access, et je cherche à l'executer à partir de c++Builder. peut importe, par ole, ou autre chôse.

    merci de m'aider svp.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par défaut
    Je ne répondrai pas à ta question car je n'ai pas la réponse. Je peux toutefois te donner un conseil: pose cette question sur le forum Delphi et Base de Données, tu auras peut-être plus de renseignement car leur forum est spécialisé dans ce domaine.

    Ce qui est codé en delphi peut-être en général recodé en c++.

    Bon courage.

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par kmaniche
    Non, mais ma procédure est enregistrée dans un module sous access, et je cherche à l'executer à partir de c++Builder. peut importe, par ole, ou autre chôse.

    merci de m'aider svp.
    D'abord employons la même terminologie : procédure=requête SQL ?

  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
    Ce sujet m'interresse aussi.

    Pour l'instant via ADO on peut avoir accès aux tables et aux requêtes présentes dans le fichier Access.

    L'accès à des modules fonctionnels déclarés Public peuvent être intéressant, dans mon cas il sagit de faire cohabiter deux compétances afin de garantir des délais de réalisation du projet (avec migration complète ensuite pour ne garder que la base de données sur Access et être portable sur d'autres SGBD).

    Donc je suis aussi preneur de solutions

  9. #9
    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
    il ne manque que la solution.
    Dans mon cas, cette procedure à pour objectif de faire la mise à jour des tables, et execute une requêtte de création de table.

    Si dans le cas ou l'on ne peut pas lancer un procedure dans Access depuis C++Builder, quel serai la solution.

  10. #10
    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
    Pour la requête tu peux l'exécuter avec une vue Dataset dessus (vu comme une table), tu lance une commande Text Sql Select et ta requête access va s'éxécuter.

    Pour la partie module, je ne sais pas.

  11. #11
    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
    Tiré de la FAQ Delfi:

    Pour exécuter une macro d'access à partir de Delphi, il faut ajouter un composant AccessApplication (Palette Serveurs) et utiliser le code suivant :
    (*On ouvre d'abord la base.
    Le second paramètre spécifie si nous désirons ouvrir la table en mode exclusif ou non*)
    AccessApplication1.OpenCurrentDatabase('d:\essai.mdb',False);
    //On exécute la macro
    AccessApplication1.DoCmd.RunMacro('Macro1.MaMacro',emptyparam,emptyparam);

  12. #12
    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
    Bonjour,

    J'ai réutilisé ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AccessApplication1->OpenCurrentDatabase(AnsiString("E:\\MDB\\GD.mdb").c_str(),false);
    AccessApplication1->DoCmd->RunMacro("Macro1.MaMacro",NULL,NULL);
    Mais, il me génère une erreur de compilation :
    Build
    E2034 Impossible de convertir 'char *' en 'tagVARIANT'
    E2342 Mauvaise correspondance de type dans le paramètre 'MacroName' ('tagVARIANT' désiré, 'char *' obtenu)
    E2034 Impossible de convertir 'int' en 'tagVARIANT'
    E2342 Mauvaise correspondance de type dans le paramètre 'RepeatCount' ('tagVARIANT' désiré, 'int' obtenu)
    E2034 Impossible de convertir 'int' en 'tagVARIANT'
    E2342 Mauvaise correspondance de type dans le paramètre 'RepeatExpression' ('tagVARIANT' désiré, 'int' obtenu)
    Si quelqu'un peut nous aider à resoudre ce problème, il est le bien venu.

    Merci d'avance.

  13. #13
    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:
    Une idee comme cela.
    Si OleAcess se gere comme OleExcel, il est preferable de declarer avant ton chemin de fichier.
    Essaye de lancer la Macro comme ci dessous et verifie que les parametres NULL ne doivent pas etre a Unassigne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AnsiString vFilename;
    vFilename = "E:\\MDB\\GD.mdb";
    AccessApplication1->OpenCurrentDatabase(vFilename.c_str(),false);
    AccessApplication1->DoCmd->RunMacro("Macro1", "MaMacro", NULL, NULL);
    Bon courage.
    A+

  14. #14
    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
    Meci "blondelle",

    Toujour la même erreur.

    Il sagit d'un pointeur sur un wchar_t.

    j'ai essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wchar_t *p="monchemin" ;
    mais ça toujour le même problème.

    A suivre...

  15. #15
    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
    un exemple sous excel pour les variant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Variant vFileName, vXLWorkbooks, vXLWorkbook;
     
    vFileName = "c:\\Home\\Sources\\Cpp\\Test\\Excel\\classeur1.xls";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName);

  16. #16
    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
    Je pense que la solution de "Blondelle" est presque bonne.
    Reste toutefois la convertion en wchar_t*

    Une question:
    Comment déclarer un variable de type wchar_t* et l'initialisée avec ce que l'on veux. ?

    Merci de nous aider.

  17. #17
    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 fait une recherche dans VBAccess, les commandes qui ont ete passe par Fbartolo sont du VBAccess il faut trouver comment les transformer en OleAccess ca ne va pas etre facile de trouver des exemples.

  18. #18
    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 blondelle
    J'ai fait une recherche dans VBAccess, les commandes qui ont ete passe par Fbartolo sont du VBAccess il faut trouver comment les transformer en OleAccess ca ne va pas etre facile de trouver des exemples.
    A mon avie, si je ne me trompe pas, c'est du DELPHI.

  19. #19
    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
    Citation Envoyé par Fbartolo
    un exemple sous excel pour les variant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Variant vFileName, vXLWorkbooks, vXLWorkbook;
     
    vFileName = "c:\\Home\\Sources\\Cpp\\Test\\Excel\\classeur1.xls";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName);
    Non non c'est bien sous BCB..

  20. #20
    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
    Non, mais je fesai référence à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /*On ouvre d'abord la base.
    Le second paramètre spécifie si nous désirons ouvrir la table en mode exclusif ou non*/
    AccessApplication1.OpenCurrentDatabase('d:\essai.mdb',False);
     
    //On exécute la macro
    AccessApplication1.DoCmd.RunMacro('Macro1.MaMacro',emptyparam,emptyparam);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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, 10h36
  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, 11h51
  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, 20h51
  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, 17h27
  5. Pb pour executer une procédure sous SQL PLUS
    Par rabddoul dans le forum Oracle
    Réponses: 4
    Dernier message: 21/10/2005, 15h40

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