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 :

Insertion des données avec bindValue()


Sujet :

Bases de données

  1. #1
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut Insertion des données avec bindValue()
    Bonjour à tous. je bosse sur un petit projet pour le stockage des données de vente(Vêtement, Chaussure et Lingerie).
    Le problème c'est que: lorsque je rentre les données dans la fenêtre d'insertion, ma QMessaBox me notifie bien que tous c'est bien passé. sauf que ma base de données reste toujours vide. je ne comprends pas ce qui se passe. Besoin d'aide svp.
    voici le constructeur(.cpp) de la classe qui gère ca
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Alimentation::Alimentation(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Alimentation)
    {
        enum
        {
            ID_CIBLE = 0,
            TYPE_CIBLE = 1
        };
     
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setDatabaseName("Vente_test"); // base de données que nous venons de créer.
        db.setHostName("localhost");
        db.setUserName("");
        db.setPassword("");
        db.setPort(3306);
        db.open();
     
        model_v = new QSqlTableModel(this);
        model_c = new QSqlTableModel(this);
        model_l = new QSqlTableModel(this);
        ui->setupUi(this);
     
        //gestion des enregistrements
        int index = 0;
        index = ui->combo_type->currentIndex();
        if(index == 0)
        {
            modele_vetement();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_v()));
        }
        else if(index == 1)
        {
            modele_chaussure();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_c()));
        }
        else if(index == 2)
        {
            //modele_lingerie();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_l()));
        }
     
     
        setFixedSize(770, 489);
        connect(ui->bouton_afficher, SIGNAL(clicked()), this, SLOT(afficher_gestion()));
    }
    et voici le slot alimenter_bd_v()
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    void Alimentation::alimenter_bd_l()
    {
        enum
        {
            ID_L = 0,
            NOM_L = 1,
            MARQUE_L = 2,
            MODELE_L = 3,
            TAILLE_L = 4,
            MATIERE_L = 5,
            COULEUR_L = 6,
            PRIX_UNIT_L = 7,
            QUANTITE_L = 8,
            APERCU_L = 9,
            DESCRIPTION_L = 10
        };
     
        model_l->setTable("lingerie");
        //critère de tri
        model_l->setSort(NOM_L, Qt::AscendingOrder);
        //définition des entetes
        model_l->setHeaderData(NOM_L, Qt::Horizontal, "Nom");
        model_l->setHeaderData(MARQUE_L, Qt::Horizontal, "Marque");
        model_l->setHeaderData(MODELE_L, Qt::Horizontal, "Modèle");
        model_l->setHeaderData(TAILLE_L, Qt::Horizontal, "Taille");
        model_l->setHeaderData(MATIERE_L, Qt::Horizontal, "Matière");
        model_l->setHeaderData(COULEUR_L, Qt::Horizontal, "Couleur");
        model_l->setHeaderData(PRIX_UNIT_L, Qt::Horizontal, "Prix unit.");
        model_l->setHeaderData(QUANTITE_L, Qt::Horizontal, "Quantité");
        model_l->setHeaderData(APERCU_L, Qt::Horizontal, "Aperçu");
        model_l->setHeaderData(DESCRIPTION_L, Qt::Horizontal, "Description");
        model_l->select();
     
        QString nom_l = ui->champ_nom->text();
        QString marque_l = ui->champ_marque->text();
        QString model_l = ui->champ_modele->text();
        int taille_l = ui->champ_taille->value();
        QString matiere_l = ui->champ_matiere->text();
        QString couleur_l = ui->champ_couleur->text();
        double prix_unit_l = ui->champ_prix->value();
        int quantite_l = ui->champ_qte->value();
        QString apercu_l = ui->champ_apercu->text();
        QString description_l = ui->champ_description->toPlainText();
        QString cible_l = ui->combo_cible->currentText();
     
        while(nom_l.isEmpty() || marque_l.isEmpty() || model_l.isEmpty() ||
              matiere_l.isEmpty() || couleur_l.isEmpty() ||
                apercu_l.isEmpty() || description_l.isEmpty())
        {
            QMessageBox::warning(this, "Erreur: champ vide !", "Veuillez renseigner absolument tous les champs");
     
            return;
        }
     
        QString const req = "INSERT INTO lingerie (nom_lingerie, matiere_lingerie, modele_lingerie, quantite_lingerie, "
                      " description_lingerie, marque_lingerie, couleur_lingerie, taille_lingerie, "
                      "prix_unit_lingerie, apercu_lingerie, fk_cible) VALUES(:nom, :matiere, :modele, :quantite, :description, "
                      ":marque, :couleur, :taille, :prix_unit, :apercu, :fk_cible);";
     
        QSqlQuery requete;
        requete.prepare(req);
        requete.isActive();
     
        if(ui->combo_cible->currentText() == "Homme")
        {
            requete.bindValue(":nom", nom_l);
            requete.bindValue(":matiere", matiere_l);
            requete.bindValue(":modele", model_l);
            requete.bindValue(":quantite", quantite_l);
            requete.bindValue(":description", description_l);
            requete.bindValue(":marque", marque_l);
            requete.bindValue(":couleur", couleur_l);
            requete.bindValue(":taille", taille_l);
            requete.bindValue(":prix_unit", prix_unit_l);
            requete.bindValue(":apercu", apercu_l);
            requete.bindValue(":fk_cible", 1);
            requete.exec();
            clean_champ();
        }
        else if(ui->combo_cible->currentText() == "Femme")
        {
            requete.bindValue(":nom", nom_l);
            requete.bindValue(":matiere", matiere_l);
            requete.bindValue(":modele", model_l);
            requete.bindValue(":quantite", quantite_l);
            requete.bindValue(":description", description_l);
            requete.bindValue(":marque", marque_l);
            requete.bindValue(":couleur", couleur_l);
            requete.bindValue(":taille", taille_l);
            requete.bindValue(":prix_unit", prix_unit_l);
            requete.bindValue(":apercu", apercu_l);
            requete.bindValue(":fk_cible", 2);
            requete.exec();
            clean_champ();
        }
        else if(ui->combo_cible->currentText() == "Enfant")
        {
            requete.bindValue(":nom", nom_l);
            requete.bindValue(":matiere", matiere_l);
            requete.bindValue(":modele", model_l);
            requete.bindValue(":quantite", quantite_l);
            requete.bindValue(":description", description_l);
            requete.bindValue(":marque", marque_l);
            requete.bindValue(":couleur", couleur_l);
            requete.bindValue(":taille", taille_l);
            requete.bindValue(":prix_unit", prix_unit_l);
            requete.bindValue(":apercu", apercu_l);
            requete.bindValue(":fk_cible", 3);
            requete.exec();
            clean_champ();
        }
        requete.finish();
     
     
        QMessageBox::information(this, "Bravo !", "Les données sur <strong>" + nom_l + "</strong> ont bien été enregistré dans la"
                                                      " catégorie <strong>" + ui->combo_cible->currentText() + "</strong>");
     
     
    }
    ici je n'ai pris que le cas de l'enregistrement pour la lingerie.
    Aidez moi svp. Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Cette partie ne fait pas ce que tu penses :
    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
    16
    17
        int index = 0;
        index = ui->combo_type->currentIndex();
        if(index == 0)
        {
            modele_vetement();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_v()));
        }
        else if(index == 1)
        {
            modele_chaussure();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_c()));
        }
        else if(index == 2)
        {
            //modele_lingerie();
            connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimenter_bd_l()));
        }
    Elle est exécutée une seule fois, alors que ton widget Alimentation n'est même pas encore affiché. Ce qui fait que l'index est (toujours) celui que tu as mis dans le designer et qui est affiché au début, et que tu n'effectues qu'une et une seule connexion qui ne dépend pas du choix effectué plus tard.

    Tu dois connecter le signal clicked() à un slot qui se chargera d'appeler la bonne fonction alimenter selon l'élément sélectionné au moment où l'utilisateur appuiera sur le bouton. (Note : la syntaxe avec les macros SIGNAL/SLOT est dépréciée.)

    Remarque : tes trois if dans le slot pourraient être fusionnés en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            requete.bindValue(":nom", nom_l);
            requete.bindValue(":matiere", matiere_l);
            requete.bindValue(":modele", model_l);
            requete.bindValue(":quantite", quantite_l);
            requete.bindValue(":description", description_l);
            requete.bindValue(":marque", marque_l);
            requete.bindValue(":couleur", couleur_l);
            requete.bindValue(":taille", taille_l);
            requete.bindValue(":prix_unit", prix_unit_l);
            requete.bindValue(":apercu", apercu_l);
            requete.bindValue(":fk_cible", 1 + ui->combo_cible->currentIndex());
            requete.exec();
            clean_champ();

  3. #3
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup. Je vais modifier et revenir vous présenter ce qu'il en est.

  4. #4
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Bonjour...
    J'ai modifié le code mais rien de changé. voici ce que j'ai fait
    le constructeur:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Alimentation::Alimentation(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Alimentation)
    {
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setDatabaseName("Vente_test"); // base de données que nous venons de créer.
        db.setHostName("localhost");
        db.setUserName("");
        db.setPassword("");
        db.setPort(3306);
        db.open();
     
        model_v = new QSqlRelationalTableModel(this);
        model_c = new QSqlRelationalTableModel(this);
        model_l = new QSqlRelationalTableModel(this);
     
        ui->setupUi(this);
     
        //gestion des enregistrements
        connect(ui->bouton_enregistrer, SIGNAL(clicked()), this, SLOT(alimentation_generale()));
     
     
        setFixedSize(770, 489);
        connect(ui->bouton_afficher, SIGNAL(clicked()), this, SLOT(afficher_gestion()));
    }
    la fonction "alimentation.cpp" pour la librairie
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    void Alimentation::alimenter_bd_l()
    {
        enum
        {
            ID_L = 0,
            NOM_L = 1,
            MARQUE_L = 2,
            MODELE_L = 3,
            TAILLE_L = 4,
            MATIERE_L = 5,
            COULEUR_L = 6,
            PRIX_UNIT_L = 7,
            QUANTITE_L = 8,
            APERCU_L = 9,
            DESCRIPTION_L = 10
        };
     
        model_l->setTable("lingerie");
        //critère de tri
        model_l->setSort(NOM_L, Qt::AscendingOrder);
        //définition des entetes
        model_l->setHeaderData(NOM_L, Qt::Horizontal, "Nom");
        model_l->setHeaderData(MARQUE_L, Qt::Horizontal, "Marque");
        model_l->setHeaderData(MODELE_L, Qt::Horizontal, "Modèle");
        model_l->setHeaderData(TAILLE_L, Qt::Horizontal, "Taille");
        model_l->setHeaderData(MATIERE_L, Qt::Horizontal, "Matière");
        model_l->setHeaderData(COULEUR_L, Qt::Horizontal, "Couleur");
        model_l->setHeaderData(PRIX_UNIT_L, Qt::Horizontal, "Prix unit.");
        model_l->setHeaderData(QUANTITE_L, Qt::Horizontal, "Quantité");
        model_l->setHeaderData(APERCU_L, Qt::Horizontal, "Aperçu");
        model_l->setHeaderData(DESCRIPTION_L, Qt::Horizontal, "Description");
        model_l->select();
     
        QString nom_l = ui->champ_nom->text();
        QString marque_l = ui->champ_marque->text();
        QString model_l = ui->champ_modele->text();
        int taille_l = ui->champ_taille->value();
        QString matiere_l = ui->champ_matiere->text();
        QString couleur_l = ui->champ_couleur->text();
        double prix_unit_l = ui->champ_prix->value();
        int quantite_l = ui->champ_qte->value();
        QString apercu_l = ui->champ_apercu->text();
        QString description_l = ui->champ_description->toPlainText();
        QString cible_l = ui->combo_cible->currentText();
     
        while(nom_l.isEmpty() || marque_l.isEmpty() || model_l.isEmpty() ||
              matiere_l.isEmpty() || couleur_l.isEmpty() ||
                 description_l.isEmpty())
        {
            QMessageBox::warning(this, "Erreur: champ vide !", "Veuillez renseigner absolument tous les champs");
     
            return;
        }
     
        QString const req = "INSERT INTO lingerie (nom_lingerie, matiere_lingerie, modele_lingerie, quantite_lingerie, "
                      " description_lingerie, marque_lingerie, couleur_lingerie, taille_lingerie, "
                      "prix_unit_lingerie, fk_cible) VALUES(:nom, :matiere, :modele, :quantite, :description, "
                      ":marque, :couleur, :taille, :prix_unit, :fk_cible);";
     
        QSqlQuery requete;
        requete.prepare(req);
     
        requete.bindValue(":nom", nom_l);
        requete.bindValue(":matiere", matiere_l);
        requete.bindValue(":modele", model_l);
        requete.bindValue(":quantite", quantite_l);
        requete.bindValue(":description", description_l);
        requete.bindValue(":marque", marque_l);
        requete.bindValue(":couleur", couleur_l);
        requete.bindValue(":taille", taille_l);
        requete.bindValue(":prix_unit", prix_unit_l);
       //requete.bindValue(":apercu", ui->champ_apercu->text());
        requete.bindValue(":fk_cible", 1 + ui->combo_cible->currentIndex());
        requete.exec();
        clean_champ();
     
        QMessageBox::information(this, "Bravo !", "Les données sur <strong>" + nom_l + "</strong> ont bien été enregistré dans la"
                                                      " catégorie <strong>" + ui->combo_cible->currentText() + "</strong>");
     
     
    }
    et voici le slot "alimentation_general
    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
    16
    17
     
    void Alimentation::alimentation_generale()
    {
       int index = ui->combo_type->currentIndex();
       if(index == 0)
       {
           alimenter_bd_v();
       }
       else if(index == 1)
       {
           alimenter_bd_c();
       }
       else if(index == 2)
       {
           alimenter_bd_l();
       }
    }
    le .h si ca peut aider
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #ifndef ALIMENTATION_H
    #define ALIMENTATION_H
     
    #include <QDialog>
    #include <QSqlQuery>
    #include <QFileDialog>
    #include <QStyleFactory>
    #include <QSqlRelationalTableModel>
     
    namespace Ui {
    class Alimentation;
    }
     
    class Alimentation : public QDialog
    {
        Q_OBJECT
     
    public:
        explicit Alimentation(QWidget *parent = nullptr);
        ~Alimentation();
        void clean_champ();
     
        void alimenter_bd_l();
        void alimenter_bd_c();
        void alimenter_bd_v();
     
    public slots:
        void afficher_gestion() const;
     
        void alimentation_generale();
     
    private slots:
        QString on_ouvrir_clicked();
     
        void on_bouton_annuler_clicked();
     
     
    private:
        Ui::Alimentation *ui;
     
        QSqlRelationalTableModel *model_l, *model_c, *model_v;
        QString fichier;
    };
     
    #endif // ALIMENTATION_H
    Je ne comprends pas trop ce qui se passe. le programme compile bien et s'exécute. Et quand je renseigne les données, je reçois bien le message provenant du QMessageBox que tout c'est bien enregistré. Mais quand j'interroge la BD avec MySql, la table "lingerie" est toujours vide.
    Est-ce parce que je définie mes modèle(model_l, model_c, model_v) dans le constructeur et les utilise ailleurs(dans mes fonctions)?
    Besoin d'aide svp

  5. #5
    Invité
    Invité(e)
    Par défaut
    Vérifie les retours des différentes fonctions (open(), exec()…). Il est probable que l'une d'elles échoue et dans le cas échéant, regarde le .lastError() de l'élément.

    Attention à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private slots:
        QString on_ouvrir_clicked();
    Tu ne pourras pas récupérer de valeur de retour ainsi. Un slot ne renvoie rien et a toujours un retour de type void.

  6. #6
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Bonsoir,
    Merci pour cette réponse. J'ai testé pratiquement tous mes retours(open(), select(), prepare(), et exec()). il se trouve que mon exec() ne marche pas. en effet la fonction "lastError()" appliquée sur mon exec() me dit: "Field 'fk_article' doesn't have a default value QMYSQL3: Unable to execute statement".
    Alors j'ai fait quelques recherches pour savoir comment gérer ce problème de valeur par defaut, et j'ai vu que je pouvais ajouter ceci "SET SQL_MODE = '';" juste au debut de ma requete. ce qui donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QString const req = "SET SQL_MODE = ' '; INSERT INTO lingerie (nom_lingerie, matiere_lingerie, modele_lingerie, quantite_lingerie, "
                      " description_lingerie, marque_lingerie, couleur_lingerie, taille_lingerie, "
                      "prix_unit_lingerie,apercu_lingerie, fk_cible) VALUES(:nom, :matiere, :modele, :quantite, :description, "
                      ":marque, :couleur, :taille, :prix_unit, :apercu, :fk_cible);";
    Alors quand le fait, ma fonction exec() s'exécute bien mais j'ai toujours rien dans mes tables dans MySQL.
    J'ai retesté à nouveau le retour de toutes mes fonctions(exec(), prepare(),....) et il se trouve que cette fois ci c'est prepare() qui ne marche pas. en fait lastErorr() me dit que la syntaxe n'est pas bonne. Justement le code pose probleme. donc mon problème à ce stade est de savoir comment resoudre le souci des valeurs par defaut. Je rappelle que j'ai MySql 5.5 installé et j'ai pas "my.cnf" dedans.

  7. #7
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    J'ai refait ma base de données et le problème de valeur par défaut est résolu. Du coup, MySql me sort sans souci ce que j'enregistre dans mon programme. Merci beaucoup.
    Cependant, bien que mon problème initial soit résolu, j'ai un problème avec mon slot que tu as mentionné plus haut. Je ne sais pas comment récupérer le chemin complet du fichier et le stocker dans le champ approprié de ma bd. Mais tu sais comment faire, stp explique moi. Je vais attendre jusqu'au soir avant de marquer ce sujet comme résolu, en espérant que tu me répondes avant s'il te plaît.
    Une fois de plus, ARIGATO (MERCI) pour ton aide.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gael21 Voir le message
    J'ai refait ma base de données et le problème de valeur par défaut est résolu. Du coup, MySql me sort sans souci ce que j'enregistre dans mon programme. Merci beaucoup.
    ok
    Citation Envoyé par gael21 Voir le message
    Cependant, bien que mon problème initial soit résolu, j'ai un problème avec mon slot que tu as mentionné plus haut. Je ne sais pas comment récupérer le chemin complet du fichier et le stocker dans le champ approprié de ma bd.
    Le récupérer à quel endroit précisément ? Est-ce dans le slot et donc la demande à l'utilisateur qui pose problème ou plus la transmission autre part ?

  9. #9
    Membre du Club Avatar de gael21
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 44
    Points : 41
    Points
    41
    Par défaut
    Bonsoir. Désolé du retard. j'ai réussi en faisant comme suit:
    j'ai commencé par déclarer 3 fonctions dans mon .h et voici leur definition dans mon .cpp
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void Alimentation::on_ouvrir_clicked()
    {
        fichier = QFileDialog::getOpenFileName(this, "Choisir une image pour l'article",
                                               " ", "Images (*.png *.jpg *.gif *.jpeg");
     
        QDir dir(fichier);
        nom_fichier = dir.dirName();
        dir.cdUp();
        chemin = dir.path();
     
        ui->champ_apercu->setPixmap(QPixmap(fichier));
        ui->champ_apercu->setScaledContents(1);
    }
     
    QString Alimentation::getNameFile()
    {
        return nom_fichier;
    }
     
    QString Alimentation::getchemin()
    {
        return chemin;
    }
    La première recupere le chemin et le nom du fichier dans deux variables séparées.
    Et les 2 autres fonctions ne font que de simples get afin que je puisse avoir acces sans soui.
    Now, voici ma fonction pour la lingerie uniquement(en restant dans mon exemple du début)
    alimentation_bd_l
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    void Alimentation::alimenter_bd_l()
    {
        modele_lingerie();
     
        QString nom_l = ui->champ_nom->text();
        QString marque_l = ui->champ_marque->text();
        QString model_l = ui->champ_modele->text();
        int taille_l = ui->champ_taille->value();
        QString matiere_l = ui->champ_matiere->text();
        QString couleur_l = ui->champ_couleur->text();
        double prix_unit_l = ui->champ_prix->value();
        int quantite_l = ui->champ_qte->value();
        QString apercu_l = getNameFile();
        QString description_l = ui->champ_description->toPlainText();
        QString cible_l = ui->combo_cible->currentText();
     
        while(nom_l.isEmpty() || marque_l.isEmpty() || model_l.isEmpty() ||
              matiere_l.isEmpty() || couleur_l.isEmpty() ||
                 description_l.isEmpty())
        {
            QMessageBox::warning(this, "Erreur: champ vide !", "Veuillez renseigner absolument tous les champs");
     
            return;
        }
     
        QString req = "INSERT INTO lingerie (nom_lingerie, marque_lingerie, couleur_lingerie, matiere_lingerie, "
                      " modele_lingerie, taille_lingerie, prix_unit_lingerie, cible, "
                      "quantite_lingerie, description_lingerie, apercu_lingerie) VALUES(:nom, :marque, :couleur, :matiere, :modele, :taille, "
                      ":prix_unit, :cible, :quantite, :description, :apercu);";
     
            QSqlQuery requete;
            (requete.prepare(req)) ? qDebug()<<"prepare ok" : qDebug()<<requete.lastError().text();
            requete.bindValue(":nom", nom_l);
            requete.bindValue(":marque", marque_l);
            requete.bindValue(":couleur", couleur_l);
            requete.bindValue(":matiere", matiere_l);
            requete.bindValue(":modele", model_l);
            requete.bindValue(":taille", taille_l);
            requete.bindValue(":prix_unit", prix_unit_l);
            requete.bindValue(":cible", ui->combo_cible->currentText());
            requete.bindValue(":quantite", quantite_l);
            requete.bindValue(":description", description_l);
            requete.bindValue(":apercu", getNameFile());
        if(requete.exec())
        {
            qDebug() <<"Tout c'est bien passé ." +requete.lastError().text();
        }
        else if(!requete.exec())
        {
            QMessageBox::critical(this, "Erreur", "ERREUR: " + requete.lastError().text() +
                                      " requete invalide");
            return;
        }
        clean_champ();
     
        QMessageBox::information(this, "Bravo !", "Les données sur <strong>" + nom_l + "</strong> ont bien été enregistré dans la"
                                                      " catégorie <strong>" + ui->combo_cible->currentText() + "</strong>");    
    }
    et ca marche à merveille.
    J'ai encore de tonnes de questions mais elles ne concernent plus ce sujet. Alors je le mets sur RESOLUuuuu. Merci à toi pour ton aide

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/08/2014, 18h20
  2. Empêcher l'insertion des données avec un trigger
    Par hazmza dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 24/06/2010, 16h24
  3. Oracle et insertion des données avec accents
    Par Lolitaaa dans le forum Oracle
    Réponses: 17
    Dernier message: 07/04/2009, 15h14
  4. [MySQL] Insertion des données avec les caractères spéciaux
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/05/2008, 11h16
  5. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 13h27

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