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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QPSQL в windows  (Прочитано 28371 раз)
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 на стадии 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
...
Ну и соответственно ругается на финкции в этих хидерах хотя они лежат в папке с постгрес...
« Последнее редактирование: Сентябрь 21, 2010, 21:16 от iRQSX » Записан
iRQSX
Гость
« Ответ #1 : Сентябрь 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

Не бросайте в беде!
« Последнее редактирование: Сентябрь 23, 2010, 10:23 от iRQSX » Записан
BaltikS
Гость
« Ответ #2 : Сентябрь 23, 2010, 11:22 »

Сделай так, чтобы libpq.dll со всеми зависимостями была увидена твоей программой
Записан
iRQSX
Гость
« Ответ #3 : Сентябрь 23, 2010, 13:11 »

Добавил в PATH
c:\psql\lib\;
c:\psql\bin\

Ошибка стала еще интересней Смеющийся
Код:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QPSQL7 QPSQL QSQLITE QODBC3 QODBC
Указать в качестве драйвера QPSQL7 тоже пробовал...
Записан
asvil
Гость
« Ответ #4 : Сентябрь 23, 2010, 15:18 »

Сделайте так:
Код:
QLibrary("sqldrivers/qsqlpsql");
library.load();
qDebug() << library.errorString();
Возможно увидите причину ваших бед.

Я смог запустить драйвер только после того как скопировал postgres библиотеки в папку с программой.
Записан
iRQSX
Гость
« Ответ #5 : Сентябрь 27, 2010, 10:36 »

после перезагрузки компа драйвер заработал Улыбающийся
А вот по поводу QLibrary("sqldrivers/qsqlpsql"); Так и не смог подгрузить "не находит модуль"...
Записан
sindbad07
Гость
« Ответ #6 : Сентябрь 28, 2010, 16:01 »

А у Вас qt с новым постгресом нормально работает?
У меня просто пишет:
This version of PostgreSQL is not supported and may not work.
И ни одна модель не работает...
Записан
iRQSX
Гость
« Ответ #7 : Сентябрь 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
« Последнее редактирование: Сентябрь 29, 2010, 02:01 от iRQSX » Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #8 : Апрель 10, 2011, 11:11 »

Добрый день! Люди добрые помогите собрать драйвер postgres9. Пытаюсь собрать студией 6. Пробовал как описано выше, но что то не получается.
В файле qsql_psql.h в инклюдах включается файл libpq-fe.h но такого файла в постгресе нет. есть только libpq-fs.h.
Записан

Qt 5.11.0, Win, MinGW
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #9 : Апрель 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>
Записан

Qt 5.11.0, Win, MinGW
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #10 : Апрель 10, 2011, 13:03 »

Вот это в логе не смущает?
Цитировать
-I"C:\Program" -I"Files\PostgreSQL\9.0\include"
Где же все-таки компилятор будет искать инклуды постгреса?
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #11 : Апрель 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)
Записан

Qt 5.11.0, Win, MinGW
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #12 : Апрель 11, 2011, 09:28 »

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

Сообщений: 296



Просмотр профиля
« Ответ #13 : Апрель 11, 2011, 10:49 »

Цитировать
Qt 3.3 под Windows прекрасно собирается компиляторами MSVC 2003 и 2005. Я бы скорее грешил на старый компилятор, т.к. ругается не на Кьютовые хедеры, а на SDK-шные
А причем тут сборка Qt. В логе же видно что ошибки в файлах postgres.
Может быть исходники версии Qt3 устарели для PostgreSql 9 ?
Записан

Qt 5.11.0, Win, MinGW
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #14 : Апрель 11, 2011, 16:58 »

В файле qsql_psql.h в инклюдах включается файл libpq-fe.h но такого файла в постгресе нет. есть только libpq-fs.h.
Интересно, откуда тогда он взялся у меня? Брал отсюда. Внутри архива в папке include лежит требуемый файлик. Кьют делает всего-лишь обертку над функциями постгреса. Проблемы должны начаться уже после сборки, т.к. в кьюте захардкодены версии постгреса.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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