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 :

Transtypage variant integer [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Transtypage variant integer
    Bonjour à toutes et à tous.
    J'ai encore besoin de vous, et ce ne sera pas la dernière fois!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      Requete_Coupon.SQL.Text := 'INSERT INTO s_ent.t_j_coupon_cpn (cpt_id, act_id, cpn_nombre, cpn_montant, cpn_date, cpn_unique) ';
      Requete_Coupon.SQL.Add('VALUES (:COMPTE, :VALEUR, :NOMBRE, :MONTANT, :DATE, :UNIQUE);');
      Requete_Coupon.Params.ParamByName('COMPTE').AsInteger := Fiche_Accueil.Compte;
      Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := DBLCB_Valeur.KeyValue;
      Requete_Coupon.Params.ParamByName('NOMBRE').AsInteger := StrToInt(Edition_Nombre.Text);
      Requete_Coupon.Params.ParamByName('MONTANT').AsFloat := StrToFloat(Edition_Montant.Text);
      Requete_Coupon.Params.ParamByName('DATE').AsDate := StrToDate(Edition_Date.Text);
      Requete_Coupon.Params.ParamByName('UNIQUE').AsBoolean := CB_Unique.Checked;
    Après la pose d'un point d'arrêt sur la ligne 1, c'est la ligne numéro 5 qui renvoie une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := DBLCB_Valeur.KeyValue;
    DBLCB_Valeur.KeyValue renvoie un variant que je n'arrive pas à transtyper en un integer ne connaissant pas l'unité renfermant la commande VarToInt. Est-ce que son utilisation résoudra mon problème?
    Merci d'avance pour votre aide, Michel.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    Citation Envoyé par Miflon Voir le message
    Après la pose d'un point d'arrêt sur la ligne 1, c'est la ligne numéro 5 qui renvoie une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := DBLCB_Valeur.KeyValue;
    DBLCB_Valeur.KeyValue renvoie un variant que je n'arrive pas à transtyper en un integer ne connaissant pas l'unité renfermant la commande VarToInt. Est-ce que son utilisation résoudra mon problème?
    Merci d'avance pour votre aide, Michel.
    Quel est le message d'erreur parce que moi avec le code suivant je n'ai pas d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var leVariant: Variant;
    var lEntier: Integer;
    begin
    leVariant := 2021;
    lEntier :=  leVariant;
    end;
    Sinon on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lEntier :=  Integer(leVariant);
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci de ta réponse l'ami.
    Voici le message d'erreur :
    Could not convert variant of type (NULL) into type (Int64)
    Press OK to ignore and risk data corruption
    Press abort to kill the program
    L'utilisation de :
    integer(DBLCB_Valeur.KeyValue)
    provoque la même erreur.
    En codant en dur tous les paramètres de la requête
    Requete_Coupon.Params.ParamByName('SSSSS').AsInteger := N;
    l'insertion se fait correctement.
    Michel.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Bonsoir,

    Il faut peut-être alors tester le cas null pour lui attribuer une valeur par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if VarIsNull(DBLCB_Valeur) then
      Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := Valeur_Entiere_par_defaut
    else
      Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := DBLCB_Valeur.KeyValue;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci tourlourou pour ta réponse.
    J'ai fait précéder la requête par les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      boxstyle :=  MB_OK;
      Application.MessageBox(PChar(IntToStr(Fiche_Accueil.Compte)), 'Numéro compte', boxstyle);
      Application.MessageBox(PChar(IntToStr(DBLCB_Valeur.KeyValue)), 'ID Valeur', boxstyle);
      Application.MessageBox(PChar(Edition_Nombre.Text), 'Nombre', boxstyle);
      Application.MessageBox(PChar(Edition_Montant.Text), 'Montant', boxstyle);
      Application.MessageBox(PChar(Edition_Date.Text), 'Date', boxstyle);
      if CB_Unique.Checked then Application.MessageBox(PChar('Oui'), 'Unique', boxstyle)
      else Application.MessageBox(PChar('Non'), 'Unique', boxstyle);
    Toutes les données s'affichent correctement et notamment
    DBLCB_Valeur.KeyValue
    Donc la requête est bien alimentée par des paramètres non 'null', provenant du TDBLookupComboBox, des 3 TEdit et du TCheckBox .
    Je continue d'investiguer, Michel.

  6. #6
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Bon dimanche à toutes et à tous.
    Comme suggéré par J.P., je suis passé par une variable intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      var VV : Variant;
      V : integer;
    VV := DBLCB_Valeur.KeyValue;
      V := VV;
    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete_Coupon.Params.ParamByName('VALEUR').AsInteger := V;
    et cela fonctionne!
    Je pensais que le transtypage fonctionnait directement. Les voies du Pascal sont-elles impénétrables? Enfin, pour moi seulement?
    Merci à toutes et à tous pour votre aide omniprésente. Protégez-vous bien, masque, gel, vaccination et rappels.
    Michel.

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

Discussions similaires

  1. [XL-2010] 2012 n'est pas égal a 2012, problème de type: integer vs variant
    Par halaster08 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2016, 09h02
  2. comment comparer un variant à un integer?
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 18/10/2006, 13h15
  3. Réponses: 9
    Dernier message: 06/04/2006, 20h00
  4. [Delphi 7] Transtypage d'un pointer objet vers un integer
    Par raoulmania dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h28
  5. Transtypage d'un variant.
    Par Lodonez vincent dans le forum Langage
    Réponses: 4
    Dernier message: 02/09/2004, 19h42

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