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
Partager