Récupérer un champ VarBinary(128) via un TField [C++Builder] - C++ - Programmation
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
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
Pourquoi mes topics sont-ils toujours des bides
Marsh Posté le 19-11-2002 à 15:21:18
Marsh Posté le 19-11-2002 à 17:41:42
ReplyMarsh Posté le 20-11-2002 à 16:57:43
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é?
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)
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
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 :
|
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
Marsh Posté le 21-11-2002 à 11:38:06
ah ok autant pour moi j'avais même pas vu
sur plate forme x86, le poids le plus faible à gauche, le poids le plus fort à droite.
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
vais tenter comme ça, et si les valeurs sont trop bizarres j'inverse
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
¹ (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
Message édité par antp le 19-11-2002 à 11:50:02
---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire