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 :

Impossible d'exécuter une requête


Sujet :

Bases de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Impossible d'exécuter une requête
    Bonjour,

    J'essais d'accéder à une BD spatiale Postgresql. La connexion est établie avec la BD. Mai l'affichage du résultat de la requête ne se fait pas. Voici le code:

    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
     
    #include <QApplication>
    #include <QMessageBox>
    #include <QtSql>
    #include <QTableView>
    #include <iostream>
     
    int main(int argc, char *argv[])
        {
            QApplication app(argc, argv);
     
            QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
            db.setDatabaseName ("amsdb");
            db.setHostName("localhost");
            db.setUserName("amsdb");
            db.setPassword("");
            db.setPort(5433);
     
            QString report = "";
            if(db.open())
                report += "Connection OK\n";
            else
                report += "Unable to Connec\nt";
     
            if(db.isDriverAvailable(db.driverName()))
                report += db.driverName() + " is available\n";
            else
                report += db.driverName() + " is NOT available\n";
            report += db.lastError().text() + "\n";
     
            //1ere methode testée
            //QSqlQuery q = new QSqlQuery();
            //q.prepare("SELECT * FROM shape_import_table");
     
            //2eme methode testée
            QSqlQuery q;
            q.exec("the_geom from (select * from shape_import_table) foo USING UNIQUE gid");
     
            if (q.exec())
                report += "Requète exécutée\n";
            else
                report += q.lastError().text() + "\n";
     
            QMessageBox::critical(0,"Report", report);
     
            QSqlTableModel *model;
            model->setTable("shape_import_table");
            model->setEditStrategy(QSqlTableModel::OnManualSubmit);
            model->select();
     
            QTableView *view = new QTableView;
            view->setModel(model);
            view->setWindowTitle("Shape Import Table");
            view->show();
     
            db.close();
            return app.exec();
        }
    Dans le MessageBox qui doit m'afficher les messages d'erreurs éventuellement le résultat de q.lastError().text() donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERREUR: erreur de sytaxe à la fin de l'entrée
    LINE 1: execute
    QPSQL: unable to create query
    Si quelqu'un a une idée pour corriger cette erreur je lui serais bien reconnaissante!

    Merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Est ce que ton application s'execute "instantanément" ? Je veux dire, est ce qu elle s'ouvre et hop se ferme directement ?

    Si non, es tu sur que la boite ne s'affiche pas ? même dans la barre des taches ?

    Pour etre sur, creer un widget, fais un show, puis renseigne la comme parent dans la méthode QMessageBox::critical(monWidget,...).

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Est ce que ton application s'execute "instantanément" ? Je veux dire, est ce qu elle s'ouvre et hop se ferme directement ?

    Si non, es tu sur que la boite ne s'affiche pas ? même dans la barre des taches ?

    Pour etre sur, creer un widget, fais un show, puis renseigne la comme parent dans la méthode QMessageBox::critical(monWidget,...).

    G.
    En fait le QMessageBox s'affiche bien comme il faut et me donne les message d'erreur ou de test que j'ai demandé dans mon code pour voir si la connexion est bien effectuée avec la BD avec le bon driver et ensuite si la requête est bien exécutée. Pour cette dernière vérification je fait appel à q.lastError().text() en cas d'erreur et c'est ce qui me donne le message suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERREUR: erreur de sytaxe à la fin de l'entrée
    LINE 1: execute
    QPSQL: unable to create query
    D'autre part je n'arrive pas à afficher l'objet view qui est un QTableView. Apparement j'ai un problème dans cette partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            QSqlTableModel *model;
            model->setTable("shape_import_table");
            model->setEditStrategy(QSqlTableModel::OnManualSubmit);
            model->select();
     
            QTableView *view = new QTableView;
            view->setModel(model);
            view->setWindowTitle("Shape Import Table");
            view->show();
    je n'ai pas d'erreur de build mais à l'exécution et après l'affichage de la QMessageBox j'ai une boite de dialogue du débogueur de Visual Studio 2008 qui s'ouvre en affichant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    une exception win32 non gérée s'est produite dans monprogramme.exe [5460]

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé la solution pour la deuxième erreur dont j'ai parlé (l'affichage de la table). Je devais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QSqlTableModel *model = new QSqlTableModel;
    et non

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    q.exec("the_geom from (select * from shape_import_table) foo USING UNIQUE gid");
    Tu es sûr que ta requete est correct ? Je n'ai que des bases en sql, mais il doit manquer un mot au début non ? et le mot clé foo, il sert à quoi ?

    Sinon, il existe la méthode pour vérifier si ta requete est valide, avant de l'éxécuter.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    réponse très tardive, mais puisque la discussion est toujours ouverte :
    db.setPort(5433);
    le port par défaut de postgresql est le 5432 et non 5433.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Impossible d'exécuter une requête
    Par Cyanatide dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/03/2013, 09h48
  2. Réponses: 2
    Dernier message: 08/03/2012, 13h28
  3. [CR XI] Impossible d'exécuter une requête SQL
    Par staika dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/08/2009, 10h32
  4. [MySQL] Impossible d'exécuter une requête
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 17/04/2008, 15h12
  5. MySQL 5 : Impossible d'exécuter une requête
    Par SebastienM dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/11/2007, 18h18

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