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 :

Le pilote pour PostgreSQL


Sujet :

Bases de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut Le pilote pour PostgreSQL
    Bonjour,
    J'essaie en vain de connecter un prog QT sous visual c++ à une base de donnée PostgreSQL... et je dois dire que je suis au bord de la crise de nerfs.

    Ma config, c'est QT 4.1.1 qui marche impeccable sous visual c++ et PostgreSQL 8.1 qui marche aussi sans pb.

    Le probleme : le driver QPSQL qui n'est a priori pas installé...

    J'ai tenté la fameuse manip suivante :

    configure -plugin-sql-psql -qt-sql-psql
    -I C:\Progra~1\PostgreSQL\8.1\include
    -L C:\Progra~1\PostgreSQL\8.1\lib
    -L C:\Progra~1\PostgreSQL\8.1\lib\libpq.a

    cd E:\Qt\4.1.0\src\plugins\sqldrivers\psql
    qmake -o Makefile "INCLUDEPATH+=C:\Progra~1\PostgreSQL\8.1\include" "LIBS+=C:\Progra~1\PostgreSQL\8.1\lib C:\Progra~1\PostgreSQL\8.1\lib\ms\libpq.lib" psql.pro
    qmake
    nmake

    rien n'y fait.

    J'ai un petit prog pour voir où j'en suis :

    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
    #include <QApplication>
    #include <QPushButton>
    #include <QtSQL>
    #include <QMessageBox>
     
    int main(int argc, char *argv[])
        {
            QApplication app(argc, argv);
     
     
     
               app.addLibraryPath("c:\\Qt\\4.1.1\\plugins\\sqldrivers\\");
    		QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    	      db.setHostName("localhost");
    		db.setUserName("xxxx");
    		db.setPassword("xxxxx");
    		db.setPort(5432);
    		bool ok = db.open();
     
               QString mess, mess2;
     
               if(ok==true)
    		{mess = "ok ";}else
    		{mess = "Unable to Connect " ;	};
     
    		bool avail = db.isDriverAvailable(db.driverName());
    		if(avail==true)
    		{mess += db.driverName() + " is AVAILABLE ";}else
    		{mess += db.driverName() + " NOT available ";};
     
    		QMessageBox::critical(0,"Connection", mess);
    		QString pat; 
               foreach (QString path, app.libraryPaths()) { 
               pat += path + "\n"; } 
               QMessageBox::critical(0, "les paths :", pat); 
     
    		QStringList ql = db.drivers();
     
    		for (int i=1;i<ql.size();i++){
    			mess2 += ql.at(i);}
    		QMessageBox::critical(0,"drivers", mess2);
     
            return app.exec();
        }
    Le programme est correctement compilé et executé .

    Et evidémment, QPSQL n'est pas là et il ne peut pas se connecter...Par contre, j'ai bien QODBC et QODBC3.

    Je suis débutant (et autodidacte) et que j'ai de grosses lacunes au niveau des liens avec les bibliotheques et des options de compilations. Je m'efforce de suivre des tutos ou forums sur le net....J'ai bien linké postgre et Qt dans visual (bin, lib et include). J'ai bien inséré Qt += sql dans mon .pro; par contre, j'ai des erreurs si j'y rajoute LIBS += libpq.lib .

    Enfin, si je rajoute (comme dans la doc Qt)
    #include "c:/Qt/4.1.1/src/sql/drivers/psql/qsql_psql.cpp"
    j'ai des warnings du type 'QPSQLDriver::QPSQLDriver : inconsistent dll linkage' et des erreurs fatales de link....sympa.

    Je suis au stage de la dépression concernant cette histoire... j'aimerais vraiment savoir ce qui cloche...si une bonne âme aurait une idée....je ne pourrais que m'incliner bien bas. Merci d'avance...


  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Apparemment, la bibliothèque n'est pas compilée ou n'est pas trouvée.
    Est-ce que dans le dossier PostReg/8.1, il y a la bibliothèque ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut
    Merci pour ta réponse !
    bhen...j'ai la bibliotheque libpq.lib dans le dossier 8.1/lib/ms et une dll du meme nom dans 8.1/bin.
    Les dossiers sont bien inscrits dans mes options VC++ Directories.
    Dans les plugins (QtDIR/plugins/sqldrivers), j'ai le qsqlpsql.dll.

    Est-ce qu'il s'agit de la bibliothéque dont tu parles ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    oui, normalement, c'est ça, c'est bizarre, je vais réfléchir un peu...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par Soundscape
    bhen...j'ai la bibliotheque libpq.lib dans le dossier 8.1/lib/ms et une dll du meme nom dans 8.1/bin.
    La DLL de PostgreSQL qui se trouve dans 8.1/bin est probablement nécessaire au plugin PostgreSQL de Qt ci-dessous. Il faut s'assurer que cette DLL soit disponible lors de l'exécution du programme. Je m'explique ci-dessous.
    Citation Envoyé par Soundscape
    Dans les plugins (QtDIR/plugins/sqldrivers), j'ai le qsqlpsql.dll.
    Ça c'est bon signe, ça veut dire que le plugin a été compilé et se trouve à l'endroit approprié pour être chargé par Qt.

    Par contre, même si Qt trouve le plugin, celui-ci ne peut être chargé. Je soupçonne que c'est parce qu'il n'arrive pas à trouver la DLL de PostgreSQL dont il dépend. En fait les DLL sont cherchées soit dans un dossier système tel que C:\windows, soit dans le répertoire de l'exécutable, mais certainement pas dans 8.1\bin. Il faut donc rendre cette DLL accessible au plugin. De manière générale, il est recommandé de placer les DLLs dont dépend un programme et ses plugins dans le répertoire de l'exécutable pour éviter le DLL hell.

    Pour vérifier les dépendances d'un exécutable ou d'une DLL, utiliser Dependency Walker.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut
    Merci pour ta réponse Dimitri

    J'ai tenté, rapidement faute de temps, de copier mes dlls dans le dossier de mon executable.... rien n'a changé. (j'ai même été jusqu'à copier intégralement les dossiers en question pour voir ).

    J'ai toujours correctement les drivers ODBC, ODBC3 et SQLLite...et TJS PAS PSQL ....c'est très étrange que ces drivers fonctionnent et pas celui que je veux...
    J'ai lancé Dependencies Walker sur mon exe...aucune dll n'est manquante (peu importe que les dlls soient dans le dossier de mon exe ou pas)... incompréhensible...

    En fait, j'ai trouvé une solutions alternative pour avancer... vu que le plug-ins QODBC est disponible, j'ai installé le driver psqlODBC : http://pgfoundry.org/projects/psqlodbc/
    J'arrive ainsi à me connecter sans pb à ma base postgre (après avoir configuré mon driver via "Data Sources" de "Administrative Tools").

    Cette solution me satisfait pour l'instant... j'aurai pourtant bien aimé résoudre le pb...

    Je regarde plus en détail dès que possible et vous tient au courant...

    Merci bcp

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Par défaut
    Citation Envoyé par Soundscape
    J'ai lancé Dependencies Walker sur mon exe...aucune dll n'est manquante (peu importe que les dlls soient dans le dossier de mon exe ou pas)... incompréhensible...
    En fait je pensais plutôt à lancer Dependency Walker sur le plugin PostgreSQL de Qt, pas sur l'exécutable. En effet, il ne manque manifestement pas de dépendance à l'exécutable et à la bibliothèque Qt puisqu'ils tournent sans problème. Par contre, il doit manquer une dépendance au plugin PostgreSQL de Qt, celui qui est dans QTDIR/plugins/sqldrivers.

Discussions similaires

  1. [PDO] PDO ne trouve pas le pilote pour PostgreSql
    Par Crackerz dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/06/2014, 14h50
  2. MCD ou MLD pour postgresql?
    Par jujuz dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/01/2005, 22h22
  3. syntax sql spéciale pour postgresql ???
    Par krimson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 15h23
  4. Quel hébergeur pour postgreSQL?
    Par Murielleg dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2004, 14h33
  5. Client windows pour postgresql
    Par Flint dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 10/09/2003, 16h26

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