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

Composants VCL Delphi Discussion :

Démarrer un DataModule par programmation


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut Démarrer un DataModule par programmation
    Bonsoir, bonjour à toutes et à tous,

    J'ai l'habitude d'utiliser un DataModule, mais là j'ai une chose qui me turlupine dans la tête.

    Je créer un dataModule dans lequel je place un ADOcnx et dans l'évenement
    procedure MonModule.ADOCnxBeforeConnect(Sender: TObject);
    1) je recupere le chemin de la base
    2) Je me connect à ma MDB
    mais par contrainte technique je doit faire cela après le choix dans une form de ma form principal d'un dossier, une fois le choix effectué là je peux executer mon DataModule pas avant, parcqu'en fait je ne connais pas le chemin avant ce choix (je connais que le nom de la base MDB)

    Que dois-je faire ?
    - retirer la ligne dans mon DPR qui déclarait l'ouverture du datamodule, mais comment ensuite le créer ?
    - Ne rien faire, de toute façon l'évenement du AdoCnx n'ai pas lié à l'ouverture du Datamodule ?

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Un data module est un composant comme un autre.
    Vous pouvez le créer par l'ordre create.


    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Unit UMydataModule;
    interface
     
    uses
      Windows, etc ...;
    type
      TFMyDataModule = Class(TDataModule
    ....
      End;
    var
      FMyDataModule: TFMyDataModule;  <------------------------------- Important
    Implentation
    Votre code par défaut créer un paramètre FMyDataModule qui est le TFMyDataModule ouvert si vous créer le datamodule automatiquemen.

    S'il n'est pas créer vous pouvezle créer en faisant :

    UMydataModule.FMyDataModule := TFMyDataModule.Create(Application);

    Il est accesible de tous les unité contenant UMydataModule dans les clauses Uses.

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    si je comprend bien ton souci, l'évènement BeforeConnect de ton composant est appelé à l'ouverture de ton Datamodule car au moment de la conception tu as défini sa propriété Connected à True.
    ce que tu dois faire c'est de définir cette propriété là à False au moment de la conception. c'est dans ta form ou autre, que tu devras ouvrir la connexion à la BD, après avoir bien entendu défini les bons paramètres de connexion.

    non, tu n'as pas besoin de retirer la ligne qui déclare la création du datamodule dans ton DPR.
    euh, l'évènement n'est pas lié à l'ouverture du datamodule, puisqu'il survient à chaque fois que l'AdoConnection se connecte à une source de données. or puisqu'en mode conception tu as défini la propriété Connected du AdoConnection à True, lors de la création du datamodule il y a ouverture de la connexion et donc appel à l'évènement BeforeConnect.

    autre chose encore, si l'ouverture de tes XXtable et autres XXquery avait été fait en conception, il va falloir le faire manuellement par programmation maintenant

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Merci à vous,

    Evarisnea, je te remercie de tes remarques, effectivement j'ai mis la connection à False (adotable et Adoquery également) ce qui ne provoque aucun problème lors de l'execution du programme.
    En fait je recupère le lien de la mdb apres un choix dans une listbox, j'enregistre le lien + le nom de la base dans une variable globale appelée Base, qui elle même est utilisée dans l'evenement Onbefore de ADOConnection.
    Donc il n'y a aucun probleme de laisser effectivement la création du datamodule par le dpr puisqu'aucune ouverture n'intervient avant ce choix dans la listebox.
    Je te remercie Eva.

    Jean-françois, Merci pour ta démonstration je la garde de coté au cas où j'en aurais besoin.

    Je vous remercie à tous les deux. Vous m'avez bien aidés sur ma problématique.

    @Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment démarrer un serveur Interbase par programme ?
    Par Tiramakan dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/10/2007, 21h45
  2. Escamoter la barre Windows par programme
    Par Invité dans le forum Windows
    Réponses: 4
    Dernier message: 01/06/2004, 17h03
  3. [Foxpro]Connexion ODBC par programme
    Par Richard MORRISSEY dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 07/07/2003, 22h55
  4. Enregistrement du son par programme
    Par Invité dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2003, 00h13
  5. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 08h59

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