Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

PostgreSQL et Qt

Bonjour à tous,

J'ai crée une base de données sous PostgreSQL que j'aimerais pouvoir remplir à l'aide d'un outil que je vais développer sous Qt.
Pour ce faire, il faut que je puisse accéder à cette base via Qt, j'ai donc suivi ce petit tuto:

https://openclassrooms.com/courses/maitrisez-les-bases-de-donnees-avec-qtsql

J'ai naïvement cru que ce serait aussi simple que ça, puis j'ai compilé et l'erreur " QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC QPSQL7 QPSQL" m'est apparu.

Problème que très grand nombre de personnes a rencontré, j'ai donc pu trouver X solutions sur Google pour régler mon soucis: j'ai réinstallé Qt 3 ou 4 fois à l'aide de différents tuto
j'ai mis dans mon dossier debug l'ensemble de ces DLL:

image

Certaines conseillées sur les forums d'autres conseillées par l'outil depends.exe.

J'ai tenté de suivre ce conseil:

http://doc.qt.io/qt-4.8/sql-driver.html#qpsql

Où on me demande de taper dans l'invite de commande Qt ces lignes:

cd %QTDIR%\src\plugins\sqldrivers\psql
qmake "INCLUDEPATH+=C:\psql\include" "LIBS+=C:\psql\lib\ms\libpq.lib" psql.pro
nmake

Le soucis étant que je n'ai pas de dossier psql dans les sqldrivers de Qt, j'ai juste des DLL.

et quand je tape le qmake il me dit qu'il ne trouve pas psql.pro.

Je travaille sur Qt 5.8 sur Windows avec MinGW et PostgreSQL 9.6.

C'est la première fois que j'effectue toutes ces manips, et je me suis un peu noyée dans l'océan de mes possibles erreurs :p

Si une âme charitable peut m'aider c'est chouette.

Bonne journée
png
png
dllDebugqpsql.png
33K

