LINUX.ORG.RU

QPSQL driver not loaded

 


0

2

Добрый всем!

Хотел бы поделиться с форумом решением, которое помогло лично мне в решении проблемы указанной в Теме. Может кому тоже поможет.

Дано: 1. станция разработки на Венде 10. 2. Среда разработки Qt Creator 4.9.1. 3. Программа с таким куском кода:

QSqlDatabase db = QSqlDatabase();
db = QSqlDatabase::addDatabase("QPSQL7");
db.setHostName("192.168.1.1");
db.setDatabaseName("test");
db.setUserName("postgres");
db.setPassword("postgres");
if(db.open())    {
	msgbox.setText("Соединение с БД успешно установлено");
        msgbox.exec();
} else {
	msgbox.setText("Неудачная попытка соединения с БД");
	msgbox.exec();
}
db.close();

Проблема: соединение всегда неуспешно с ошибкой, указанной в Теме.

Что делал (по советам Инета): 1. помещал в рабочую папку с бинарником своей программы различные dll-ки. 2. в переменной окружения PATH указывал путь C:\Qt\5.12.4\mingw73_64\plugins\sqldrivers. 3. установил Postgres Pro Standard на станцию разработки с офф. сайта разработчика и указал в PATH путь до либов: C:\Program Files\PostgresPro\11\lib

Что не делал: 1. не использовал в проге драйвер QODBC. 2. не пересобирал libpq.dll из исходников.

Помогло следующее: 1. в переменной окружения PATH указал путь до бинов Postgres'а: C:\Program Files\PostgresPro\11\bin.

У меня всё по данному вопросу. Всем спасибо за внимание.

Помогло следующее: 1. в переменной окружения PATH указал путь до бинов Postgres'а: C:\Program Files\PostgresPro\11\bin.

В принципе, из этих библиотек можно подобрать такие (помимо libpq, это всякие iconv и ssleay), что полная установка PostgreSQL будет не нужна. Но остаётся необходимость в предварительной установке Microsoft Redistributable, ибо виндовый PostgreSQL собирается вижуал студией (по крайней мере, несколько лет назад собирался).

P.S. Через некоторое время сюда, вероятно, прискачет анонимус с криком «на винфак, вендузота». Обращать на него внимание не надо, это местный дурачок, который не понимает, что вопросы по виндовому PostgreSQL волнуют как раз таки разработчиков кроссплатформенного ПО, а на винфаке вместо ответа на них посоветуют «поставить SQL» (на их языке это MS SQL Server) и не маяться дурью.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

В принципе, из этих библиотек можно подобрать такие (помимо libpq, это всякие iconv и ssleay), что полная установка PostgreSQL будет не нужна.

Первым делом ssleay с подобными ему и были перенесены в рабочий каталог. Но отсутствие нужной dll-ки было каким-то неявным ибо обычно, если не хватает dll-лины, то прога выдаёт системную ошибку. Здесь же всё отрабатывалось нормально. Непонятно было, каким образом отладчик писал, что в доступные драйверы входит и QPSQL, однако он не загружен? Также непонятно, почему в Qt Creator нет аналога «статической сборки» от всяких Дельфей, где в экзешник включается ВЕСЬ нужный код и отсутствие DLL-лин на целевой машине больше не проблема? Ну да, бинарник займёт чуть больше пространства на диске, но ведь это не 100500 гигабайт.

Пусть тему перемещают - главное, чтобы она находилась поиском и кому-нибудь данное решение помогло. Сам я решение нашёл вот здесь: http://forum.vingrad.ru/forum/topic-374262/kw-qsqldatabase-qpsql-driver-not-l... совершенно случайно, до этого пересмотрев кучу других ссылок.

Ramirezkiv2
() автор топика
Ответ на: комментарий от rumgot

А без PATH не работает?

Работает. Убрал из PATH пути к либам и бинам Postgres Pro и поместил все DLL-ки в раб.каталог программы. Всё соединяется. Сейчас в каталоге находятся следующие DLL-ки:

