Russian Qt Forum

Qt => Базы данных => Тема начата: sindbad07 от Сентябрь 28, 2010, 15:06



Название: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: sindbad07 от Сентябрь 28, 2010, 15:06
Поставил новую Qt SDK 4.7, PostgreSQL 9.0, собрал драйвер для него (windows-vista-32bit), все пути прописал, даже подсовывал все либы к экзешнику, но программа драйвер ни в какую не видит, пишет мне:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC

Демка SQL Browser тоже не показывает драйвер postgres.

Подскажите пожалуйста в чем может быть дело, кто-то уже наверно перешел на новую версию postgres'a.

Спасибо за внимание.

P.S. Перезагружать винду пробовал, все равно не видит...


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: crossly от Сентябрь 28, 2010, 15:37
посмотри чего не хватает драйверу.... с помощью dependencywalker к примеру


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: sindbad07 от Сентябрь 28, 2010, 15:43
Короче запустил кое-как, скопировав dll-ки из папки postgres\bin в свой проект
В программе запросы работают, но не работают модели (не выводят данные), при этом отладчик пишет:

This version of PostgreSQL is not supported and may not work.
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

Приехали или есть решение?


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: sindbad07 от Сентябрь 28, 2010, 16:50
Короче справился с проблемой - подправил исходник драйвера, а точнее функцию получения версии (файл c:\Qt\2010.05\qt\src\sql\drivers\psql\qsql_psql.cpp), потом перекомпильнул и все заработало  :D


static QPSQLDriver::Protocol getPSQLVersion(PGconn* connection)
{
    QPSQLDriver::Protocol serverVersion = QPSQLDriver::Version6;
    PGresult* result = PQexec(connection, "select version()");
    int status = PQresultStatus(result);
    if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) {
        QString val = QString::fromAscii(PQgetvalue(result, 0, 0));
        QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)"));
        rx.setMinimal(true); // enforce non-greedy RegExp
        if (rx.indexIn(val) != -1) {
            int vMaj = rx.cap(1).toInt();
            int vMin = rx.cap(2).toInt();

            switch (vMaj) {
            case 7:
                switch (vMin) {
                case 0:
                    serverVersion = QPSQLDriver::Version7;
                    break;
                case 1:
                case 2:
                    serverVersion = QPSQLDriver::Version71;
                    break;
                default:
                    serverVersion = QPSQLDriver::Version73;
                    break;
                }
                break;
            case 8:
                switch (vMin) {
                case 0:
                    serverVersion = QPSQLDriver::Version8;
                    break;
                case 1:
                    serverVersion = QPSQLDriver::Version81;
                    break;
                case 2:
                default:
                    serverVersion = QPSQLDriver::Version82;
                    break;
                }
                break;
            default:
                break;
            }

           //////////////////////////////////////////////////////////////////
   //добавлено (для новой версии 9.0)
   if ( vMaj == 9 ) serverVersion = QPSQLDriver::Version82;
           /////////////////////////////////////////////////////////////////

        }
    }

    PQclear(result);

    if (serverVersion < QPSQLDriver::Version71)
        qWarning("This version of PostgreSQL is not supported and may not work.");

    return serverVersion;
}


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: Marat(Qt) от Сентябрь 28, 2010, 18:05
Короче запустил кое-как, скопировав dll-ки из папки postgres\bin в свой проект
Оттуда вроде только libpq.dll надо.


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: Пантер от Сентябрь 28, 2010, 19:27
Если самосборное, то да. А в обычной поставке там много dll'ок нужно.


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: iRQSX от Сентябрь 29, 2010, 01:50
Короче запустил кое-как, скопировав dll-ки из папки postgres\bin в свой проект

Посмотри мой пост http://www.prog.org.ru/index.php?topic=14949.msg98875#msg98875
Надо прописать в Path пути тогда копировать не надо. Есть libpq "самосборная" могу выложить


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драl
Отправлено: kolob от Июнь 20, 2011, 16:56
Собрал драйвер Postgres.
В директории sqldrivers такие файлы:
Цитировать
libqsqlite4.a
libqsqlited4.a
libqsqlpsql4.a
libqsqlpsqld4.a
qsqlite4.dll
qsqlited4.dll
qsqlpsql4.dll
qsqlpsqld4.dll
При попытке подключится выдает ошибку:
Цитировать
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE
QSqlError(-1, "Driver not loaded", "Driver not loaded")
Пробовал скопировать dll из postgres/bin в корень проекта, но ошибка остается.
Помогите разобраться.

Скопировал dll из PostgreSQL/bin в проект, выдает тоже самое
Цитировать
This version of PostgreSQL is not supported and may not work.

Спасибо sindbad07. Подредактировал исходник, вроде подключилось, без ошибок!

Ответьте на такой вопрос: dll теперь нужно постоянно таскать с exe-ком?


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: Пантер от Июнь 27, 2011, 09:19
Да. Все dll по зависимостям.


Название: Re: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)
Отправлено: lea-id от Январь 17, 2012, 08:11
решение проблемы в архиве, работает с PostgreSQL 9.1 и Qt 4.7.0 (Qt SDK 2010.05)
думаю, аналогично можно будет копилить и другие драйвера