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

Langage Delphi Discussion :

Problème d'héritage : Constructor parent non executé


Sujet :

Langage Delphi

  1. #1
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut Problème d'héritage : Constructor parent non executé
    Bonjour,

    j'ai un problème d'héritage avec delphi 2007

    Je m'explique j'ai développer un objet qui hérite d'un TADOQUERY ou d'un TQUERY, mai lors de la construction (inheritede create) delphi ne va pas dans le constructeur du tadoquery ou du Tquery.

    Ce que je ne m'explique pas c'est lorsque j'execute du code créer avec delphi 7 là il n'y a pas de problème, mais lors que j'execute depuis un code créer avec delphi 2007 boum ko

    Avez vous une idée

    merci

  2. #2
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Lorsque tu compiles le compilateur te donne des indications.

    Lit les, et transmet les nous pour voir.

    Probablement n'a tu pas rédéclarer le create avec la même signature ou au même niveau (public, protected, ...)
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    non tout est OK voila le code;

    en fait il s'agit d'un petite subtilite pour utiliser soit le BDE soit ADO, soit IB etc en fonction d'une diredtive de compile

    ce que je ne m'explique pas c'est pourquoi avec 2007 ça palnet alors qu'avec la version 7 il n'y a pas de pb


    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
     
    unit UQAYSQuery;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,DB,AdoDB,DBTables;
     
    type
      TAction=(None,Read,Write);
     
    //**************************************************
      TQAYSQueryBDE = Class(TQuery)
        private
            Session :TSession;
        Public
            Constructor Create (Aowner : Tcomponent);Virtual;abstract;
            Destructor  Destroy;Virtual;abstract;
     
            function    QKParamByName(const ValueA: string): TParameter;Overload;Virtual;abstract;
            Procedure   QKParamByName(ValueA: string;TypeValueA:TDataType;Value:Variant);Overload;Virtual;abstract;
            Procedure   QKParamById(ValueA: Integer;TypeValueA:TDataType;Value:Variant);Virtual;abstract;
            //******************************
        Published
      End;
    //**************************************************
      TQAYSQueryADO = Class(TAdoQuery)
        private
            AdoConnection:TAdoConnection;
        Public
            Constructor Create (Aowner : Tcomponent);override;
            Destructor  Destroy;override;
     
            function    QKParamByName(const ValueA: string): TParameter;overload;
            Procedure   QKParamByName(ValueA: string;TypeValueA:TDataType;Value:Variant);overload;
            Procedure   QKParamById(ValueA: Integer;TypeValueA:TDataType;Value:Variant);
            //******************************
        Published
      End;
     
    //**************************************************
      TQAYSQuery = Class(TQAYSQueryADO)
        private
            FAction:TAction;
            FFinData:Boolean;
            FNbOccurs:Integer;
            FNbCol:Integer;
        Public
            //******************************
            // Constructeur et destructeur
            //******************************
            Constructor Create (Aowner : Tcomponent);override;
            Destructor  Destroy;override;
            //******************************
            // Gestion SQL
            //******************************
            Function    QKExecute:TmodalResult;
            //******************************
        Published
            Property    Action : TAction Read FAction Write FAction;
            Property    FinData:Boolean Read FFinData Write FFinData;
            Property    NbOccurs:Integer Read FNbOccurs Write FNbOccurs;
            Property    NbCol:Integer Read FNbCol Write FNbCol;
      End;
    //**************************************************
    implementation
    //**************************************************
    //**************************************************
    Constructor TQAYSQuery.Create (Aowner : Tcomponent);
    begin
        inherited Create(Aowner);
    end;
    //**************************************************
    Destructor TQAYSQuery.Destroy;
    begin
        Inherited Destroy;
    end;
    //**************************************************
    //**************************************************
    Constructor TQAYSQueryADO.Create (Aowner : Tcomponent);
    var
    CnxString:String;
    begin
        inherited Create(Aowner);
     
        AdoConnection:=TAdoConnection.Create(nil);
        CnxString:= 'Provider=ADsDSOObject;'
                    +'Encrypt Password=False;'
                    +'Location=d:\bdd;'
                    +'Mode=Read;'
                    +'Bind Flags=0;'
                    +'ADSI Flag=-2147483648';
         ConnectionString     := CnxString;
         CursorLocation       := clUseServer;
         CursorType           := ctDynamic      ;
         LockType             := ltReadOnly   ;
         SQL.Clear;
     
         Connection := TADOConnection.Create(nil);
         Connection.LoginPrompt := True;
         Connection.ConnectionString := CnxString;
         Connection.Open;
         Connection.Connected;
     
    end;
    //**************************************************
    Destructor TQAYSQueryADO.Destroy;
    begin
        AdoConnection.Destroy;
        Inherited Destroy;
    end;
    //**************************************************
    Function TQAYSQuery.QKExecute:TmodalResult;
    begin
      Try
          if faction = Read then Self.Open
          else if faction = Write  then Self.ExecSQL;
          result := MrOk;
          FFinData :=Self.Eof;
          FNbOccurs := self.RecordCount;
          FNbCol:= self.FieldCount;
      Finally
          result := mrAbort;
      End;
    end;
    //**************************************************
    //**************************************************
    function   TQAYSQueryADO.QKParamByName(const ValueA: string): TParameter;
    begin
           result:=Parameters.ParamByName(ValueA);
    end;
    //**************************************************
    Procedure   TQAYSQueryADO.QKParamByName(ValueA: String;TypeValueA:TDataType;Value:Variant);
    begin
          Parameters.ParamByName(ValueA).Value     := Value;
    end;
    //**************************************************
    Procedure   TQAYSQueryADO.QKParamById(ValueA: Integer;TypeValueA:TDataType;Value:Variant);
    begin
          if not (TypeValueA=(FtMemo)) then
              Parameters[ValueA].Value:= Value
          else
              Parameters[ValueA].LoadFromFile(Value, ftMemo);
    end;
    //**************************************************
    //**************************************************
    end.

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    et comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      TQAYSQueryBDE = Class(TQuery)
        private
            Session :TSession;
        Public
            Constructor Create (Aowner : Tcomponent); override;
            Destructor  Destroy;Virtual;abstract;
      .....
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  5. #5
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    idem en fait si je met un point d'arrêt dans le constructor de TadoQuery ou du Tquery ce dernier n'est pas activé, ??????


    c'est comme si mon composant n'héritait pas du Tadoquery ou tquery

    ça va me rendre fou, surtout que je suis sur que c'est une bétise

    Qays

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 460
    Points : 24 874
    Points
    24 874
    Par défaut
    pour le destructeur et le constructeur c'est forcément override, je suppose que les virtual abstract n'était que des essais ... car il est clair, ça pouvait poser problème ...

    Ensuite, tu n'as oubliés AUCUN inherited ?
    Comment se fait l'instanciation ?

    Evite le AdoConnection.Destroy, lui préférant un AdoConnection.Free;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    tu as raison sur le abstract (c'était en attendant de continue) a priori pas d'oubli d'inherited (sauf erreur, ma là je ne vois pas)

    concernant instanciation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    buttonclick(sender.....)
    var
    QaysQuery:TQaysQuery;
    begin
           QaysQuery:=TQaysQuery.Create(nil);
    end;

  8. #8
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    encore plus fort,

    j'ai simplement créer un objet qui herite de la facon la plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      TQueryBDE = Class(TQuery)
        private
            Session :TSession;
        Public
     
            Constructor Create (Aowner : Tcomponent);Override;
            Destructor  Destroy;Override;
        Published
      End;

    construtor et appel
    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
     
     
    Constructor TQAYSQueryBDE.Create (Aowner : Tcomponent);
    begin
        Inherited Create(Aowner);
    end;
     
    Destructor  TQAYSQueryBDE.Destroy;
    begin
        inherited Destroy;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    lTQAYSlQueryBDE:TQAYSQueryBDE;
    begin
        lQAYSQueryBDE:=TQAYSQueryBDE.Create(nil);
        lQAYSQueryBDE.SQL.Add(':knlklklklklklk');
        lQAYSQueryBDE.Destroy;
     
    end;
    même résultat, je vais essayer chez moi avec la version 7 car je suis sur que c'est la version 2007 ou du moins la mienne qui m.....


    En fait j'ai aussi essayer avec un composant TStringGrid resultat Idem en faisant un clic sur la methode créate je tombe bien sur la me constructor de la stringgrid mais lors de l'execution oualou, il ne rentre pas dans le constructor, je pense vraiement que c'est la version qui est HS
    Qays

  9. #9
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    L'histoire du point d'arret qui s'active pas, c'est pas une question de debuggage désactivé ou de source de débuggage absent?
    Akim Merabet

  10. #10
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    je ne pense pas car les autres points d'arrets sont OK, deplus:

    1- Si je test une source générer par delphi 7 (c'est cela qui est fou) pas de problème, par contre si le code est générer par delphi 2007 alors KO.

    2- la propriété SQL et non initialisée et j'ai un plantage lorsque je fait l

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QAYSQueryBDE.SQL.Add(':knlklklklklklk');

    Je ne sais plus que faire, merci de votre aide et de vos conseils

  11. #11
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    j'ai testé ton unité et ca marche chez moi....
    Akim Merabet

  12. #12
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    avec la version 2007 ?

  13. #13
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    oui Delphi 2007 architect v11.0.2804.9245
    Akim Merabet

  14. #14
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    as tu repris le code tel quel,? as tu un plantage sur l'instruction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QAYSQueryBDE.SQL.Add(':knlklklklklklk');

    si tu as changé quelque chose, pourrais tu me dire quoi?

    mais pour tout t'avouer j'ai l'impression que la version que j'ai (celle fourni par ma boite au bureau) n'est pas claire, je vais creuser dans cette direction

    Merci

  15. #15
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    j'ai repris l'intégralité de la unite UQaysQuery

    et j'ai tapez ca dans mon projet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var
      qry: TQAYSQueryADO;
    begin
      qry := TQAYSQueryADO.Create(nil);
      qry.SQL.Add('select 1');
      try
        qry.Open;
      finally
        qry.Free;
      end;
    j'ai une erreur au niveau du open mais ca c'est normal.

    par contre j'ai également le soucis des points d'arrêt :\
    Akim Merabet

  16. #16
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    ca marche aussi avec TQAYSQuery

    et TQAYSQueryBDE pas tester car virtual abstract partout :\
    Akim Merabet

  17. #17
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    en fait je pense avoir trouvé, en fait avec le composant ADOQUEry le pb viens du SQL.ADD('XXXXXXXXXXXXXX');
    car avec le TQUERY c'est OK

    je continue les recherches

  18. #18
    Membre actif
    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
    Points : 225
    Points
    225
    Par défaut
    a y est j'ai trouvé, mais si vous avez une explication je suis preneur, car le problème n'est toujours pas réglé:

    en fait le problème vient de la ligne suivante:

    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
     
     
         FicParametrage:=TFicParametrage.Create;
         FicParametrage.FileName := ExtractFilePath(Application.ExeName)+'Param\param.ini';
         FicParametrage.action := read;
         FicParametrage.Section:= 'CONNECTIONSTRING';
         FicParametrage.Ident:= 'CnxStringADO';
         FicParametrage.TypeIdent:=IniString;
         CnxString := FicParametrage.Execute;
         FicParametrage.Destroy;
     
         'ConnectionString:= CnxString ;<== Cette ligne est responsable de l erreur' 
         CursorLocation := clUseServer;
         CursorType := ctDynamic		;
         LockType := ltReadOnly	;
     
         Close;
         SQL.Clear;
    en fait c'est quand j'initialise ConnectionString que j'ai le plantage avec

    QAYSQUERY.SQL.ADD('SELECT *********');
    mais pourquoi je ne le sais pas, c'est comme s'il y a avait un débordement

    Merci de vos conseils et de votre aide.
    QAYS

  19. #19
    Membre éclairé
    Avatar de nostroyo
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 168
    Points : 680
    Points
    680
    Billets dans le blog
    16
    Par défaut
    mais pourquoi je ne le sais pas, c'est comme s'il y a avait un débordement
    Tu as peut être mis le doigt sur quelque chose en disant cela, regarde les propriétés du projets dans l'option compilateur, et regarde 'Erreurs à l'exécution'.
    Cela ne résoudra pas ton problème mais expliquera peut être pourquoi ça marche chez toi et pas sous 2007.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/01/2015, 09h27
  2. [Oracle] problème d'accent : oci_execute() [function.oci-execute]: ORA-00911: caractere non valide
    Par diabli73 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/01/2011, 10h56
  3. [WS 2008] problème héritage dossier parent
    Par speedev dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 04/03/2010, 18h14
  4. [SQL] Problème de non-execution de requete
    Par Logann dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 18/12/2007, 12h00
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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