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

C++ Discussion :

Query et Paramètres de Requete SQL


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut Query et Paramètres de Requete SQL
    Bonjour a tous !

    Voila je suis dans un projet de développement pour une association, et je gère les données dans une base MySQL.
    Jusque la aucun soucis.

    Pour mon développement, j'essaie de reprendre au maximum des règles d'UML, donc en gros j'ai une couche interface, une couche application (avec une classe Admin,et des classes métiers), ensuite j'ai une couche Gestion des données dans la base de données..

    Je me suis créé une classe GestionQuery qui me permet d'exécuter mes requêtes SQL. Cette classe contient un objet TQuery, afin que si un jour j'utilise une autre Bdd, je n'ai pas a modifier tout mon code.

    Donc la Classe Admin instancie une classe métier qui s'appelle GestionFamille.

    Cette classe GestionFamille gère tout ce qui concerne les informations de Famille, et créée une Requete SQL, que j'envoie en paramètre à la classe GestionQuery.

    Donc pour appliquer ma requete a GestionQuery, je fais un appel du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjGestionQuery->SetRequeteSQL(SValRequete);
    Cette requête, que ce soit un SELECt ou un INSERT INTO, est faites avec des paramètres, les valeurs étant différente selon les cas.
    Je me dois donc d'envoyer a GestionQuery, la valeur des paramètres de ma requête envoyée.

    Donc il me faudrait une méthode appelée AddParamètre.

    Ca me ferai un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjGestionQuery->AddParametre("Param1");
    ObjGestionQuery->AddParametre("Param2");

    Ici se trouve ma difficulté, je ne sais pas comment développer ma méthode AddParametre, sachant que le nombre de paramètre peut varier suivant la requete.

    A savoir aussi, que dans ma classe GestionQuery, je ne veux avoir qu'une seule méthode SetREquete et Addparametre, afin de ne pas surcharger mon code.


    Merci si vous pouvez m'eclairer, et surtout si vous me comprennez

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En général, les paramètres SQL d'une requêtes sont ou "nommés" genre: "select * from MyTable where name like :value"
    ou bien numérotés genre: "select * from MyTable where name like ?"

    En ODBC, on va demander la création d'un objet de requête avec cette chaine... puis on va passer les paramètres ou bien avec:

    request.setString("value",myValue);
    ou
    request.setString(1,myValue);

    Le code ressemble donc à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // peut être fait dans 'ailleurs'...
    SQLHANDLE hStatement;
    SQLAllocHandle(SQL_HANDLE_STMT,connectionHandle,&hStatement);
    string stmt = "select * from MyTable where firstname like ?";
    SQLPrepare(hStatement,stmt.c_str(),stmt.length());
    // 
    SQLBindParameter(hStatement, 1, SQL_PARAM_INPUT,  SQL_C_CHAR, SQL_VARCHAR, value.length(), 0, value.c_str(), 0 value.length());
    SQLExecute(hStatement);
    ...
    (c'est sur que c'est quand même plus propre en JDBC ).

    L'interêt est triple... permettre plusieurs paramètres (d'ou ma préférence pour la version 'nommée' qui permet de s'affranchir de la reqûete), gèrer automatiquement les 'escapes' (surtout pour les chaines de caractères, et les formats de date), et même, si la durée de vie de l'objet request est suffisante, de permettre à la base de donnée de précompiler la requête...

    Ceci-dit, il doit bien y avoir des wrappers C++ pour le code monstrueux ODBC !


    Maintenant, si la question est coté C/C++ comment passer plusieurs paramètres, le "..." est ton ami [varargs].
    Voir les va_list / va_start / va_end....

Discussions similaires

  1. [WD17] passer des paramètres à une requete SQL
    Par hadaf dans le forum WinDev
    Réponses: 12
    Dernier message: 31/05/2013, 21h06
  2. Réponses: 2
    Dernier message: 28/10/2010, 13h16
  3. [2.3.0] paramètre dans requete SQL
    Par HelpmeMM dans le forum BIRT
    Réponses: 2
    Dernier message: 29/07/2008, 09h54
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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