Russian Qt Forum

Qt => Базы данных => Тема начата: iRQSX от Сентябрь 21, 2010, 20:37



Название: QPSQL в windows
Отправлено: iRQSX от Сентябрь 21, 2010, 20:37
Доброго времени суток! Заранее извиняюсь за то что снова поднимаю заезженную тему. Не могу найти нормального решения проблемы...
Итого имеется QT 4.7 Qtcreator 2.0.1 установленные из exeшника под win7. при попытке соединения с постгрис базой идет стандартная ошибка "QPSQL driver not loaded" ибо QPSQL нет в плагинах. Я не пойму надо пересобирать всю qt c qtcreator'ом или просто собрать драйвер? Или просто взять готовую библиотеку? Объясните что и как делать пожалуйста!
Пытался собрать по этому примеру - http://doc.qt.nokia.com/4.6/sql-driver.html#general-information-about-the-qpsql-driver (http://doc.qt.nokia.com/4.6/sql-driver.html#general-information-about-the-qpsql-driver) на стадии make валят ошибки. Делал так

 qmake "INCLUDEPATH+=c:\Program Files\PostgreSQL\9.0\include" "LIBS+=c:\Program Files\PostgreSQL\9.0\lib\libpq.lib"psql.pro

make


Ошибки типа
...
..\..\..\sql\drivers\psql\qsql_psql.cpp:58:22: error: libpq-fe.h: No such file o
r directory
..\..\..\sql\drivers\psql\qsql_psql.cpp:59:23: error: pg_config.h: No such file
or directory
...
Ну и соответственно ругается на финкции в этих хидерах хотя они лежат в папке с постгрес...


Название: Re: QPSQL в windows
Отправлено: iRQSX от Сентябрь 23, 2010, 10:14
Ок. Не знаю в чем был баг но прописав INCLUDEPATH+= и LIBS+= прямо в .pro скомпилил прямо в qtcreatore. В qt\plugins\sqldrivers\ появились 4 файла:

libqsqlpsql4.a
libqsqlpsqld4.a
qsqlpsql4.dll
qsqlpsqld4.dll

Вроде все верно, но все равно вижу при запуске своей проги
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC

Не бросайте в беде!


Название: Re: QPSQL в windows
Отправлено: BaltikS от Сентябрь 23, 2010, 11:22
Сделай так, чтобы libpq.dll со всеми зависимостями была увидена твоей программой


Название: Re: QPSQL в windows
Отправлено: iRQSX от Сентябрь 23, 2010, 13:11
Добавил в PATH
c:\psql\lib\;
c:\psql\bin\

Ошибка стала еще интересней ;D
Код:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QPSQL7 QPSQL QSQLITE QODBC3 QODBC
Указать в качестве драйвера QPSQL7 тоже пробовал...


Название: Re: QPSQL в windows
Отправлено: asvil от Сентябрь 23, 2010, 15:18
Сделайте так:
Код:
QLibrary("sqldrivers/qsqlpsql");
library.load();
qDebug() << library.errorString();
Возможно увидите причину ваших бед.

Я смог запустить драйвер только после того как скопировал postgres библиотеки в папку с программой.


Название: Re: QPSQL в windows
Отправлено: iRQSX от Сентябрь 27, 2010, 10:36
после перезагрузки компа драйвер заработал :)
А вот по поводу QLibrary("sqldrivers/qsqlpsql"); Так и не смог подгрузить "не находит модуль"...


Название: Re: QPSQL в windows
Отправлено: sindbad07 от Сентябрь 28, 2010, 16:01
А у Вас qt с новым постгресом нормально работает?
У меня просто пишет:
This version of PostgreSQL is not supported and may not work.
И ни одна модель не работает...


Название: Re: QPSQL в windows
Отправлено: iRQSX от Сентябрь 29, 2010, 00:58
Ругается так же, но db.open() дает true, т.е. вроде подключается. но работать с базой пока не пробовал!

Код
C++ (Qt)
QSqlQuery query;
   if (!query.exec("CREATE TABLE test(test1 character(1), test2 integer) WITH (OIDS=FALSE);
                         ALTER TABLE test OWNER TO postgres;"
))
       {
       qDebug()<<query.lastError().text();
       }
   else{
       qDebug()<<"yes";
       }
