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

Bases de données Discussion :

Requête SQL avec variable externe


Sujet :

Bases de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Requête SQL avec variable externe
    Bonjour à tous,

    Me voila devant un problème sous QT,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void energie_sqlite3::dbLecture()
    {
    int Noeud_Selecetionner=nb;
    QSqlQuery query_energieP1;
    query_energieP1.exec("SELECT mesure FROM energieP WHERE idNoeud='Noeud_Selecetionner' ORDER BY id DESC LIMIT 0,1");
    QSqlRecord rec_energieP1 = query_energieP1.record();
    int nameCol_energieP1 = rec_energieP1.indexOf("mesure"); // Index du champs mesure
    while (query_energieP1.next())
    var[0] = query_energieP1.value(nameCol_energieP1).toString(); //Stock le contenu de la colone dans le tableau var
    
    [...]
    }
    int NoeudSelectionner = nb où nb sera amener à changer de 0 à 200 valeure renvoyer depuis une autre fenêtre.

    Mon souci ?

    Je voudrais que ma requête me renvois l'équivalent de :

    SELECT mesure FROM energieP WHERE idNoeud = 1 ORDER BY id DESC LIMIT 0,1;
    Mon programme ne me donne pas d'erreur avec le code que je vous ai montrez plus haut, il me renseigne via un warning que NoeudSelectionner n'est pas utiliser.

    En effet il ne passe pas en noir dans ma requête.

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Ce n'est pas un problème MySQL, c'est un problème QT, ou, tout simplement, une faute de frappe
    Noeud_Selecetionner
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Saluton,
    Ce n'est pas un problème MySQL, c'est un problème QT, ou, tout simplement, une faute de frappe
    En outre ceci semble confirmer que MySQL n'est pas concerné
    void energie_sqlite3::dbLecture()
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Non pas de faute de frappe dans mon programme c'est en retapant que j'ai fait cette faute.

    Certes j'utilise SQLite mais les requête SQL ne change pas juste les méthode d'accession du moins dans mon cas.

    Ce que je demande c'est comment faire pour mettre ma variable à la place de idNoeud=?

    Cela relève peu être de QT je vais aller poster dans une partie mieux approprié à mon souci

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    En dernière analyse, si idNoeud est numérique, la valeur ne devrait pas être entre quotes.
    WHERE idNoeud=Noeud_Selecetionner
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Dans la base de donnée idNoeud sont chiffré oui.

    Si je fait votre façon sans guillemet c'est toujours la même erreur que QT me renvois :
    Noeud_Selectionner n'est pas utiliser

    Mon compilateur va en faite chercher "Noeud_Slectionner" dans la colonne idNoeud de ma table energieP dans la bas de donnée. Et ne me renverra aucune valeurs du champs mesure.

    J'ai essayer une autre façon pour concaténer le tous mais sans succes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int Noeud_Selecetionner=nb;
    QSqlQuery query_energieP1;
    query_energieP1.exec("SELECT mesure FROM energieP WHERE idNoeud="+Noeud_Selecetionner+ "ORDER BY id DESC LIMIT 0,1");

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Il faut quand même au moins un espace entre Noeud_Selecetionner et ORDER.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Oui sinon la valeur renvoyer par Noeud_Selectionner se retrouve coller à ORDER, mais cette façon ne marche pas mon compilateur me renvois encore que Noeud_Slectionner n'est pas utiliser :$

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Comme déjà dit, je ne connais pas QT, mais s'il fonctionne sur le même principe que l'extension PDO de PHP, ce n'est pas la bonne façon de passer des valeurs blind à une requête.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bon je vous poste la solution que j'ai trouver qui à l'air de marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int Noeud_Selectionner = extern int MaValeur;
            QSqlQuery query_energieP1;
            char requete_energieP1[300];
            sprintf(requete_energieP1,"SELECT mesure FROM energieP WHERE idNoeud=%d ORDER BY id DESC LIMIT 0,1",Noeud_Selectionner);
         	query_energieP1.exec(requete_energieP1);

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Tien pendant que j'y pense, une personnes sais comment récupéré l'id de la ligne sélectionner dans un QTableWidget ?

  12. #12
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    La méthode currentRow() fait ça très bien si "id" signifie "numéro de ligne" pour toi. Sinon, qu'est ce que l'id ?

    Par ailleurs, pour ta requête, tu pourrais utiliser une requête préparée au lieu de ton snprintf (cf doc détaillée de QSqlQuery, §"Approaches to Binding Values")

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Je m'étais lancer sur un QselectedItem(), qui renvois une liste des items sélectionner dans un QList.

    Pas très approprié à mon projet vu que moi c'est une ligne entière qui ce sélectionne et une ligne unique (sélection multiple désactivé).

    Je vais voir la méthode curentRow() si elle est utilisable dans un QtableWidget ça serait parfait merci !

    Oui j'entends bien par id le numéro de ligne vu que mon tableau contient 2 colonnes (Nom et Lieu).

    Pour les requêtes je n'ai pas très bien compris ce que tu me propose.. je vais creuser ça taleur, à savoir que j'ai 9 requête de lecture qui sont toutes identique mis à part le nom de la table (energieP, energieP2, energieP3, energieQ, energieQ2, energieQ3, energieS, energieS2, energieS3, tension, intensite)

    Edit : J'ai regarder la doc le currentRow() vas surement mieux me servir merci beaucoup, pour Approaches to Binding Values je pense que ça me servira peu etre plus dans mes requête d'écriture où j'ai plusieurs champs "dynamique".

    Je m'y attèle vers 10h

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Re bonjour !

    Alors voila j'ai tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		idNoeud = TableWidget_Noeud->currentRow ();
    		cout<<idNoeud<<endl;
    Ça marche il me renvois bien la ligne selectionner, seul problème dans TableWidget la première ligne à l'id 0 et donc me renvois 0 au lieu de 1.

    J'ai essailer de faire idNoeud+1 sans succes

  15. #15
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    C'est assez normal qu'il te renvoie 0... Tu a besoin de quoi en réalité ? Pourquoi +1 ne marche pas ? Tu le fais comment ??

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Et bien moi je fesait ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		idNoeud+1 = TableWidget_Noeud->currentRow ();
    		cout<<idNoeud+1<<endl;
    Alors qu'avec ca ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		idNoeud = TableWidget_Noeud->currentRow ()+1;
    		cout<<idNoeud<<endl;
    Nickel à présent je me lance dans l'envois de trames RTU pour recenser le nombre de Noeud relier à mon MasheGate ... et en parallèle requête d'écriture dans la base de donnée.

    Chaque Noeuds chope 9 informations sur la ligne triphaser, nombre de noeuds max 200 ... ca va être hard à géré tous ça xD

Discussions similaires

  1. [MySQL] requête SQL avec variables non renseignées
    Par Boris56 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2010, 14h50
  2. [MySQL] Requête SQL avec variable
    Par kate59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/04/2008, 14h12
  3. Requête SQL avec variables
    Par BMT_Benoît dans le forum Windows Forms
    Réponses: 36
    Dernier message: 12/07/2007, 12h35
  4. Problème avec requête SQL avec variables
    Par harry25 dans le forum ASP
    Réponses: 1
    Dernier message: 03/01/2007, 03h41

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