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

Lazarus Pascal Discussion :

Problème avec un TDBLookupComboBox [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut Problème avec un TDBLookupComboBox
    Salut à tous

    J'avais déjà eu un souci avec TDBLookupComboBox que je pensais avoir réglé mais il est revenu en force

    Voilà le problème :
    J'ai une base (MySQL) avec 2 tables.
    La première table contient un champ qui est une référence vers la seconde et j'utilise le TDBLookupComboBox pour afficher la signification de cette référence qui est dans la seconde table.

    Table1
    • Nom --> varchar
    • Nationalite --> int (ma référence)

    Table2
    • RefNation --> int
    • NomNation -->varchar


    Si je mets la propriété LookupCache à la valeur vrai, la signification de ma référence s'affiche mais si je change la valeur, j'ai l'erreur suivante :
    Project TestBase.exe raised exception class 'EVariantInvalidArgError' with message Invalidargument:Int64
    Si je mets la propriété LookupCache à la valeur faux, la signification de ma référence ne s'affiche plus. Mais le changement de valeur se fait moyennant un Post.

    Si quelqu'un a une idée ???
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  2. #2
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Bonjour

    J'ai le même problème, qui est par ailleurs franchement agaçant quand on vient du monde Delphi. Sous Delphi, le composant standard DBLookupCombobox fonctionne mal lui aussi mais le composant Jedi équivalent fonctionne très bien.

    En ce qui concerne Lazarus, j'ai constaté que l'affectation du champ sous-jacent est effective mais l'affichage de la signification est défaillant.

    J'ai pensé dans un premier temps à un problème lié au support des variant mais cela n'explique pas le bon fonctionnement de l'affectation du champ sous-jacent. J'ai exploré cette piste car le problème lié au support des variant existe dans la fonction Locate où il faut convertir les valeurs Int64 en string sinon la fonction échoue. Je pense qu'il y a là-dessous des bugs assez vicieux. L'emploi de clé de type String semble fonctionner correctement mais cela n'est pas satisfaisant.

    Pour l'instant je n'ai pas eu le temps de creuser plus le problème, il va falloir analyser le contenu des bibliothèques, c'est pas cool.

    Avez-vous eu des pistes de solutions depuis ??
    Mon environnement technique : Lazarus 0.9.30 + Zeos Lib + Firebird 2.1.3. En outre toute mes clés primaires sont en Int64.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    La solution provisoire que j'ai trouvée est de mettre mes clefs étrangère en smallint au lieu de int et là ça marche.
    Je pense qu'il y a un problème d'identification de type.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Bonsoir

    C'est pas cool et on peut vite atteindre les limites...
    J'ai peut-être trouvé une solution avec les composants Rx pour Lazarus mais il faut faire quelques adaptations, il y a des incohérences entre le code des composants et ceux la LCL.

    Si cela s'avère concluant, on pourra en reparler.

    @+

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Attention avec le rxdblookup qui traine sur internet pour Lazarus car il est plus que bancal et le code très exotique.....

    Prudence donc

    Cordialement,
    Chris

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Hi men,

    J'ai essayé plusieurs versions de la Rx Lib pour Lazarus, pas moyen, c'est trop bordélique il faudrait passer son temps à corriger les problèmes de compilation (version LCL Base ...)

    J'ai donc passer outre et je suis revenu à une solution plus simple : l'analyse du code des librairies standards de celles de la Zeos Lib et j'ai peut-être trouvé une solution. J'ai identifié et corrigé (enfin je l'espère) un bug dans l'unité ZVariants de ZEOS. Il s'agit d'un problème de directives qui entraîne un mauvais traitement de variants Int64.

    A priori, sous réserve de tests plus poussés, la correction n'impacte que la routine suivante (mon correctif est mis en évidence) :
    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
    function DecodeVariant(const Value: Variant): TZVariant;
    begin
      case VarType(Value) of
        varSmallint, varInteger, varByte:
          DefVarManager.SetAsInteger(Result, Integer(Value));
        varBoolean: DefVarManager.SetAsBoolean(Result, Value);
        varString:
          DefVarManager.SetAsString(Result, Value);
        varSingle, varDouble, varCurrency:
          DefVarManager.SetAsFloat(Result, Value);
        varUnknown: DefVarManager.SetAsInterface(Result, Value);
        varOleStr:
          DefVarManager.SetAsUnicodeString(Result, Value);
        varDate: DefVarManager.SetAsDateTime(Result, Value);
    {$IFNDEF VER130BELOW}
        varShortInt, varWord, varLongWord:
          DefVarManager.SetAsInteger(Result, Value);
        varInt64: DefVarManager.SetAsInteger(Result, Value);
    {$ELSE}
        //E#B 06/2011
        varInt64: DefVarManager.SetAsInteger(Result, Value);
    {$IFNDEF FPC}
        VT_DECIMAL {varInt64 in Delphi/C++Builder 5}:
        DefVarManager.SetAsInteger(Result, Decimal(Value).lo64);
      {$ENDIF}
    {$ENDIF}
        else DefVarManager.SetNull(Result);
      end;
    end;
    Les premiers tests menés sont concluants, la signification apparaît bien
    Il me faut vérifier si cela corrige le bug de la fonction Locate.

    Je rappelle que cela ne prévaut que pour les applications qui exploitent la ZeosLib (6.6.6 en ce qui me concerne).

    Si vous portez cette correction dans vos oeuvres, merci de faire part de vos résultats.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Je teste dès que possible
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Ok,

    Le bug du locate est corrigé par la meme occasion, j'ai testé. J'en ai profité pour simplifier mon code en supprimant le code de contournement.
    Que du bonheur !

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Bien j'ai fait le test ça fonctionne.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

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

Discussions similaires

  1. [Lazarus] Problème avec une TDBLookupComboBox
    Par Gouyon dans le forum Lazarus
    Réponses: 2
    Dernier message: 03/03/2010, 11h02
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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