Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2006, 11h32   #1
Futur Membre du Club
 
Inscription : mars 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 79
Points : 15
Points : 15
Par défaut [TSQL]Comment utiliser les type BINARY ?

Bonjour je cherche à effetuer une requête d'insertion sur une table dont un des champs est de type BINARY.

Voilà grosso modo comment je voudrais proceder :
- je rempli un tableau dont chaque élément et un couple de réél (std::pair<float,float>)
- une fois le tableau rempli je voudrais l'insérer dans ma base de données. C'est là que je suis dans le floue total.

J'ai choisi BINARY comme type de données pour écrire mon tableau, mais au niveau de la requête je ne vois pas trop comment procéder.
Je code en C++ et voilà à quoi ressemble pour le moment mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
list< std::pair<float,float> > lst;
 
/* je rempli ma liste */
 
std::pair<float,float> *tabDePoints;
tabDePoints = new std::pair<float,float>[lst.size()];
 
/* je rempli mon tableau */ 
 
...
sCmd.Format(_T("INSERT INTO \"DBA\".\"%s\" (%s, %s) VALUES (%d, %x)"),
                  TABLE_NAME, id, *monTableau);
 
pAdo->ExecuteUpdateCommand(sCmd);
Ca compile par contre ca fait une erreur lors de l'execution. Le tableau contient bien les données que je veux.
Je ne maitrise pas suffisament encore le code pour vous donnée l'err exact d'execution de la requête mais j'y travail...
si quelqu'un peux me donner des pistes en attendant (genre le %x ne marchera jamais, des infos sur le type BINARY etc...)

dernier moint ma table :
nom : maTable

champs1 : ID
type : int

champs2 : tableauDeDonnees
type : BINARY(200)


merci d'avance
à bientôt
toto4650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 14h08   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Premièrement je suggère à priori l'utilisation du type VARBINARY plutot que BINARY pour éviter la consommation excessive de place disque.

Ensuite, pour insérer des valeurs de type BINARY on peut utiliser des chaines hexadecimale précédée de 0x:

Code :
1
2
3
 
INSERT my_table(id, value) (1, 0xdeadbeef)
go
Donc en utilisant "0x%x" cela devrait marcher.
L'alternative est d'utiliser des "prepared statements" et des variables bindées (voir ct_dynamic() & co).

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 15h03   #3
Futur Membre du Club
 
Inscription : mars 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 79
Points : 15
Points : 15
en effet cela foncitonne !
Par contre après pour récupérer ces données c'est vraiement la galère mais je crois qu'il faut que je post dans le forums C++ parce que c'est hors sujet...

merci en tout cas !
toto4650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 15h17   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Pas du tout...

Il faut simplement binder (via ct_bind()) avec le bon type.

Si on declare une variable de type CS_BINARY on peut faire un ct_bind() avec un type CS_BINARY_TYPE et dans ce cas les données renvoyées sont effectivement en binaires purs.

Si on bind en type CS_CHAR_TYPE alors OpenClient convertit en hexadecimal.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2006, 17h38   #5
Futur Membre du Club
 
Inscription : mars 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 79
Points : 15
Points : 15
Merci pour ces précision mais je crois que mon problème est ailleurs :
En fait je n'arrive pas à insérer dans la base le contenu entier de mon tableau ou de ma liste.

pour cela il me faudrait plutôt des précision syntaxique en C++, en effet en faisant des affichages de :
*monTableau ou
monTableau ou
lst

j'obtient les valeurs des élément d'indice 0, et non pas le contenu entier de mon tableau ou de ma liste. Il faut donc que je traite d'abord ce problème avant d'envisager la suite.
merci
toto4650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h01.


 
 
 
 
Partenaires

Hébergement Web