Qt, sql & access

kamy86 Messages postés 42 Statut Membre -  
kamy86 Messages postés 42 Statut Membre -
Bonjour,
voilà je veux faire un ajout dans une table dans ma base de données access, le code est correct, mais quand j'execute je vais verifier dans ma base de données mais rien n'est ajouté
voilà le.cpp
#include "FAjoutc.h"

FAjoutc::FAjoutc()
{
     setFixedSize(300, 250);


    nom = new QLineEdit();
    prenom = new QLineEdit();
    adresse = new QLineEdit();
    telephone = new QLineEdit();
    email = new QLineEdit();


    QFormLayout *defLayout = new QFormLayout;
    defLayout->addRow("&Nom :", nom);
    defLayout->addRow("&Prénom :", prenom);
    defLayout->addRow("&Adresse :", adresse);
    defLayout->addRow("&Numéro de téléphone :", telephone);
    defLayout->addRow("e_mail : ",email);
    valider = new QPushButton("&Valider", this);

    QGroupBox *groupDefinition = new QGroupBox("Ajout d'un client");
    groupDefinition->setLayout(defLayout);
    groupDefinition->setGeometry(30, 20, 150, 50);

        QVBoxLayout *boutonsLayout = new QVBoxLayout;

    boutonsLayout->addWidget(groupDefinition);
    boutonsLayout->addWidget(valider);
    setLayout(boutonsLayout);


    QObject::connect( valider, SIGNAL(clicked()), this, SLOT(opajout()) );
     connect(valider, SIGNAL(clicked()), this, SLOT(close()));


    }

 void FAjoutc::opajout()
{
    QSqlQuery query;
    query.prepare("INSERT INTO employees (Nom, Prenom, Adresse, Num Tel)"
    "VALUES(:Nom, :Prenom, :Adresse, :Num Tel)");
    query.bindValue(":Nom", nom);
    query.bindValue(":Prenom", prenom);
    query.bindValue(":Adresse", adresse);
    query.bindValue(":Num Tel",telephone );
    query.bindValue(":Email",email);
    query.exec();

    }


sachant que je suis allée dans le ODBC et j'ai fait ajouter "Driver do Microsoft Access (*.mdb)"
A voir également:

10 réponses

Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

Je ne suis pas un spécialiste Qt, mais dans ton code tu attribues une valeur a Email (par query.bindvalue) mais je ne trouve pas cette colonne dans ton ordre insert (ni dans le nom des colonnes, ni dans VALUES) , peut-être le problème vient-il de là ?

A plus
0
kamy86 Messages postés 42 Statut Membre
 
je l'ai ajouté mais le problème persiste, toujours aucun changement dans ma base de données, je crois qu'il y a des manipulations specifiques à access que je dois effectuer pour que le lien s'etabli, mais je ne sais pas quoi.
est ce que quelqu'un peut m'aider?
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

As-tu déjà vérifié que ta es bien connecté à ta base de données, voici un exemple de code pour se connecter à une base de données Access à partir de Qt
int main( int argc, char *argv[] )
{
    QApplication app ( argc, argv, FALSE );
 
    QSqlDatabase *defaultDB = QSqlDatabase::addDatabase(QODBC3);
    defaultDB->setDatabaseName( Nom de ta Base );
    defaultDB->setUserName( Ton nom de User );
    defaultDB->setPassword( Ton mot de passe );
    defaultDB->setHostName( Ton nom de serveur );
 
    if ( defaultDB->open() )  {
             // L'accès à la base de données est ok, on peut maintenant exécuter des ordres SQL

A plus
0
kamy86 Messages postés 42 Statut Membre
 
voilà mon main.cpp
#include <QApplication>
#include "FPrincipale.h"
#include <QtSql>
#include <QDebug>

int main(int argc, char* argv[])
{
    QApplication app (argc, argv);



    QSqlDatabase db =  QSqlDatabase::addDatabase("QODBC3");
    db.setHostName("localhost");
    db.setDatabaseName("monprojet");
    db.setUserName("khamsouch");
    db.setPassword("");
    bool ok = db.open();
    if (ok) {
        FPrincipale fenetre;
    fenetre.show();

    }


QObject::connect( qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit()) );


    return app.exec();

}

j'ai mis l'affichage de la fenêtre dans la condition, mais là l'affichage ne s'effectue pas , càd il n'y a pas de liaison avec ma base, qy'est ce que je fais là?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

Tu peux utiliser la variable QSqlDatabase.lastError pour connaître l'erreur SQL lors de la connexion
if (ok) {
        FPrincipale fenetre;
        fenetre.show();
         }
else {
       qDebug() << QSqlDatabase.lastError();
}

A plus
0
kamy86 Messages postés 42 Statut Membre
 
ça n'affiche rien, là chui allée dans mon panneau de configuration et j'ai ouvert l'ODBC, est ce que tu peut me dire quelles sont les etapes à faire pour etablir une connexion à partir de là?
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,

N'ayant pas Qt sur ma machine, je peux difficilement t'aider et comme je l'ai déjà dis dans mon premier post, je ne suis pas un spécialiste de Qt. As-tu déjà regardé dans l'aide de Qt ? J'ai aussi remarqué qu'il manque un include dans ton code (c'est peut-être une faute de frappe)
#include <QSqlDatabase>

A plus
0
kamy86 Messages postés 42 Statut Membre
 
j'ai fait un #include <QtSql>
0
Christounet Messages postés 1266 Statut Membre 1 393
 
Bonjour,
Sorry, mais j'ai mal lu ton code, peux-tu encore essayé le suivant stp ?
if (ok) {
        FPrincipale fenetre;
        fenetre.show();
         }
else {
       qDebug() << db.lastError();
}
pour voir si tu peux récupérer l'erreur lors de la connexion.
Merci et a plus
0
kamy86 Messages postés 42 Statut Membre
 
merci ce problème est reglé mais je rencontre un autre,j'ai fait la connexion avec ma base dans mon main, et maintenant j'essai de faire les requêtes, mais aucun changement dans ma base.Dans la base de données j'ai mis le numéro de client comme clé primaire et elle s'incrémente automatiquemnt mais je sais pas comment faire avec le code je crois que c'est à cause de ça que ça ne marche pas, je veux que ça s'affiche dans la fenêtre de l'ajout sans que l'utilisateur n'y touche.
comment je fais?
0