Выдает yes, таблица появляется. postgresql-9.0.0-1-windows. А вот до моделей пока недорос ибо "чайник".
попройте этот код и сообщате. А то самому интересно!

ответ на ваш вопрос http://www.prog.org.ru/index.php?topic=15041.msg99392#msg99392


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 10, 2011, 11:11
Добрый день! Люди добрые помогите собрать драйвер postgres9. Пытаюсь собрать студией 6. Пробовал как описано выше, но что то не получается.
В файле qsql_psql.h в инклюдах включается файл libpq-fe.h но такого файла в постгресе нет. есть только libpq-fs.h.


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 10, 2011, 11:16
Изменил в инклюдах на файл libpq-fs.h
выдает ошибки:
Цитировать
C:\Qt\3.3.3\src\sql\drivers\psql>qmake psql.pro

C:\Qt\3.3.3\src\sql\drivers\psql>nmake

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

        cl -c -nologo -Zm200 -W3 -MD -O1  -DUNICODE -DQT_DLL -DQT_THREAD_SUPPORT
 -DQT_ACCESSIBILITY_SUPPORT -DQT_NO_DEBUG -I"." -I"C:\Program" -I"Files\PostgreS
QL\9.0\include" -I"C:\Qt\3.3.3\include" -I"C:\Qt\3.3.3\src\sql\drivers\psql" -I"
tmp\moc\release_mt_shared" -I"C:\Qt\3.3.3\mkspecs\win32-msvc" -Fotmp\obj\release
_mt_shared\ @C:\Users\0C18~1\AppData\Local\Temp\nma04148.
qsql_psql.cpp
.\qsql_psql.h(61) : error C2143: syntax error : missing ';' before '*'
.\qsql_psql.h(61) : error C2501: 'PGresult' : missing storage-class or type spec
ifiers
.\qsql_psql.h(61) : error C2501: 'result' : missing storage-class or type specif
iers
.\qsql_psql.h(88) : error C2629: unexpected 'class QPSQLDriver ('
.\qsql_psql.h(88) : error C2238: unexpected token(s) preceding ';'
.\qsql_psql.h(106) : error C2143: syntax error : missing ';' before '*'
.\qsql_psql.h(106) : error C2501: 'PGconn' : missing storage-class or type speci
fiers
.\qsql_psql.h(106) : error C2501: 'connection' : missing storage-class or type s
pecifiers
.\qsql_psql.cpp(50) : fatal error C1083: Cannot open include file: 'postgres.h':
 No such file or directory
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.

C:\Qt\3.3.3\src\sql\drivers\psql>


Название: Re: QPSQL в windows
Отправлено: Hellraiser от Апрель 10, 2011, 13:03
Вот это в логе не смущает?
Цитировать
-I"C:\Program" -I"Files\PostgreSQL\9.0\include"
Где же все-таки компилятор будет искать инклуды постгреса?


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 10, 2011, 20:49
не это я все прописал в переменных средах в include и lib и в path тоже прописал.
Сейчас выдает вот что:
Цитировать
C:\Qt\3.3.3\src\sql\drivers\psql>nmake

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

        cl -c -nologo -Zm200 -W3 -MD -O1  -DUNICODE -DQT_DLL -DQT_THREAD_SUPPORT
 -DQT_ACCESSIBILITY_SUPPORT -DQT_NO_DEBUG -I"." -I"C:\Program" -I"Files\PostgreS
QL\9.0\include" -I"C:\Program" -I"Files\PostgreSQL\9.0\include\server" -I"C:\Pro
gram" -I"Files\PostgreSQL\9.0\include\server\port\win32" -I"C:\Qt\3.3.3\include"
 -I"C:\Qt\3.3.3\src\sql\drivers\psql" -I"tmp\moc\release_mt_shared" -I"C:\Qt\3.3
