Bonjour à tous,
Je dois passer une application Delphi7 en Delphi 2009. Le plus gros souci va concerner l'Unicode mais déjà je rencontre un problème sur l'insertion de valeurs binaires (type blob) en base de données.
Nous utilisons le BDE avec le composant 'TQuery', en créant des requêtes paramétrées pour l'insertion de champ de type 'blob'. La contenu du paramètre est chargé via un appel à 'LoadFromStream' ou 'LoadFromFile'.
Cela fonctionnait très bien sous Delphi 7, le type de donnée du paramètre était alors 'ftBlob' tandis que le contenu du variant sous-jacent (propriété 'Value') avait un type = 'varString'. La méthode 'AsBlob' du paramètre retournant le bon contenu (un 'string' contenant contenant les données du 'TStream' ou du fichier initial), la propriété Value retournant la même chose à une différence prêt : celui-ci est tronqué au premier caractère #0. Cela fonctionnait très bien (c'est le contenu retourné par 'AsBlob' qui était effectivement inséré en base de données).
Depuis le passage à Delphi 2009 j'ai noté les différences suivantes avec le même code :
- Le contenu du variant sous-jacent possède désormais le type 'Array of Byte'
- La méthode 'AsBlob' retourne un TBytes (array of byte) correspondant au contenu du 'TStream' ou du fichier initial.
- La propriété 'Value' retourne la même chose que 'AsBlob'.
=> tout semble donc être normal, étant donné le support de l'Unicode dans Delphi 2009 il semble logique que les méthodes de chargement de contenu binaire (LoadFromStream ou LoadFromFile) utilisent le type 'TBytes' (array of byte) plutôt que 'string'.
==> là où ça se gâte c'est qu'à l'exécution de la requête le contenu du paramètre n'est pas inséré en base de données, à la place mon champ contient '€€€€€€€€€€€€€€€€€€€....', bref un contenu corrompu.
Je ne vois pas d'où cela peut provenir puisque ma requête est bien formulée ('Update License Set LICENSEDATA = :MYPARAM Where IDLICENSE = 19') et mon paramètre est correctement défini avant l'appel à ExecSQL. Et le code fonctionnait très bien sous Delphi 7.
J'ai installé toutes les mises à jour possible de Delphi2009 mais cela n'a rien changé.
Pouvez-vous m'aider à résoudre ce problème ? Merci !
Partager