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++Builder Discussion :

Substitution dans une requête SQL paramétrée [Base de donnée]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Par défaut Substitution dans une requête SQL paramétrée
    Bonjour à tous,

    Dans mon programme, j'ai une requête SQL paramétrée où je dois substituer les bonnes valeurs. Par exemple, disons que ma requête est :

    SELECT * FROM test WHERE var1=:valeurvar1 AND var2=:valeurvar2

    Je dois substituer valeurvar1 et valeurvar2 par les valeurs correctes. Je possède une map (déjà constituée), qui me donne la valeur correspondante.
    Je voudrais donc boucler sur l'ensemble des paramètres de la requête et assigner la bonne valeur venant de la map.
    J'ai un début de code mais je n'arrive pas à aller plus loin, plus particulièrement je ne sais pas comment récupérer ce qui va me servir de clé dans ma map (à savoir valeurvar1, valeurvar2).
    Voici 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
     
    String __fastcall test::substitution(TADOConnection *cnn, String sSQL)
    {
       TADOQuery* query = new TADOQuery(NULL);
     
       query->Connection = cnn;
       query->SQL->Add(sSQL);
     
       for(int i = 0; i < query->Parameters->Count; ++i)
       {
          query->Parameters->Items[i]->Value = getVariableValue(query->Parameters->Items[i]->// ?);                   
       }
       query->Active = true;
       return query->Recordset;
    }
    A l'intérieur du for, je veux donc assigner à la valeur du paramètre courant la valeur à substituer (via la fonction getVariableValue qui elle me retourne la valeur de la map).
    Aussi, j'ai mis String comme type de retour mais ma fonction doit en fait retourner un recordset. Est-ce que return query->Recordset; est correct, cela va-t-il bien retourner le recordset que la query va rapatrier une fois sa propriété Active passé à true ? Le type de la valeur de retour est Recordset alors ?

    Voilà, c'est encore un peu flou pour moi, si quelqu'un peut m'éclairer.
    Merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Je dois substituer valeurvar1 et valeurvar2 par les valeurs correctes. Je possède une map (déjà constituée), qui me donne la valeur correspondante.
    Je voudrais donc boucler sur l'ensemble des paramètres de la requête et assigner la bonne valeur venant de la map.
    J'ai un début de code mais je n'arrive pas à aller plus loin, plus particulièrement je ne sais pas comment récupérer ce qui va me servir de clé dans ma map (à savoir valeurvar1, valeurvar2).
    Que donne la propriété Name de l'objet TParameter (cad query->Parameters->Items[i]->Name) ?

    Aussi, j'ai mis String comme type de retour mais ma fonction doit en fait retourner un recordset. Est-ce que return query->Recordset; est correct, cela va-t-il bien retourner le recordset que la query va rapatrier une fois sa propriété Active passé à true ? Le type de la valeur de retour est Recordset alors ?
    Ton objet "query" est construit à l'intérieur de la fonction "substitution". Quand comptes-tu détruire cet objet ??
    Tu peux renvoyer ce TADOQuery*, ensuite la fonction appelante pourra aller taper dans la propriété Recordset de l'objet retourné. Ce sera à la charge de la fonction appelante de détruire cet objet quand elle n'en aura plus besoin..

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Par défaut
    Ok, merci pour les infos.
    J'ai bien compris pour le type de retour.
    En ce qui concerne la propriété Name, j'avais justement été voir sur :
    http://docs.embarcadero.com/products...eter_Name.html

    et ça dit :
    Use Name to identify a particular parameter within a TParameters object.
    Note: Name is the name of the TParameter object, not the name of the parameter it represents in a query or stored procedure.

    Apparemment, ce n'est pas le nom du paramètre dans la requête SQL (ou alors je me trompe).

    Encore merci.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Par défaut
    Eh bien en fait ça marche du tonnerre, c'est moi qui avait mal compris la doc.
    Au temps pour moi.

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

Discussions similaires

  1. Paramètres dans une requête SQL en Sybase
    Par mdjobongo dans le forum SQL Anywhere
    Réponses: 1
    Dernier message: 05/08/2011, 22h54
  2. Réponses: 13
    Dernier message: 21/05/2010, 16h54
  3. [WD9] Passer un paramètre dans une requête SQL
    Par gbzmt dans le forum WinDev
    Réponses: 2
    Dernier message: 03/01/2009, 07h14
  4. Réponses: 3
    Dernier message: 12/12/2008, 08h05
  5. comment passé un paramètre dans une requête sql
    Par java2008 dans le forum BIRT
    Réponses: 0
    Dernier message: 03/03/2008, 12h11

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