.3\mkspecs\win32-msvc" -Fotmp\obj\release_mt_shared\ @C:\Users\0C18~1\AppData\Lo
cal\Temp\nma05552.
qsql_psql.cpp
C:\Program Files\PostgreSQL\9.0\include\server\pg_config_os.h(187) : error C2011
: 'timezone' : 'struct' type redefinition
C:\Program Files\PostgreSQL\9.0\include\server\pg_config_os.h(196) : error C2011
: 'itimerval' : 'struct' type redefinition
C:\Program Files\PostgreSQL\9.0\include\server\c.h(284) : fatal error C1189: #er
ror :  must have a working 64-bit integer datatype
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.
может все таки версия старая (Qt3.3.3)


Название: Re: QPSQL в windows
Отправлено: Hellraiser от Апрель 11, 2011, 09:28
Я же не просто так выделил только часть лога: четко видно что путь с пробелом разрывается и получается непонятно что в результате. Не надо использовать пути с пробелами, либо экранировать их, либо использовать короткое имя такого пути. К примеру C:\Program Files\ запишется как C:\Progra~1\
P.S. Qt 3.3 под Windows прекрасно собирается компиляторами MSVC 2003 и 2005. Я бы скорее грешил на старый компилятор, т.к. ругается не на Кьютовые хедеры, а на SDK-шные


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 11, 2011, 10:49
Цитировать
Qt 3.3 под Windows прекрасно собирается компиляторами MSVC 2003 и 2005. Я бы скорее грешил на старый компилятор, т.к. ругается не на Кьютовые хедеры, а на SDK-шные
А причем тут сборка Qt. В логе же видно что ошибки в файлах postgres.
Может быть исходники версии Qt3 устарели для PostgreSql 9 ?


