Qt, sql & access

Fermé
kamy86 Messages postés 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010 - 2 sept. 2008 à 01:54
kamy86 Messages postés 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010 - 5 sept. 2008 à 15:22
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)"

10 réponses

Christounet Messages postés 1263 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 379
2 sept. 2008 à 10:11
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 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010
2 sept. 2008 à 13:54
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 1263 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 379
2 sept. 2008 à 17:12
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 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010
2 sept. 2008 à 17:29
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 1263 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 379
2 sept. 2008 à 17:53
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 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010
2 sept. 2008 à 18:24
ç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 1263 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 379
2 sept. 2008 à 18:47
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 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010
2 sept. 2008 à 19:05
j'ai fait un #include <QtSql>
0
Christounet Messages postés 1263 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 379
3 sept. 2008 à 11:49
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 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010
5 sept. 2008 à 15:22
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