QPSQL Qt5



  • Доброго времени.
    Подобные вопросы уже задавались и оставались без ответов... Моя очередь. Я продвинулся немного дальше но, всё же, не решил задачу.
    Начём.

    1. Поставил Win 7 x64
    2. Поставил PostgreSQL 9.4 x32 (Да, да. Во всех мануалах, что я читал просят ставить 32-х битную посгрю.)
    3. Поставил psqlodbc 9.3.400
    4. Сделал libpq.a из libpq.lib через reimp. Получился файл размером 119 896 байт.
    5. Собрал C:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\psql\psql.pro:
      5.1. C:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\psql>
      qmake "INCLUDEPATH+=C:/psql/include" "LIBS+=C:/psql/lib/libpq.a" psql.pro
      5.2. mingw32-make
      и получил в папке C:\Qt\Qt5.4.0\5.4\Src\qtbase\plugins\sqldrivers файлы qsqlpsql.dll, qsqlpsql.a, qsqlpsqld.dll, qsqlpsqld.a
    6. Поместил полученные файлы в папки
      C:\Qt\Qt5.4.0\5.4\mingw491_32\lib
      C:\Qt\Qt5.4.0\5.4\mingw491_32\plugins\sqldrivers
      C:\Qt\Qt5.4.0\Tools\QtCreator\lib
      C:\Qt\Qt5.4.0\Tools\QtCreator\bin\plugins\sqldrivers
      C:\Qt\Qt5.4.0\Tools\mingw491_32\lib
    7. При запуске тестового проекта с телом
      @ qDebug() << "Available drivers: " << QSqlDatabase::drivers();
      QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
      qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");@
      получаю
      @Available drivers: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
      QSqlDatabase: QPSQL driver not loaded
      QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
      addDatabase() ERROR@
      Что я делаю не так???


  • в .pro добавил QT += sql ?
    еще может быть то что Qt не находит библиотеки
    PostgreSQL. их тоже желательно все скопировать из папки PostgreSQL в папку проекта или Qt



  • Вот .pro

    @QT += core gui

    QT += sql

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    TARGET = SQLTest
    TEMPLATE = app

    SOURCES += main.cpp
    mainwindow.cpp

    HEADERS += mainwindow.h@

    Вот main

    @#include "mainwindow.h"
    #include <QApplication>
    #include <QDebug>
    #include <QtSql>
    #include <QSqlDriver>

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

    qDebug() << "Available drivers: " << QSqlDatabase::drivers();
    
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    
    qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");
    
    return a.exec&#40;&#41;;
    

    }
    @

    А вот вывод

    @Отладка запущена
    Available drivers: ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
    QSqlDatabase: QPSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
    addDatabase() ERROR
    Отладка завершена@

    Удивляет то, что QPSQL он видит, но не подключает.
    I need help =\



  • Нашёл занятное описание:
    "PostgreSQL MinGW/Native Windows.":http://www.postgresql.org/docs/current/static/installation-platform-notes.html#INSTALLATION-NOTES-MINGW

    Поставил MinGW, прописал пути, но:
    @C:\MinGW>configure --host=x86_64-w64-mingw
    Unknown option --host=x86_64-w64-mingw@

    Есть совет, что делать дальше?



  • поиском найти все lib в PostgreSQL и поместить в папку где хранятся sql lib.
    Я эту проблему так решил. еще есть проги, напр. Resource Hacker. Она может сказать каких библиотек не хватает.

    а так делал соединение

    @
    #include <QSql>
    #include <QSqlQuery>
    #include <QSqlQueryModel>

    QSqlDatabase db;
    db= QSqlDatabase::addDatabase("QPSQL","MyConnect");
    db.setHostName("192.168.7.1");
    db.setDatabaseName("dbName");
    db.setUserName("postgres");
    db.setPassword("123456");
    db.setPort(5432);
    db.open()
    @



  • [quote author="DmitryHome" date="1422626879"]поместить в папку где хранятся sql lib.[/quote]

    А в Qt5 это где? У меня, кажется, тут:
    @C:\Qt\Qt5.4.0\Tools\QtCreator\bin\plugins\sqldrivers@

    Нашёл все .lib и .dll в посгре и скопировал в C:\Qt\Qt5.4.0\Tools\QtCreator\bin\plugins\sqldrivers. Результат нулевой.



  • Есть ещё идеи у кого-нибудь? Я совсем закопался.



  • @CMEXOTA
    В общем так мужик, хоть и старенький пост, но поскольку в гуглЕ запрос на Qt 5 postgresql QPSQL driver not loaded при использовании mingw один из первых даю коммент (даже зарегался для этих целей).
    Имею Qt 5.4 с динамической линковкой PostgreSQL 9.4, сделал следующее:

    1. Зашёл в плагины C:\Qt\Qt5.4.2\5.4\mingw491_32\plugins\sqldrivers и удалил библиотчечки qsqlpsql.dll и qsqlpsqld.dll (т.к. где то на qt сайте читал, что версии плагинов должны совпадать с фреймворком, да и после перекомпиляции размер в килобайтах отличается немного, подозрительно).
    2. Зашёл через cmd.exe сюда C:\Qt\Qt5.4.2\5.4\Src\qtbase\src\sql\drivers\psql , разумеется Qt с исходниками нужно устанавливать (там при установке пакета галка есть), далее выполнил:
      qmake.exe "INCLUDEPATH+="C:\PostgreSQL\9.4\include"" "LIBS+="C:\PostgreSQL\9.4\lib\libpq.lib"" psql.pro
      mingw32-make
      Это всё дело разумеется должно собраться без ошибок ;), не забываем в PATH винды прописать C:\Qt\Qt5.4.2\Tools\mingw491_32\bin
    3. После компиляции, библиотечки плагина упадут C:\Qt\Qt5.4.2\5.4\Src\qtbase\plugins\sqldrivers , забираем только dll'ки и кидаем сюда C:\Qt\Qt5.4.2\5.4\mingw491_32\plugins\sqldrivers (ну т.е. мы проигнорировали труды компиляции разработчиков Qt :) )
    4. Открываем проект, пишем QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); , запускаем сборку, создаются файлики промежуточные в папке сборки вашего проекта release или debug (что вы в данный момент делаете).
    5. Из папки C:\PostgreSQL\9.4\bin забираем файлики intl.dll, libeay32.dll, libpq.dll, ssleay32.dll в нашу папку, куда компилируется наша программа (в релиз или в дебаг).
    6. Запускаем бинарник или проект в креаторе и стартуем.
    7. Если много проектов с постгрессом и не нужно переносить, данные dll'ки кидаем сюда C:\Qt\Qt5.4.2\5.4\mingw491_32\bin , ну т.е. в то место, которое программа проверит при запуске на наличие dll (т.е. в те места, которые в PATH прописаны).


  • После сборки плагинов необходимо делать make install (mingw32-make install), собранные либы будут скопированы по назначению.

    --
    Peace


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.