|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Ingénieur développement logiciels Inscription : février 2005 Messages : 682 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 190 ![]() |
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
__________________
@+ |
|
|
00
|
|
|
#5 | |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
bonjour
Citation:
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 |
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 190 ![]() |
tu peux utiliser un TDBCheckBox avec un integer
il suffit de renseigner les propriétés ValueChecked = 1 ValueUnchecked = 0
__________________
@+ |
|
|
00
|
|
|
#7 | |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#8 | ||
|
Membre émérite
![]() Ingénieur développement logiciels Inscription : février 2005 Messages : 682 ![]() |
Oui
ou faire Code :
__________________
Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle. Aymond d'Alost |
||
|
|
00
|
|
|
#9 | |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Citation:
Code :
UPDATE .... VALUES ... CAST(:FIELD AS BOOLEAN) |
|
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : juillet 2003 Messages : 190 ![]() |
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)
__________________
@+ |
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
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 |
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com