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

Delphi Discussion :

Directive de compilation et composant


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 696
    Par défaut Directive de compilation et composant
    Bonjour,

    J'ai créé une Unit qui me permet de me connecter à différents type de base de données (paradox, firebird, access, as400, sqlserver etc...) pour ce faire j'ai créer des objets qui hérite d'objet Tquery, TadoQuery,Tibquery etc...

    Pour me permettre de gérer tout cela j'ai des directives de compilation.
    cf une partie du 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
     
    uses  UBDDQRY;
    {$DEFINE B_PDX}
    //{$DEFINE B_ACCESS}
    //{$DEFINE B_IB}
    //{$DEFINE B_EXPRESS}
    type
    {$IFDEF B_ACCESS}
    MY_T_QUERY     = MY_TADO_QUERY;
    {$ENDIF}
     
    {$IFDEF B_PDX}
    MY_T_QUERY = MY_TBDE_QUERY;
    {$ENDIF}
     
    {$IFDEF B_IB}
    MY_T_QUERY     = MY_DBIB_QUERY;
    {$ENDIF}
    {$IFDEF B_EXPRESS}
    MY_T_QUERY
    ce mode de fonctionnement me permet de limiter la modification de mon code lorsque je change de base de donnée, en effet il existe quelques différence pour certaines fonctions ou propiètés entre les composants TADOQUERY,TQUERY,TIBQUERY etc...
    par exemple :
    pour TADOQUERY : ADOQUERY.Parameters[Indice].Value = '111111'
    pour TQUERY : QUERY.Params[Indice].Value= '111111'
    pour TIBQUERY : IBQUERY.Params[Indice].value = '111111'

    Je remplace tout par MyQUERY.My_Parameter[Indice].Value= '111111'
    où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function My_Parameter (.....)
    begin
    {$IFDEF B_ACCESS}
      ADOQUERY.Parameters[Indice].Value = '111111'
    {$ENDIF}
     
    {$IFDEF B_PDX}
      QUERY.Params[Indice].Value= '111111'
    {$ENDIF}
     
    {$IFDEF B_IB}IBQUERY.Params[Indice].value = '111111'
    {$ENDIF}
    end
    Maintenant je souhaite créer un composant (que je vais placer dans une palette).

    je souhaite donc créer une proprièté, une constante, un paramêtre que sais-je (dans mon composant MY_QUERY) qui me permettrais en fonction de la valeur avoir le même résulat que la directive de compile.

    J'espère avoir été clair !
    Cordialement
    Qays.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par QAYS
    J'espère avoir été clair !
    Sur ton besoin oui sur le code présenté pas vraiment
    Si tu places un membre sur un composant le compilateur n'y a pas accés en tant que directive, ce n'est pas possible. C'est soit l'un soit l'autre.

    Par contre que ton éditeur créer un fichier d'inclusion {$I MaDirective.inc} c'est peut être possible mais là à mon avis tu fais de la cascade

    En .NET l'usage d'attribut aurait peut être pu t'aider et encore.

    Ce n'est pas ta conception de départ qui serait à remettre en cause ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    696
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 696
    Par défaut
    Bonjour,

    Merci pour cette contribution, je vais tentez de reformuler la question et le code pour que vous puissiez vor plus précisément ce que je tente de créer( mais plus tard).

    PS: Ce mode de gestion est aujourd'hui opérationnelle (depuis + de 4 ans) et en plus mes dev et évolutions sont plus rapides (changement de base de données, de lecture de base etc...)

    Merci de votre réponse.
    Cordialement
    Qays

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par QAYS
    PS: Ce mode de gestion est aujourd'hui opérationnelle (depuis + de 4 ans) et en plus mes dev et évolutions sont plus rapides (changement de base de données, de lecture de base etc...)
    Je n'en doute pas une seconde, ce que je voulais dire c'est que tu atteins peut être les limites d'évolution de ta solution.

    Il se peut que ce que tu souhaites faire nécessite d'utiliser un pré-processeur.

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

Discussions similaires

  1. Directives de compilation (globales ?)
    Par korntex5 dans le forum Langage
    Réponses: 6
    Dernier message: 24/10/2005, 14h13
  2. Compilation des composants Indy 10
    Par rconty dans le forum C++Builder
    Réponses: 23
    Dernier message: 13/07/2005, 15h48
  3. Compilation de composant auto-référent
    Par sovitec dans le forum Composants VCL
    Réponses: 3
    Dernier message: 15/06/2005, 18h45
  4. directive de compilation
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/02/2005, 10h46
  5. Directives de compilations.
    Par ushu dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 10h44

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