J'ai une requête dans Delphi en utilisant DBExpress TSQLQuery qui ressemble sierreur de troncature String dans Delphi DBExpress/Firebird paramatised requêtes
ActiveSQL.sql.add('SELECT * FROM MYTABLE where MYFIELD=(:AMYFIELD) ');
ActiveSQL.ParamByName('AMYFIELD').AsString := 'Some random string that is to long for the field';
ActiveSQL.Open;
Si je le lance, quand il exécute la commande ouverte, je reçois l'exception suivante
en classe TDBXError avec le message 'exception arithmétique, dépassement numérique ou troncature de chaîne.
Ceci est causé par la chaîne dans AMYFIELD été plus longue que les tables longueur du champ, MyField est Varchar (10), Si je la réduire à une chaîne plus courte, il fonctionne bien, et si j'ajouter la chaîne directement dans SQL comme si
ActiveSQL.sql.add('SELECT * FROM MYTABLE where MYFIELD="Some random string that is to long for the field" ');
il fonctionne correctement, à savoir ne se plaint pas de la troncature, maintenant si cela était un insert/mise à jour, je voudrais savoir sur la troncature, mais comme vient d'être utilisé pour une recherche I aimerais l'arrêter.
Y at-il un moyen de dire à DBExpress que je peux tronquer mes chaînes? ou est-il un travail autour de cette pratique
Je voudrais éviter d'avoir à ajouter quelque chose comme
l_input: = copie (l_input, 0, fieldLength-1);
comme semble mal et rendrait le maintien du code plus difficile. J'utilise Delphi 2007 avec Firebird 2 via le pilote interbase si cela peut aider?
MISE À JOUR:
@Erick Sasse il ressemble à votre droite, j'ai trouvé le message d'erreur sur le site FAQ firebird http://www.firebirdfaq.org/faq79/
@inzKulozik le LeftStr fonctionne très bien, même si je ne peux pas ActiveSQL.ParamByName ('AMYFIELD '). Taille à travailler, mais cela me semble toujours désordonné, et plus difficile à maintenir.
J'ai vu aussi une méthode qui ajoute substr à SQL: quelque chose comme
select * from mytable where myname = substr(:MYNAME,0,10)
regarde encore plus difficile à maintenir, Idéalement je voudrais un paramètre de configuration Firebird/DBExpress qui résout ce problème, mais jusqu'à ce que je Je peux en trouver un avec la solution d'inzKulozik et j'espère que la structure de la table ne changera pas beaucoup.
Peut-être que vous devriez définir la limite de longueur maximale dans les contrôles utilisateur? – inzKulozik