IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

[TSQL]Comment utiliser les type BINARY ?


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    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 !

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 79
    Points : 38
    Points
    38
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11g] Comment utiliser les types de jointure (NL, MERGE etc) ?
    Par ctobini dans le forum SQL
    Réponses: 2
    Dernier message: 24/07/2014, 09h46
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo