Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoie de donnée rentré dans un QlineEdit dans bdd

Sujet résolu
    30 mars 2021 à 13:21:41

    main.cpp 

    #include <QApplication>
    #include <fenetreconfirmation.h>
    #include <fenetreinscription.h>
    #include <QtSql>
    #include <QSqlDatabase>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    
        db.setHostName("192.168.1.183"); // @ip serveur MySQL
        db.setDatabaseName("chronotrail"); // Nom de la base
        db.setUserName("root"); // Nom utilisateur
        db.setPassword("1234"); // Mot de passe
    
    
        if(db.open()) {
            qDebug() << "Ok - ouverture de la base de donnée";
    
        }
    
        else {
        qDebug() << "Echec d'ouverture de la base de donnée";
        qDebug() << db.lastError();
        }
    
        FenetreInscription *fenetrePourInscription = new FenetreInscription;
        fenetrePourInscription->show();
    
        return app.exec();
    }
    

    fenetreinscription.cpp

    #include "fenetreinscription.h"
    #include "fenetrechoixcourse.h"
    
    void FenetreInscription::ouvrirChoixCourse()
    {
        FenetreInscription fenetre;
        FenetreChoixCourse *ChoixCourse = new FenetreChoixCourse;
    
    
        QString NomCoureur = Nom->text();
        QString PrenomCoureur = Prenom->text();
        QString DateDeNaissanceCoureur = DateDeNaissance->text();
        QString EmailCoureur = Email->text();
        QString DossardCoureur = Dossard->text();
    
        QSqlQuery query;
    
        if(query.exec("INSERT INTO coureur (nom, prenom, date_naissance, sexe, mail, pre_inscrit, dossard) "
                      "VALUES (Nom->text(), Prenom->text(), DateDeNaissance->text(), 'homme', Email->text(), '0', Dossard->text())")) {
            qDebug() << "Ok - requete";
        }
        else{
              qDebug() << "Erreur - requete";
        }
    
        ChoixCourse->show();
    }
    
    FenetreInscription::FenetreInscription(): QWidget()
    {
        setFixedSize(300, 240);
    
        Nom = new QLineEdit;
        Prenom = new QLineEdit;
        Email = new QLineEdit;
        Donnee = new QFormLayout;
        Homme = new QCheckBox;
        Femme = new QCheckBox;
        Dossard = new QLineEdit;
        DateDeNaissance = new QLineEdit;
    
        Donnee->addRow("Votre Nom", Nom);
        Donnee->addRow("Votre Prenom", Prenom);
        Donnee->addRow("Homme", Homme);
        Donnee->addRow("Femme", Femme);
        Donnee->addRow("Votre Email", Email);
        Donnee->addRow("Votre date de naissance \"aaaa/mm/jj\"", DateDeNaissance);
        Donnee->addRow("Numéro de dossard", Dossard);
    
        setLayout(Donnee);
    
        Enregistrer = new QPushButton("Enregistrer", this);
    
        Enregistrer->setToolTip("Permet d'enregistrer un nouveau client");
        Enregistrer->setCursor(Qt::PointingHandCursor);
        Enregistrer->move(30, 200);
        connect(Enregistrer, SIGNAL(clicked()),this,SLOT(ouvrirChoixCourse()));
        connect(Enregistrer, &QPushButton::released, Enregistrer, [this] () { this->close();});
    
        Annuler = new QPushButton("Annuler", this);
    
        Annuler->setToolTip("Annuler");
        Annuler->setCursor(Qt::PointingHandCursor);
        Annuler->move(170, 200);
    
        connect(Annuler, &QPushButton::clicked, Annuler, [this] () { this->close();});    
    }
    

    fenetreinscription.h

    #ifndef FENETREINSCRIPTION_H
    #define FENETREINSCRIPTION_H
    
    #include <QValidator>
    #include <QtWidgets/QApplication>
    #include <QWidget>
    #include <QtWidgets/QPushButton>
    #include <QtWidgets/QLineEdit>
    #include <QtWidgets/QFormLayout>
    #include <QCheckBox>
    #include <QSqlQuery>
    #include <QApplication>
    #include <sql.h>
    #include <QtSql>
    #include <QSqlDatabase>
    
    class FenetreInscription : public QWidget
    {
        Q_OBJECT
    public:
        FenetreInscription();
    
    private:
        QLineEdit *Nom; 
        QLineEdit *Prenom;
        QLineEdit *Email;
        QLineEdit *DateDeNaissance;
        QCheckBox *Homme;
        QCheckBox *Femme;
        QLineEdit *Dossard;
        QPushButton *Enregistrer;
        QPushButton *Annuler;
    
        QFormLayout *Donnee;
    
    signals:
    
    public slots:
        void ouvrirChoixCourse();
    
    };
    
    #endif // FENETREINSCRIPTION_H
    
    

    J'aimerais envoyé un message avec le ouvrirCoixCourse mais je n'y arrive pas je ne comprend pas pourquoi, si je mets la commande en dur ça fonctionne mais quand j'utilise les QlineEdit ça ne fonctionne plus pourriez vous m'expliquer pourquoi?



    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2021 à 14:48:44

      Bonjour,

      "VALUES (Nom->text(), Prenom->text(), DateDeNaissance->text(), 'homme', Email->text(), '0', Dossard->text())"

      Tu ne peux pas mettre des appels de fonctions à l'intérieur d'une chaîne de caractères, ils ne seront pas exécutés, mais envoyés tels quel à la base de données (et comme il n'y a pas de guillemets échappées ou d'apostrophes autour de chaque élément, ça va probablement générer une erreur).

      Pour insérer des valeurs dans une requête SQL, tu peux utiliser les fonctions QSqlQuery::bindValues ou addBindValue: https://doc.qt.io/qt-5/qsqlquery.html#approaches-to-binding-values en modifiant le texte de ta requête actuelle pour remplacer les valeurs variables par des placeholders ("?" ou ":unNomDEmplacement" sans guillemets) comme dans les exemples du lien.

      PS: Tu peux également utiliser

      qDebug() << query.lastError(); 

      en cas d'erreur pour afficher le texte de l'erreur dans la console, comme tu l'as fait pour l'ouverture de la connexion de la BDD.

      -
      Edité par alexisdm 30 mars 2021 à 14:52:57

      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2021 à 8:16:53

        alexisdm a écrit:

        Bonjour,

        "VALUES (Nom->text(), Prenom->text(), DateDeNaissance->text(), 'homme', Email->text(), '0', Dossard->text())"

        Tu ne peux pas mettre des appels de fonctions à l'intérieur d'une chaîne de caractères, ils ne seront pas exécutés, mais envoyés tels quel à la base de données (et comme il n'y a pas de guillemets échappées ou d'apostrophes autour de chaque élément, ça va probablement générer une erreur).

        Pour insérer des valeurs dans une requête SQL, tu peux utiliser les fonctions QSqlQuery::bindValues ou addBindValue: https://doc.qt.io/qt-5/qsqlquery.html#approaches-to-binding-values en modifiant le texte de ta requête actuelle pour remplacer les valeurs variables par des placeholders ("?" ou ":unNomDEmplacement" sans guillemets) comme dans les exemples du lien.

        PS: Tu peux également utiliser

        qDebug() << query.lastError(); 

        en cas d'erreur pour afficher le texte de l'erreur dans la console, comme tu l'as fait pour l'ouverture de la connexion de la BDD.

        -
        Edité par alexisdm il y a environ 17 heures

        j'ai fait le Qdebug last error et le problème que j'avais c'etait un ; devant mail au lieu d'une virgule une faute de frappe quoi désolé au moins c'est résolu merci ;) 

        • Partager sur Facebook
        • Partager sur Twitter

        Envoie de donnée rentré dans un QlineEdit dans bdd

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown