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

Interfaces de programmation Oracle Discussion :

[OCILIB] Liaison de strings


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut [OCILIB] Liaison de strings
    Bonjour

    J'ai suivi le tuto sur http://vicenzo.developpez.com/tutoriels/c/ocilib/ et bien regardé le programe de test fourni avec OCILIB. Mais je me pose une question sur le BIND de parametres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    OCI_Prepare(st, "delete from test_fetch where code = :code");
    OCI_BindInt(st, ":code", &code);
     
    code = 3;
    OCI_Execute(st);
    Si je comprends bien cet exemple, la fonction OCI_BindInt va faire un "remplacement" de ":code" par la valeur de l'int code quand on fera OCI_Execute.

    Mais dans le cas de la fonction OCI_BindString, je pensais pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    OCI_Prepare(st, MT("SELECT idUser, password FROM SOUser WHERE login=:login AND deleted = 0"));
    OCI_BindString(st, MT(":login"), loginStr.c_str(), loginStr.length());
     
    OCI_Resultset *rs =OCI_GetResultset(st);
     
    if (OCI_FetchNext(rs)) {
    ..
    avec loginStr est un std:string. Mais la fonction OCI_BindString attend un char* et non un const char*. Je ne comprend pas trop pourquoi. Dans le cas ou on doit "binder" une std::string, faut-il a chaque fois passer par faire une copie dans un buffer (pour avoir un char*) ?

    A bientot

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Pourquoi OCI_BindString() attend un dtext * au lieu d'un const dtext * ??

    C'est très simple : un bind peut être IN, OUT, IN/OUT.

    Dans ton exemple, il est clair que c'est un bind de type IN.

    Mais cela pourrait être un bind de type OUT si la requête est un bloc PL/SQL du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    begin :str_res = funct(.....); end;
    Dans ce cas Oracle va écrire dans la variable host qui est donc alors modifiée.

    C'est pour ca que je n'ai pas mis de const dans le prototype de OCI_BindString()...

    Donc si tu es sur que ta requete ne modifiera pas ta chaine (bind de type IN), tu peux tout simplement faire un cast du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     (dtext*) loginStr.c_str()
    sans problème...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

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

Discussions similaires

  1. [OCILIB] : String et trim()
    Par domiq44 dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 29/06/2011, 11h33
  2. Liaison entre C et OCILIB
    Par lephotographe dans le forum Débuter
    Réponses: 2
    Dernier message: 24/08/2009, 15h29
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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