4758cca, aep, atalla, capi, chil, cswift, gmp, gost, iconv, icudt56, icuin56, icuio56, icule56, iculx56, icutest55, icutu55, icuuc56, libeay32, libecpg, libecpg_compat, libexslt, libgcc_s_seh-1, libiconv, libintl, libpgtypes, libpq, libstdc++-6, libwinpthread-1, libxml2, libxslt, nuron, padlock, qsqlite, qsqlited, qsqlodbc, qsqlodbcd, qsqlpsql, qsqlpsqld, Qt5Cored, Qt5Guid, Qt5Sqld, Qt5Widgetsd, ssleay32, sureware, testplug, ubsec, zlib1

Будет время - выявлю самые необходимые.

Ramirezkiv2
() автор топика
Ответ на: комментарий от Ramirezkiv2

Мдя, во время PostgreSQL 8.4 их было явно меньше.

Будет время - выявлю самые необходимые.

Для чистоты эксперимента хорошо бы ещё проверить, будет ли комплект из самых необходимых работать на чистой машине. Я в те самый времена пытался, но зависимость от Microsoft Redistributable так и не победил (возможно, из неё тоже можно взять какой-то минимум, но это, скорее всего, будет нарушением мелкомягкой лицензии).

hobbit ★★★★★
()
Ответ на: комментарий от Ramirezkiv2

Также непонятно, почему в Qt Creator нет аналога «статической сборки» от всяких Дельфей, где в экзешник включается ВЕСЬ нужный код и отсутствие DLL-лин на целевой машине больше не проблема?

Статическая сборка в Qt на самом деле работает, и я про неё тоже писал. Но у меня рассматривался вариант с базовыми либами (QtCore, QtGui и др.), без плагинов. Про плагины была пара обсуждений на vingrad.ru, я не пробовал. Но с ними всё намного сложнее.

А тут мы тащим ещё и код самого PostgreSQL. В случае с Delphi у вас тоже, скорее всего не прокатит включить в статическую сборку код не только дельфёвых пакетов, но и библиотек сторонней СУБД, которую Вы применяете в проекте.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Ramirezkiv2

обычно, если не хватает dll-лины, то прога выдаёт системную ошибку. Здесь же всё отрабатывалось нормально.

DLL, как вы знаете, можно грузить двумя способами: статически, средствами ОС или динамически, через системные вызовы (LoadLibrary в винде, dlopen в линуксе - QLibrary всего лишь даёт универсальную обёртку над ними). В первом случае мы получаем исчерпывающую ошибку, чего именно не хватает, во втором это приходится отслеживать руками. В нашем случае способ комбинированный: QtSql вызывает плагин динамически, а уже он, ЕМНИП, тянет либы от PostgreSQL статически (не путать статический вызов динамической библиотеки со статической библиотекой - это совсем разные вещи). В такой ситуации грамотно обработать ошибку очень тяжело.

P.S. Тема на самом деле интересная и «веченозелёная», но при чём тут дебиан, я не понял. Напрашиваются теги qt и postgresql.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от rumgot

Либы из каталога с установленной PostgreSQL тоже?

Нет, DLL-ки из либов PostgreSQL в рабочую папку я не копировал.

Ramirezkiv2
() автор топика
Ответ на: комментарий от hobbit

Для чистоты эксперимента хорошо бы ещё проверить, будет ли комплект из самых необходимых работать на чистой машине. Я в те самый времена пытался, но зависимость от Microsoft Redistributable так и не победил (возможно, из неё тоже можно взять какой-то минимум, но это, скорее всего, будет нарушением мелкомягкой лицензии).

Проверю

Ramirezkiv2
() автор топика
Ответ на: комментарий от hobbit

В случае с Delphi у вас тоже, скорее всего не прокатит включить в статическую сборку код не только дельфёвых пакетов, но и библиотек сторонней СУБД, которую Вы применяете в проекте. [/qoute] В Дельфах, в С++Билдере либо в MSVS я в те времена не работал с СУБД, но при статической сборки при переносе бина на другие тачки всё запускалось без проблем, не требуя никаких DLL-лок.

Статическая сборка в Qt на самом деле работает, и я про неё тоже писал.

Спасибо, посмотрю.

Ramirezkiv2
() автор топика
Ответ на: комментарий от Ramirezkiv2

я в те времена не работал с СУБД

Это ключевые слова.Увы, работа с СУБД — задача сильно особенная.

hobbit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.