Russian Qt Forum
Ноябрь 23, 2024, 22:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не запускается проект на Qt 4.7 + Postgres 9.0 (не видит драйвер QPSQL)  (Прочитано 11473 раз)
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. Перезагружать винду пробовал, все равно не видит...
« Последнее редактирование: Сентябрь 28, 2010, 15:22 от sindbad07 » Записан
crossly
Гость
« Ответ #1 : Сентябрь 28, 2010, 15:37 »

посмотри чего не хватает драйверу.... с помощью dependencywalker к примеру
Записан
sindbad07
Гость
« Ответ #2 : Сентябрь 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.

Приехали или есть решение?
Записан
sindbad07
Гость
« Ответ #3 : Сентябрь 28, 2010, 16:50 »

Короче справился с проблемой - подправил исходник драйвера, а точнее функцию получения версии (файл c:\Qt\2010.05\qt\src\sql\drivers\psql\qsql_psql.cpp), потом перекомпильнул и все заработало  Веселый


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;
}
Записан
Marat(Qt)
Гость
« Ответ #4 : Сентябрь 28, 2010, 18:05 »

Короче запустил кое-как, скопировав dll-ки из папки postgres\bin в свой проект
Оттуда вроде только libpq.dll надо.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Сентябрь 28, 2010, 19:27 »

Если самосборное, то да. А в обычной поставке там много dll'ок нужно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
iRQSX
Гость
« Ответ #6 : Сентябрь 29, 2010, 01:50 »

Короче запустил кое-как, скопировав dll-ки из папки postgres\bin в свой проект

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

Сообщений: 296



Просмотр профиля
« Ответ #7 : Июнь 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-ком?
« Последнее редактирование: Июнь 21, 2011, 10:37 от kolob » Записан

Qt 5.11.0, Win, MinGW
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Июнь 27, 2011, 09:19 »

Да. Все dll по зависимостям.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lea-id
Гость
« Ответ #9 : Январь 17, 2012, 08:11 »

решение проблемы в архиве, работает с PostgreSQL 9.1 и Qt 4.7.0 (Qt SDK 2010.05)
думаю, аналогично можно будет копилить и другие драйвера
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.268 секунд. Запросов: 22.