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] - Sélection en fonction de donnée optionelles


Sujet :

Interfaces de programmation Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2009
    Messages : 86
    Points : 26
    Points
    26
    Par défaut [OCILIB] - Sélection en fonction de donnée optionelles
    Bonjour à tous,

    Actuellement je développe avec un collègue une application utilisant OCI Lib.
    Ce bout de code est développer en C et sera intégré sous forme de library.a dans un projet graphique QT.
    J’essaye de lui sortir une épine du pied pendant qu’il développe (il est plus proche que moi de la base de donnée mais à encore pas mal de travail avant d'avoir à résoudre se soucis).

    Nous avons aujourd’hui une entête de type :

    Int select_client(S_client client-in, S_client * client-out[]).

    Comme c’est lui qui développe cette partie je ne sais pas s’il a exactement ça, mais ça doit être très proche.
    Le but est de rentrer les données qu’on a sur le client qu'on souhaite trouver dans la structure client in, par exemple nom / prénom, et la fonction renvois une liste de réponse en fonction des valeurs saisie.

    dans le code on aurait quelque chose comme :

    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
    16
    17
     
     
    If(client.nom != null)
    {
     
    	//ajout de la recherche nom dans la requête
     
    }
    If(client.prenom != null)
    {
     
    	//ajout de la recherche prénom dans la requête
     
    }
     
    //et ainsi de suite pour toutes les données, 
    //avant d'executer à la fin la requête concaténé avec les ifs du haut.
    Mon collègue assez proche de OCI-lib m'explique qu'une requête ce fait en plusieurs fois dans le cas d'un select :

    - OCI_EecuteStmt (prépare la requête à être executer)
    - OCI_Bind (remplace les variables dans la requête par les valeurs réelles).

    Avec cette méthode, je ne peux pas composer ma requête en détectant les valeurs que j'ai pour la selection avant d'excuter, je suis obliger de bind en fonction des mêmes données, et le type attendu pour la requête est de type " const mtext * " ....

    N'y à-t'il rien qui me permette de créer une requête de type char par exemple ?

    L'intérêt final serait de composé ma requête à la volé en traversant les divers " si j'ai un prénom alors je cherche en fonction et j'ajoute à ma requête ",

    OCI_ExecuteStmt oblige à faire les binds encore une fois en fonction des données que j'ai en entrée, mécanique assez chiante dont je me débarrasserais volontiers ...

    j'aimerais qu'à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    OCI_ExecuteStmt(st, "select * from client where prenom = ':prenom'");
    OCI_Bind ...
    on aurait un truc du genre ou approchant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    char req = "select * from client where prenom = 'Francis'";
    OCI_ExecuteStmt(st, req);
    Le top pour ce débarrasser d'oci_bind serait de généré une requête de type const mtext * contenant directement les valeurs ... Est ce que seulement c'est possible ... ?

    PS : j'ai lu toute la doc de developpez.net concernant OCI_Lib que mon collègue m'a transmit sans trouver de vrai solution :

    http://vicenzo.developpez.com/tutoriels/c/ocilib/#LV-A

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

    Informations forums :
    Inscription : juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    Salut,


    Je ne comprend pas bien ou est ton problème.

    Tu n'es pas obligé de passer par des binds

    Tu peux tres bien construire en formattant une chaine de charactere comme tu le souhaite (strcat, sprintf, ....) et en suite executer la requete par OCI_ExecuteStmt()....
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2009
    Messages : 86
    Points : 26
    Points
    26
    Par défaut MERCI
    Salut,

    et surtout merci, désolé aussi de ne pas y avoir pensé plus tot.

    C'est surtout du au fait qu'on à vu plein d'exemple avec des binds, qu'on à pas eu le déclic d'essayé de passer une requête toute construite à cette fonction précise qu'on avait déjà remarqué ...


    Mes excuses pour le dérangement et encore, un GRAND MERCI

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/04/2013, 12h00
  2. [Crystal Reports] Sélection de Base de Données
    Par coucoucmoi dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 16/11/2004, 16h52
  3. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22
  4. Ajusté les Axes d'un graphe en fonction des données rentrée!
    Par Ma2thieu dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/07/2004, 01h34
  5. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 11h57

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