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

Connexion aux bases de données Firebird Discussion :

IBQuery + IBUpdateSQL + BOOLEAN Erreur à l'affection d'une valeur TRUE


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut IBQuery + IBUpdateSQL + BOOLEAN Erreur à l'affection d'une valeur TRUE
    Bonjour,

    J'ai un problème avec les champs de type BOOLEAN et IBUpdateSQL où la mise à jour d'un booléen provoque une exception.

    - Je crée un IBQuery
    - Je crée un IBUpdateSQL attaché au IBQuery
    - Dans IBUpdateSQL.ModifySQL je rentre la chaîne:
    UPDATE R_REG SET
    F_PREGID=:F_PREGID, ... , F_FG_COMPMUL=:F_FG_COMPMUL
    WHERE F_REGID=:F_REGID
    où le champ F_FG_COMPMUL est défini BOOLEAN dans la table.
    - je définis les TxxField dont un TBooleanDataField lié à F_FG_COMPMUL
    - et un TDbCheckBox lié au TBooleanDataField

    En lecture, tout va bien, le CheckBox reflete bien l'état du champ.

    En écriture:
    - si le CheckBox n'est pas coché, dans le SQL produit la valeur est transmise comme un 0 (zéro) et ça passe.
    - si le CheckBox est coché, la valeur transmise est -1 et j'obtient une erreur "arithmetic exception, numeric overflow, or string truncation"

    en exécutant pas à pas je vois que le problème est dans IBQuery.349 dans TIBQuery.SetParams où:
    case ....
    ftBoolean, ftSmallint, ftWord:
    SQLParams[i].AsShort := Params[i].AsSmallInt;

    la propriété AsSmallInt convertit un variant booléen TRUE en SmallInt = -1.

    Serais-je le premier à avoir utilisé IBQuery + IBUpdateSQL + Champ booléen !
    Sinon, ça me dépannerai bien de savoir comment faire.

    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
    Bonjour,

    Les champs BOOLEAN n'existe pas.
    Regarde plutôt dans Delphi la valeur des propriétés ValueUnchecked et Valuechecked de ton TDBCheckBox.

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    si, si les champs booleans existent bien avec la version d'interbase que j'utilise, 7.5. Je ne sais pas ce qu'il en est avec d'autre, ni avec Firebird.

    Cordialement

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    bonjour

    pourquoi ne pas utiliser un champ de type integer ? en général les propriétés qui n'ont que 2 états au début du projet, terminent souvent avec 3 ou 4 états (les combinaisons)

    ex :
    Client Fournisseur
    0 0
    0 1
    1 0
    1 1
    @+

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    bonjour

    pourquoi ne pas utiliser un champ de type integer ? en général les propriétés qui n'ont que 2 états au début du projet, terminent souvent avec 3 ou 4 états (les combinaisons)
    parce que je pensais pouvoir utiliser simplement un DbCheckBox qui est fait pour ça.
    J'ai contourné le problème en excluant les champs booleans de la requête UpdateSQL, puis dans OnUpdateRecord j'exécute une seconde requête qui envoie les booleans. Un peu tiré par les cheveux quand même

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    tu peux utiliser un TDBCheckBox avec un integer

    il suffit de renseigner les propriétés

    ValueChecked = 1
    ValueUnchecked = 0
    @+

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    tu peux utiliser un TDBCheckBox avec un integer
    Ok, ça marche. J'ai fait l'essai avec un champ CHAR(1) plutôt qu'un integer, car les propriétés ValueChecked et ValueUnchecked sont de type string.
    Mais la solution ne me satisfait pas complètement car l'editeur doit savoir que ce champ n'est pas à interpréter en tant que CHAR mais en tant que Boolean.

    Par contre ton idée, m'en donne une autre. Laisser le champ en boolean et agir à l'ouverture du IBQuery, détécter le champ de type booleen et dans ce cas créer des TStringField ou lieu des TBooleanField. J'essaye ...

    Cordialement

  8. #8
    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
    Oui
    ou faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select cast(Mon_Boolean as smallint) as Mon_Boolean, champ2, ...
      from ...
    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    SELECT cast(Mon_Boolean AS smallint) AS Mon_Boolean, champ2, ...
    FROM ...
    C'est l'inverse que je cherche à faire. D'ailleurs j'avais pensé à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE .... VALUES ... CAST(:Field AS BOOLEAN)
    qui provoque une erreur de syntaxe sur CAST

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    euh stop, je t'assure que si tu met un champ en integer sur un tdbcheckbox et que dans l'editeur de propriété du dbcheckbox tu met valuechecked a 1 et valueunchecked a 0 ça marche pas besoin de faire un char(1)
    @+

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Oui, c'est bien ce que je disais:
    - soit avoir un champ numérique, transtypé au SELECT
    - soit avoir un champ Boolean, transtypé au UPDATE.
    mais aucun n'est possible dans les circonstances

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    J'ai réglé mon problème de la façon suivante:
    - les champs booleans sont des Char
    - au moment d'afficher le champ dans un TDbGrid je teste si c'est un Char(1) et j'y associe un TDbCheckBox avec ValueChecked := '1' et ValueUnchecked := '0'.

    un peu tordu quand même.

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

Discussions similaires

  1. [WD18] Erreur d'affectation sur une variable numérique.
    Par PointCarreJo dans le forum WinDev
    Réponses: 3
    Dernier message: 06/10/2014, 17h19
  2. erreur d'affectation d'une variable
    Par Myth_Titans dans le forum C++
    Réponses: 3
    Dernier message: 05/07/2006, 21h51
  3. [VB]erreur à la récupération d'une valeur d'un dictionnaire
    Par amelhog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/02/2006, 12h06
  4. erreur '' n'est pas une valeur entière correcte
    Par ffxlenoir dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2005, 13h57
  5. Réponses: 5
    Dernier message: 18/11/2005, 22h11

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