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 :

Mettre a jour les Parametres dans une requete SQL


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Mettre a jour les Parametres dans une requete SQL
    Bonjour,

    Je bute actuellement sur une erreur SQL avec un TQuery.

    Je veux en faites modifier le parametre d'une requetes en fonction de la sélection d'un radioButon.

    j'ai mis dans la methode BeforeOpen() de mon TQuery:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           if(Form1->SortbyStatus->Checked)
                    QueryDevices->Params->ParamByName("colonne")->AsString = "OverallStatus";
           else
                    QueryDevices->Params->ParamByName("colonne")->AsString = "Name";
    mais g une erreur me disant que le nom de colonne n'existe pas
    voiçi ma requete SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select OverallStatus,Name,DeviceKey 
    from devices(NOLOCK) 
    WHERE OverallStatus>=1 AND OverallStatus<=5 
    order by :colonne DESC
    Trouvé vous une erreur??

    Tarik

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Salut Tarik,

    Essaye de mettre ta condition if...else dans le même bloc que ta requête sql..

    tiens moi au courant..

    Linda

  3. #3
    Membre averti
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Points : 405
    Points
    405
    Par défaut
    Tu pourrais nous en dire plus, comme par exemple, lequel des deux bouts de code arrive en premier dans ton code?
    Modérateur Taverne et C++Builder
    Règles du Club - Règles de la Taverne
    FAQ BCB - sources
    Et je mords

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Essaye de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MaQuery->SQL->Clear();
    MaQuery->SQL->Text="... ORDER BY :COLONNE DESC";
    MaQuery->Prepare();
    if(Form1->...->Checked)
    {
         MaQuery->ParamByName("COLONNE")->AsString=TonTruc;
    }
    else
    {
         MaQuery->ParamByName("COLONNE")->AsString=TonAutreTruc;
    }
     
    MaQuery->Open();
    Et dans ce cas, tu n'as pas besoin de méthode MaQueryBeforeOpen,

    C'est ce que je fais et ça marche bien..

    Linda

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    ok pour plus de précision, j'ai en fait mis ma requete SQL dans la propriete du composant TQuery (directement).

    Et pour ce qui est de l'execution la methode beforeOpen du TQuery passe avant l'execution de la requete.

    je pensais faire la requete statiquement avec les composants builder mais ca plante beaucoup.

    merçi

    Tarik

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    j'ai essayé la solution de Linda qui est de mettre tout dans une methode:
    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
    Refresh les données du DBGrid
    DataModules->QueryDevices->SQL->Clear();
    DataModules->QueryDevices->SQL->Text="select OverallStatus,Name,DeviceKey from devices(NOLOCK)WHERE OverallStatus>=1 AND OverallStatus<=5 order by :colonne DESC";
    DataModules->QueryDevices->Prepare();
     
    if(Form1->SortbyStatus->Checked)
    {
         DataModules->QueryDevices->ParamByName("colonne")->AsString="OverallStatus";
    }
    else
    {
         DataModules->QueryDevices->ParamByName("colonne")->AsString="Name";
    }
     
     DataModules->QueryDevices->Open();
    Mais toujours sans succes a mon avis ça ne vient pas de l'execution mais plutot de la syntaxe du query.


    y a til un spécialist BD? La requete serait elle fausse??

    Tarik

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    j'aurai peut être une autre solution..désolée si ça marche pas..
    Pour éviter d'avoir un paramètre, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    DataModules->QueryDevices->SQL->Clear();
    if(Form1->SortbyStatus->Checked) 
    { 
     DataModules->QueryDevices->SQL->Text="select  OverallStatus,Name,DeviceKey from devices(NOLOCK)WHERE OverallStatus>=1 AND OverallStatus<=5 order by OverAllStatus DESC"; 
     
    } 
    else 
    { 
     DataModules->QueryDevices->SQL->Text="select  OverallStatus,Name,DeviceKey from devices(NOLOCK)WHERE OverallStatus>=1 AND OverallStatus<=5 order by Name DESC"; 
    } 
    DataModules->QueryDevices->Prepare(); 
     DataModules->QueryDevices->Open();
    ça pourra au moins te dire si ça vient du paramètre ou pas..

    Linda

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bon apparement c'est le parametre qui n'est pas bon.

    J'accepte ta solution

    merçi encore Linda.

    Tarik

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

Discussions similaires

  1. [PPT-2010] mettre à jour les nombres dans une phrase
    Par pepsister dans le forum Powerpoint
    Réponses: 1
    Dernier message: 14/06/2010, 10h32
  2. trouver les tables dans une requete sql
    Par bguihal dans le forum SQL
    Réponses: 5
    Dernier message: 09/03/2009, 14h34
  3. Un recordSet en parametre dans une requete SQL
    Par skillipo dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/12/2007, 16h59
  4. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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