Réponses

  • Salut,
    J'ai supprimé le doublon.
    Ensuite pour ton problème :
    si on part du principe que ta librairie libpq.dll est compatible avec le plugin Qt, alors le plugin doit être placé dans un dossier sqldrivers (à moins que le dossier racine soit déclaré dans le code).
  • bonjour,

    Merci pour la réponse. Le dossier source de la librairie libpq.dll est déclaré dans mon .pro grâce à la ligne "INCLUDEPATH += "C:/Program Files (x86)/PostGreSQL/9.6/lib"
  • Bonjour,
    Je suis d'accord mais le fichier qsqlpsql.dll (pas la dll postgres mais le plugin Qt) doit être dans un dossier sqldrivers à la racine de l'exe SAUF si tu as spécifié dans le code source (et non dans le .pro) la racine de l'exe via addLibraryPath
  • Je pense avoir trouvé mon soucis mais n'ai pas encore trouvé la solution:
    Je n'ai pas de directory src/ dans mon directory Qt, j'ai bien un dossier sqldrivers, mais n'ai pas de psql.pro ce qui est donc assez gênant pour compiler le driver psql!
    J'ai essayé via le maintenance tool (update) de télécharger les sources mais il m'affiche un message d'erreur : "could not retrieve remote tree", je n'ai pas encore trouvé sur le net un autre endroit ou récupérer ces sources.

  • Salut,

    sois tu réinstalles Qt pour récupérer les sources et compiler le plugin à la mano

    sois tu regardes quelle version il te faut de postgresql
    un exemple, si tu as Qt 5.4 ou supérieure alors va à l'adresse : https://wiki.qt.io/Qt_5.6_Tools_and_Versions
    et tu verras que la version de PSQL utilisée est la 9.1.9.
    Donc télécharge psql à partir de cette version, la version actuelle 9.6.1 devrait fonctionner mais j'ai pas testé.

    Après si on regarde ici : http://doc.qt.io/qt-5/sql-driver.html
    ils parlent de la version 7.3 comme minimum.
  • Salut,

    Merci pour la réponse.

    J'ai déjà essayé de réinstaller Qt en suivant ce tuto: https://openclassrooms.com/forum/sujet/tuto-installer-qt-sous-windows

    mais pas de dossier src à la clé.

    Pour les versions, d'après ce que tu me dis je devrais être dans les clous: Qt 5.8 et PostgreSQL 9.6... ?

    J'ai trouvé ce lien: https://forum.qt.io/topic/68748/qsqldatabase-qpsql-driver-not-loaded-once-again/5

    Ce serait le fait de compiler avec minGW qui me handicaperait... Je vais essayer de suivre ce qui se dit là-dessus
  • Alors pour l'installation de Qt : http://download.qt.io/official_releases/online_installers/qt-unified-windows-x86-online.exe

    Ensuite il y a de grande chance que le problème vienne du fait que les binaries de psql ont été compilés avec msvc.
    J'ai aussi le test, avec msvc pas de soucis pour se connecter à la base de données. Avec mingw, le plugin n'est pas chargé.

    Donc avec le lien que je t'ai donné, tu pourras télécharger les sources de Qt
  • Ce serait donc parce que j'ai fait une offline install.

    Je ne peux pas faire install online à partir du boulot, j'essayerais ce soir chez moi.

    Merci
  • 24 Feb modifié
    Bonjour,

    Je reviens avec quelques nouvelles, pour ceux qui auraient le même problème que moi et pour ceux qui auraient des solutions!
    J'ai fait l'installation online sur mon PC grâce à ton lien babaOroms, mais toujours pas de sources disponibles.
    Je les ai donc téléchargées séparément.
    J'ai retrouvé le fameux psql.pro et suis actuellement ce tuto:

    https://www.developpez.net/forums/blogs/69141-tondeurh/b1381/compiler-driver-qt-psql-sous-qt-5-0-2-mingwin/

    J'ai réussi à lancer sans encombre la commande qmake (il faut penser, sous Windows, à rentrer le chemin complet de la commande).

    Je n'arrive pas à exécuter la commande mingwin32-make et pour cause: je n'ai pas de fichier Qt5Sql.lib dans le directory lib de Qt.

    message d'erreur:

    "No rule to make target 'C:/Qt/5.5/mingw492_32/lib/Qt5Sql.lib', needed by '.obbj\release\main.obj'"
  • J'ai recompilé le plugin .pro avec cette commande: qmake -o Makefile INCLUDEPATH+="C:\PostgreSQL\9.2\include" "LIBS+=C:\PostgreSQL\9.2\lib\libpq.lib" psql.pro
    Qaudn je lance le mingw32-make je me retrouve avec cette erreur:
    "make(e=2): le fichier spécifié est introuvable
    Makefile.release:384:recipe for target '.obj/release/main.o' failed

    ligne 384 du makefile.release:
    "$(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj\release\main.o main.cpp"

    Je n'ai pas de main.o sous obj/release/main.o, c'est peut être ça?
  • Salut
    en remplaçant les "\" par des "/"
  • Je vais essayé!
    J'ai aussi trouvé ça:
    http://forum.qtfr.org/discussion/15604/qt-5-et-xampp-MySQL

    Je vois que tu n'es pas à ton premier sauvetage sur ce forum!
  • C'est bon, j'ai bien mes main.o, et l'erreur suivante à l'exécution du mingw32-make:

    "..\..\..\sql\drivers\psql\qsql_psql.cpp:51:24: fatal error: include-fe.h: No such file or directory"

    Sauf que ce fichier existe bel et bien sous C:/Program Files/PostgreSQL/9.6/include.

    J'ai donc essayé dans le fichier qsql_psql.cpp de lui mettre le chemin en dur, mais ça ne marche pas plus.

    J'ai essayé de suivre ce que tu disais sur l'autre topic:
    "Le mysql.h que make demande est celui dans C:\Program Files\MySQL\MySQL Connector C++ 1.1.2\include
    Donc si tu fais :
    set QTDIR=C:\Qt\Qt5.0.1\5.0.1
    set BIN=%QTDIR%\bin;%QTDIR%\Tools\mingw\bin;%BIN%
    set MYSQL=C:\Program Files\MySQL\MySQL Connector C++ 1.1.2
    set PATH=%BIN%;%PATH%
    cd %QTDIR%\Src\qtbase\src\plugins\sqldrivers\mysql
    qmake "INCLUDEPATH+=%MYSQL%\include" "LIBS+=%MYSQL%l\lib\libmysql.lib" mysql.pro
    mingw32-make"

    J'ai tout ce qu'il faut dans le PATH, et même si j'ai pas utilisé de variable d'environnement pour le faire, j'ai l'impression que le qmake correspond...
  • Bonjour,

    Toujours pas réussi à résoudre ce soucis de include-fe.h
    Je pense que lors de la compilation du fichier qsql_psql.cpp, il ne va pas chercher le fichier include-fe.h au bon endroit (ça me parait être la solution la plus logique) sauf que je ne sais pas où modifier ce chemin?

    dans le psql.pro j'ai rajouté in INCLUDEPATH vers un dossier sans espace contenant toutes les librairies postgre:
    C:/headersPostGre, mais ça n'a pas aidé

    Si quelqu'un peut m'aider à avancer... Merci d'avance
  • Salut,

    pas de fichier include-fe.h,
    si on regarde le source de Qt ils font un
    #include <libpq-fe.h>
    qui se trouve dans C:/Program Files/PostgreSQL/9.6/src/interfaces/libpq
  • Merci... A force de tourner en rond je fais n'importe quoi et inversement!

    Effectivement, du coup lorsque j'exécute la commande 'C:/Qt/Tools/mingw492_32/bin/mingw32-make.exe -f Makefile.Debug' j'avance un peu plus dans la compilation:

    Je tombe sur ce type d'erreur:

    .../qspql_psql.cpp: 1461:undefined reference to 'PQnotifies' 'PQstatues' 'PQsockets'... Etc.

    mingw32-make.exe:***[...\plugins\sqldrivers\qsqlpsqld.dll] Error 1

    J'essaie de comprendre ce qu'il se passe...

    Merci d'avance
  • Salut, on est plus sur un problème de linkage que de compilation
    redonne la commande du qmake.
  • Salut, merci de ton aide.

    C'est à dire un problème de linkage?

    Voilà ma commande qmake:

    C:/Qt/5.5/mingw492_32/bin/qmake.exe "INCLUDEPATH+=C:/headersPostGre" "LIBS+=C:/Program Files/PostgreSQL/9.6/lib/libpq.lib" psql.pro

    Où C:/headersPostGre est un dossier que j'ai crée et où j'ai copié le dossier include de Postgre afin d'avoir un chemin sans espace
  • 8 Mar modifié
    Re,

    bon j'ai fait la manip complète pour voir si ça fonctionne chez moi en Qt5.6 + mingw
    j'y suis arrivé, donc je devrai pouvoir t'aider :

    Juste pour le test, j'ai téléchargé les binaries de postgresql à l'adresse https://enterprisedb.com/postgresql-962-binaries-win32?ls=Crossover&type=Crossover

    J'ai décompressé et copier le dossier pgsql sur mon disque d:

    je suis allé dans le dossier du plugin Qt :
    j'ouvre une cmd :

    1) cd D:\dev\Qt_comm\5.6\mingw49_32\bin
    2) qtenv2.bat
    3) cd D:\dev\Qt_comm\5.6\Src\qtbase\src\plugins\sqldrivers\psql
    4) qmake "INCLUDEPATH+=D:/pgsql/include" "LIBS+=D:/pgsql/lib/libpq.lib" psql.pro
    5) mingw32-make
    6) mingw32-make install

    Ensuite j'ai créé un projet utilisant une connexion postgre,
    une fois compilé j'ai copié dans le dossier de l'exe les libs suivantes :

    libeay32.dll
    libiconv-2.dll
    libintl-8.dll
    libpq.dll
    ssleay32.dll

    Pour déployer le soft :
    dans le dossier de l'exe : windeployqt myproject.exe
  • Ok super, j'essaie tout ça et je reviens vers toi
  • Bon c'est top j'ai vraiment beauuucoup avancé:

    Juste pour le test, j'ai téléchargé les binaries de postgresql à l'adresse https://enterprisedb.com/postgresql-962-binaries-win32?ls=Crossover&type=Crossover => OK

    J'ai décompressé et copier le dossier pgsql sur mon disque d: Je l'ai décompréssé sur le C à l'emplacement d'installation de Qt et Postgre => OK

    je suis allé dans le dossier du plugin Qt :
    j'ouvre une cmd :

    1) cd D:\dev\Qt_comm\5.6\mingw49_32\bin
    2) qtenv2.bat
    => Ok réponse de la console: "echo off Setting up environment for Qt usage"
    3) cd D:\dev\Qt_comm\5.6\Src\qtbase\src\plugins\sqldrivers\psql
    4) qmake "INCLUDEPATH+=D:/pgsql/include" "LIBS+=D:/pgsql/lib/libpq.lib" psql.pro
    OK pas de réponse de la console
    5) mingw32-make
    6) mingw32-make install
    Les deux se sont déroulés à priori sans encombre (pas vu d'erreur en regardant les sorties)

    Ensuite j'ai créé un projet utilisant une connexion postgre, => OK, fait, à ce moment-là, il me dit toujours plugins not loaded
    Mon code dans le main:
    #include
    #include
    #include

    #define q2c(string) string.toStdString()

    int main(int countArg, char **listArg)
    {
    QCoreApplication app(countArg, listArg);

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("128.8.2.59");
    db.setUserName("projetlabo");
    db.setPassword("12345");
    db.setDatabaseName("databaselabo");
    db.setPort(5422);

    if(db.open())
    {
    std::cout une fois compilé j'ai copié dans le dossier de l'exe les libs suivantes :

    libeay32.dll
    libiconv-2.dll
    libintl-8.dll
    libpq.dll
    ssleay32.dll
    OK


    Pour déployer le soft :
    dans le dossier de l'exe : windeployqt myproject.exe
    la commande semble bien se passer, sauf que quand par la suite je lance l'exe j'obtiens une erreur:

    Le point d'entrée de procédure _ZNSt7_cx1112basic_string........ est introuvable dans la bibliothèque de liens dynamiques /chemin vers l'exe/

    Je vais parcourir le net voir ce à quoi ça peut correspondre, mais ça m'a déjà bien fait avancé! Donc un grand merci à toi
  • Les .dll que j'ai ajouté au dossier debug, il fallait bien que je les récupère dans C:/pgsql/bin ? car d'après ce que tu dis sur un autre sujet, c'est un problème de dll, prises au mauvais endroit.

    Mon .pro:

    QT += core sql # On rajoute SQL
    CONFIG += console # On rajoute la console


    INCLUDEPATH += "C:/Program Files/PostGreSQL/9.6/bin"
    INCLUDEPATH += "C:/Program Files/PostGreSQL/9.6/lib"
    INCLUDEPATH += "C:/Program Files/PostGreSQL/9.6/include"
    INCLUDEPATH += "C:\Qt\Qt5.5\mingw492_32\plugins\sqldrivers"

    #LIBS += "C:\Qt\5.5\mingw492_32\plugins\sqldrivers\qsqlpsql.dll"
    #LIBS += "C:\Qt\5.5\mingw492_32\plugins\sqldrivers\qsqlpsqld.dll"
    #LIBS += "C:\Qt\5.5\mingw492_32\bin\libgcc_s_dw2-1.dll"
    #LIBS += "C:\Qt\5.5\mingw492_32\bin\QT5Core.dll"
    #LIBS += "C:\Qt\5.5\mingw492_32\bin\QT5sql.dll"
    #LIBS += "C:\Program Files\PostgreSQL\9.6\bin\libintl-8.dll"

    SOURCES += \
    main.cpp # La liste des fichiers de source

    sachant que j'ai mis toutes les LIBS en commentaire après avoir effectué toutes les lignes de commande pour voir si ça me supprimait le soucis!
  • J'ai refais la manip:

    CA FONCTIONNE!! Sauf quand j'exécute le windeployqt myproject.exe où ça ne fonctionne plus, mais au moins ma connexion entre Qt et PostgreSQL est possible!

    Merci!!!!!
  • Alors, j'ai effectivement pris les dlls dans le dossier bin de postresql.
    Ensuite il faut effectivement enlever les LIBS de ton projet puisque core sql feront le boulot à ta place.
    Une fois les dll postgresql copiées essaie de lancer ton exe via qtcreator en enlevant préalablement les fichiers/dossiers ajoutés par windeployqt.
Connectez-vous ou Inscrivez-vous pour répondre.