Название: Re: QPSQL в windows
Отправлено: Hellraiser от Апрель 11, 2011, 16:58
В файле qsql_psql.h в инклюдах включается файл libpq-fe.h но такого файла в постгресе нет. есть только libpq-fs.h.
Интересно, откуда тогда он взялся у меня? Брал отсюда (http://www.enterprisedb.com/products-services-training/pgbindownload). Внутри архива в папке include лежит требуемый файлик. Кьют делает всего-лишь обертку над функциями постгреса. Проблемы должны начаться уже после сборки, т.к. в кьюте захардкодены версии постгреса.


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 11, 2011, 21:14
Цитировать
В файле qsql_psql.h в инклюдах включается файл libpq-fe.h но такого файла в постгресе нет. есть только libpq-fs.h.
Я его потом нашел все нормально.
Цитировать
Проблемы должны начаться уже после сборки, т.к. в кьюте захардкодены версии постгреса.
Занчит ты уже собрал драйвер для PostgreSql 9.0 ?
Может скинешь тогда?


Название: Re: QPSQL в windows
Отправлено: Hellraiser от Апрель 11, 2011, 21:26
С тройкой уже завязал, да и компилятор у меня существенно старше (2008)


Название: Re: QPSQL в windows
Отправлено: kolob от Апрель 11, 2011, 21:36
Может от этого и зависит. От исходников 3-хи. В последних сообщениях , которые я выше выложил ошибки на это похожи.


Название: Re: QPSQL в windows
Отправлено: Greezley от Май 07, 2011, 18:35
Всем привет. Чтобы не создавать новую тему пишу здесь, надеюсь кто-нибудь ответит.

Скачал Qt SDK 1.1, нужно подключить драйвер QPSQL. Соответственно dll-к нету. Не понимаю как их создавать? может ли кто объяснить? куда эти команды вписывать?


Название: Re: QPSQL в windows
Отправлено: Greezley от Май 07, 2011, 22:08
Вообще как я понял в папке plugins\sqldrivers должен быть проект psql.pro ??
у меня его нет. Можно ли его самому создать? Или можно скачать где-то собранные драйвера?


Название: Re: QPSQL в windows
Отправлено: kolob от Май 12, 2011, 15:50
Вот тут (http://qtcentre.org/wiki/index.php?title=Building_the_QPSQL_plugin_on_Windows_using_MinGW) все написано. И еще по форуму поищи. Тем море.


Название: Re: QPSQL в windows
Отправлено: Greezley от Май 12, 2011, 16:01
Та уже поискал, всё перепробовал. Но в новом SDK структура файлов новая. Сначала нужно выкачать исходники, чтобы был проект с psql. Скачал, попробовал собрать как написано в инструкции. Не получилось. Ошибки debug-а выскакивали постоянно при сборке. Возможно из-за того что все папки расположены в новых местах, относительно предыдущих сборок и пути не совпадают, хотя почти всё что можно добавил в PATH (qmake, Posgresql\include, lib).

А есть ли возможность скачать откуда-то собранные плагины? в линуксе вроде можно...


Название: Re: QPSQL в windows
Отправлено: kolob от Май 13, 2011, 11:27
Покажи лог сборки

А вообще вот что нашел для новой SDK
Qt 4.7 http://doc.qt.nokia.com/latest/sql-driver.html (http://doc.qt.nokia.com/latest/sql-driver.html)


Название: Re: QPSQL в windows
Отправлено: Greezley от Май 13, 2011, 18:37
Попробовал еще раз собрать получил такую ошибку:
WARNING: (internal):1: Unescaped backslashes are deprecated.

Вообще делаю всё по описанию, вроде. Вот полный лог до ошибки:
cd c:\QtSDK\QtSources\4.7.3\src\plugins\sqldrivers\psql\

qmake "INCLUDEPATH+=\"C:\Program Files\PostgreSQL\9.0\include\"" "LIBS+=\"C:\Program Files\PostgreSQL\9.0\lib\libpq.lib\"" psql.pro
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.




Название: Re: QPSQL в windows
Отправлено: like-nix от Май 23, 2011, 12:30
Кому нибудь удалось собрать модуль psql в Qt 4.7 и postgres 9.1 компилятором nmake?

Я делаю так:

Код:
qmake "INCLUDEPATH+=G:\postgress\include" "LIBS+=G:\postgress\lib\libpq.lib" psql.pro

В ответ:

Код:
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.
WARNING: (internal):1: Unescaped backslashes are deprecated.

Я не знаю на что это влияет =)

потом nmake не может найти символы:

Код:
qsql_psql.obj : error LNK2019: unresolved external symbol _PQntuples referenced in function "public: bool __thiscall QPSQLResultPrivate::processResults(void)" (?processResults@QPSQLResultPrivate@@QAE_NXZ)



Название: Re: QPSQL в windows
Отправлено: Пантер от Май 23, 2011, 12:36
А погуглить не вариант?
Код:
qmake "INCLUDEPATH+=G:\\postgress\\include" "LIBS+=G:\\postgress\\lib\\libpq.lib" psql.pro


Название: Re: QPSQL в windows
Отправлено: like-nix от Май 23, 2011, 12:40
Спасибо Пантер. Я просто забыл погуглить.

Но nmake всеравно символы не находит


Название: Re: QPSQL в windows
Отправлено: Pretorean от Июнь 20, 2011, 11:52
Вопрос в тему

собирал по мануалу с последней QtSDK 1.1.1
http://www.qtcentre.org/wiki/index.php?title=Building_the_QPSQL_plugin_on_Windows_using_MinGW
получилось собрать, но не подключается видно по той причине, что libpg.dll собранна студией а не MinGW.
Что делать ? гуглением не удалось найти дистрибутив под win собранный MinGW
пересобирать PostgreSQL из исходников ?




Название: Re: QPSQL в windows
Отправлено: Пантер от Июнь 20, 2011, 11:56
Там еще много dll в зависимостях. Собирай из исходников - это не сложно. Плюс зависимостей будет намного меньше. Нужно будет только через Cygwin собирать.


Название: Re: QPSQL в windows
Отправлено: Pretorean от Июнь 20, 2011, 13:29
Там еще много dll в зависимостях. Собирай из исходников - это не сложно. Плюс зависимостей будет намного меньше. Нужно будет только через Cygwin собирать.
http://www.postgresql.org/ftp/binary/v8.2.21/
Это самое свежее что собрано mingw, взял оттуда libpq.dll с необходимыми зависимостями и всё заработало.
Установлен 8.4 ... полет нормальный.