Bonjour,
Outils utilisés: Delphi 10.3, Firebird 2.5, composants InterBase Express (IBX) (TIBDataBase, TIBTransaction, TIBDataset).
Je ne suis pas un expert en SGBD, ni en delphi. Ayant effectué quelques recherches sur le sujet, je n'ai malheureusement pas pu trouver une explication/solution à un problème que je rencontre lors de la définition des champs de type chaîne de caractères dans un IBDataset.
L'on m'a demandé de maintenir un programme codé avec Delphi. Le programme doit se connecter à une base de données Firebird.
Avec un simple TIBDataset, je veux récupérer les champs de type varchar(84) (charset utf-8). Lorsque j'utilise la fonction "Ajouter tous les champs" (depuis l'éditeur de champs), les champs se créent de type TIBStringField.
Le problème est que la taille est 4x plus grande que le nombre de caractère défini dans la base de données (84->336). J'ai alors un message de type "Dynamic SQL Error (-303)" qui apparaît ("arithmetic exception, numeric overflow, or string truncation. String right truncation").
Je crois comprendre que le fait que un caractère utf-8 peut utiliser jusqu’à 4 bytes. Du coup, pour 84 caractère encodé en utf8, il réserve 336 bytes.
Est-il normal que le composant IBDataset confondent la "taille" du champ varchar et le nombre de caractères que celui-ci peut contenir ? Est-ce une mauvaise configuration des composants IBX ou un manque de paramètre pour la connexion à la base de données ? Ou bien la base de données qui est mal configurée ?
Merci d'avoir prit le temps de lire. Veuillez pardonner mon manque de compréhension à ce sujet.
Partager