[C++Builder] Récupérer un champ VarBinary(128) via un TField

Récupérer un champ VarBinary(128) via un TField [C++Builder] - C++ - Programmation

Marsh Posté le 19-11-2002 à 11:48:07    

Dans une BD j'ai un champ de type VarBinary(128)
Je fais la requête via un TADOQuery
J'accède au champ via FieldByNumber, ce qui me donne un TField* que je peux caster vers un descendant de TField ou utiliser une des méthode AsQqchose.
Comment je peux récupérer proprement ce champ binary, contenant entre 0 et 64 short int ¹, et mettre ça dans une zone mémoire de type short int machin[64] ?
J'ai essayé avec des Variants (AsVariant), mais une fois que les données sont dans le Variant je sais pas trop comment les transférer vers ma zone mémoire, donc le problème est +/- le même :D
 
¹ (je sais combien y en a, via un autre champ, mais de toute façon le champ a une taille fixe je suppose, même s'il n'est pas utilisé entièrement)
 
Je sens que comme d'habitude ça va être un bide :D


Message édité par antp le 19-11-2002 à 11:50:02

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 19-11-2002 à 11:48:07   

Reply

Marsh Posté le 19-11-2002 à 13:45:48    

On dirait qu'avec TField->GetData je peux récupérer ça, mais je sais pas si c'est la meilleure méthode
Enfin ça me donne les mêmes chiffres que ce que je vois avec le Query Analyzer de SQL Server, à savoir des chiffres bizarres :heink:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 19-11-2002 à 15:20:21    

En fin de compte ça n'a pas l'air si bien comme solution... ça a tendance à faire tout planter :D
 
Pourquoi mes topics sont-ils toujours des bides :cry:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 19-11-2002 à 15:21:18    

[:cupra]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-11-2002 à 17:41:42    

Reply

Marsh Posté le 20-11-2002 à 16:57:43    

[:thotho]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-11-2002 à 11:21:05    

j'ai également une table avec des champs varchar binary (sous MySQL) et je n'utilise pas la méthode GetData mais la propriété Value.  Il me semble que le GetData est plutôt à utiliser sur des champs dont le type serait BLOB ou TEXT.  As-tu essayé?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-11-2002 à 11:27:05    

J'ai essayé Value, mais ça me rend un Variant et ça je sais pas trop comment récupérer mes 64 short int :/
Par contre en le récupérant en tant qu'AnsiString ça peut passer, vu que ça donne une chaîne de 128 char, que je peux transformer en 64 short int, c'est ce que j'allais tester maintenant.
Dans la doc ils disent que GetData c'est justement pas pour les blob (pour lesquels il faut utiliser TADOBlobStream)


Message édité par antp le 21-11-2002 à 11:27:19
Reply

Marsh Posté le 21-11-2002 à 11:32:00    

en C j'aurais dit faire un pointeur et lire par paire de bytes mais en Delphi je sais pas trop, je connais pas assez :/


Message édité par drasche le 21-11-2002 à 11:32:12

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-11-2002 à 11:36:18    

C'est en C++Builder, pas en Delphi ;)
 
on dirait que ça marche avec l'AnsiString
je récupère le champ dans une AnsiString
puis je fais :

Code :
  1. Values[i] = (((unsigned short int)ValuesStr[1+i*2]) << 8) | (unsigned short int)ValuesStr[1+i*2+1];


 
où Values = array de 64 short int et ValuesStr = chaîne de 128 char, sachant que la chaîne commence à l'index 1 (vu que AnsiString ça sert d'équivalent aux chaînes de Delphi)
Par contre je sais pas lequel des deux caractère je dois décaler vers la gauche, pcq avec ce truc little endian / big endian je ne m'y retrouve plus :crazy:


Message édité par antp le 21-11-2002 à 11:37:02
Reply

Marsh Posté le 21-11-2002 à 11:36:18   

Reply

Marsh Posté le 21-11-2002 à 11:38:06    

ah ok autant pour moi j'avais même pas vu :D
 
sur plate forme x86, le poids le plus faible à gauche, le poids le plus fort à droite.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 21-11-2002 à 11:39:49    

je sais, mais est-ce que dans la BD c'était stocké comme ça ? mystère :D
vais tenter comme ça, et si les valeurs sont trop bizarres j'inverse :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed