Qsqldatabase qpsql driver not loaded windows 10

I have some trouble when I want to add a database. _dataBase = QSqlDatabase::addDatabase("QPSQL"); After calling this method I have an error: QSqlDatabase: QPSQL driver not loaded QSqlDatab...

I have some trouble when I want to add a database.

    _dataBase = QSqlDatabase::addDatabase("QPSQL");

After calling this method I have an error:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

I include to PATH variable paths to:

PostgreSQL9.3bin
PostgreSQL9.3lib
PostgreSQL9.3include

Also I copy folder sqldrivers to Debug folder. Also tried to copy dlls drom this folder to Debug. Doesn’t work either.

asked Oct 22, 2014 at 12:23

bin-bin's user avatar

2

I came here googling because I had the same problem in Windows.

In my case to solve the issue I had to install PostgreSQL for Windows 32 bits since my Qt target was MinGW 32 bits.

Additionally, I had to add the PATH to the PostgreSQL bin and lib directories so Qt could find the right .dlls.

@SET PATH=C:Program Files (x86)PostgreSQL9.6bin;C:Program Files (x86)PostgreSQL9.6lib;%PATH%

The PATH can be set before launching Qt Creator or using the Qt Creator itself via the Build Environment in the Projects pane.

answered Nov 12, 2016 at 0:49

Tarod's user avatar

TarodTarod

6,5475 gold badges43 silver badges50 bronze badges

Add the system variable QT_DEBUG_PLUGINS=1 if you want to get full information of why the QPSQL driver has not been loaded.

Probably you will discover that Qt is not able to find it. Copy and paste the output here to know what exactly happens.

Tarod's user avatar

Tarod

6,5475 gold badges43 silver badges50 bronze badges

answered Oct 22, 2014 at 13:47

0

Use depends.exe on qsqlpsql.dll and found that this dll need libpq.dll from PostgreSQL9.3libfolder. Add libpq.dll to Debug folder and it works:)

answered Oct 24, 2014 at 6:55

bin-bin's user avatar

bin-binbin-bin

5222 gold badges6 silver badges16 bronze badges

Try pip install PyQt5 event if you already installed it using conda or installer. It helped me.

Dijkgraaf's user avatar

Dijkgraaf

10.5k17 gold badges39 silver badges53 bronze badges

answered Jan 3, 2019 at 21:51

user10807076's user avatar

I got same problem with deploying Qt application (windeployqt didn’t help). I had to copy more .dlls (libcrypto-1_1-x64.dll, libiconv-2.dll, libintl-8.dll, libpq.dll, libssl-1_1-x64.dll, libwinpthread-1.dll) from postgreSQL bin path (c:Program FilesPostgreSQL12bin) next to .exe file (according to dependency walker).

answered Nov 14, 2022 at 12:48

Ivan Kamensky's user avatar

updated: this is what I got from QT_DEBUG_PLUGINS:

"The plugin 'D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlodbcd.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)" 
         not a plugin
QFactoryLoader::QFactoryLoader() looking at "D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsql.dll"
Found metadata in lib D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsql.dll, metadata=
{
    "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
    "MetaData": {
        "Keys": [
            "QPSQL7",
            "QPSQL"
        ]
    },
    "archreq": 0,
    "className": "QPSQLDriverPlugin",
    "debug": false,
    "version": 331264
}


Got keys from plugin meta data ("QPSQL7", "QPSQL")
QFactoryLoader::QFactoryLoader() looking at "D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsqld.dll"
Found metadata in lib D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsqld.dll, metadata=
{
    "IID": "org.qt-project.Qt.QSqlDriverFactoryInterface",
    "MetaData": {
        "Keys": [
            "QPSQL7",
            "QPSQL"
        ]
    },
    "archreq": 1,
    "className": "QPSQLDriverPlugin",
    "debug": true,
    "version": 331264
}


"The plugin 'D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsqld.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)" 
         not a plugin
QFactoryLoader::QFactoryLoader() checking directory path "C:/Users/nkbar/Documents/build-myRPG_alpha-Desktop_Qt_5_14_0_MSVC2017_64bit-Release/Server/release/sqldrivers" ...
Cannot load library D:Qt5.14.0msvc2017_64pluginssqldriversqsqlpsql.dll: The specified module could not be found.
QLibraryPrivate::loadPlugin failed on "D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsql.dll" : "Cannot load library D:\Qt\5.14.0\msvc2017_64\plugins\sqldrivers\qsqlpsql.dll: The specified module could not be found."
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
QFactoryLoader::QFactoryLoader() checking directory path "D:/Qt/5.14.0/msvc2017_64/plugins/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "C:/Users/nkbar/Documents/build-myRPG_alpha-Desktop_Qt_5_14_0_MSVC2017_64bit-Release/Server/release/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "D:/Qt/5.14.0/msvc2017_64/plugins/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "C:/Users/nkbar/Documents/build-myRPG_alpha-Desktop_Qt_5_14_0_MSVC2017_64bit-Release/Server/release/accessiblebridge" ...

I checked «D:Qt5.14.0msvc2017_64pluginssqldriversqsqlpsqld.dll» and I did found the dll which the debugger reports as missing. And I am also confused about why it complains about «‘D:/Qt/5.14.0/msvc2017_64/plugins/sqldrivers/qsqlpsql.dll’ uses incompatible Qt library.

The kit I am using is msvc2017 64bit and the postgre I downloaded is also for 64bit.


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

OS: win10 64bit
qt: 5.14.0
kit: msvc2017 64bit
PostgreSQL: 12.1

Sqlite works well, but my project just can’t work with PostgreSQL.

I followed the official instruction: https://doc.qt.io/qt-5/sql-driver.html#qpsql

Got no error but still couldn’t connect to PostgreSQL. Same error messages saying that «QPSQL driver not loaded».

I have also tried other solutions from here and stackoverflow and reinstall my qt 4 times, No luck still. I am really frustrated now and don’t know what to do.

the .pro:

QT += core network gui widgets sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

QTPLUGIN += QPSQL
QT_DEBUG_PLUGINS=1

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

#INCLUDEPATH += "D:psqlinclude"

#LIBS += "D:psqlliblibpq.lib"


SOURCES += 
    battle.cpp 
    creature.cpp 
    player.cpp 
    server.cpp 
    servermain.cpp 
    serverwindow.cpp 
    serverworker.cpp

HEADERS += 
    battle.h 
    creature.h 
    data_structs.h 
    player.h 
    server.h 
    serverwindow.h 
    serverworker.h

FORMS += 
    serverwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += 
    resource.qrc

Дано
ОС Windows 7 или 10 x64
Qt5.5.1 (mingw) (x86) или новее
PostgreSQL 10 или новее

Задача
Заставить разработанное на Qt приложение запускаться на машине без установленного Qt и PostgreSQL и подключаться к СУБД PostgreSQL.

При вызове QSqlDatabase::addDatabse(«QPSQL») программа пишет:

QSqlDatabase: QPSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

либо вовсе:

QSqlDatabase: QPSQL driver not loaded

QSqlDatabase: available drivers:

Анализ

Как в общих чертах происходит работа с БД в Qt:
Функция QSqlDatabase::addDatabse живет в Qt5Sql.dll, и при вызове пытается динамически подгрузить qsqlpsql.dll, которая тянет за собой кучу других dll, часть из которых живет в составе PostgreSQL.

Разберемся, как решать эту и подобные проблемы, связанные с dll.

Принципиально существует два способа связывания dll и exe-файлов: явное и неявное. При загрузке SQL-драйверов Qt задействованы оба способа.
Сначала при запуске exe-файла происходит поиск и загрузка требуемых dll-библиотек, в т.ч. Qt5Sql.dll. Если какие-то библиотеки не найдены, то при запуске программы Windows сообщит об этом.

В процессе работы программы при вызове QSqlDatabase::addDatabse делается динамический поиск dll-файлов SQL-драйверов в определенных каталогах. Для драйвера QPSQL должна быть найдена библиотека qsqlpsql.dll, после чего выполняется попытка ее загрузки.

Для этого загружаются другие неявно связанные с ней dll-библиотеки вместе со своими зависимостями. Если всё дерево необходимых dll-библиотек найдено, то qsqlpsql.dll будет успешно загружена и Qt сможет использовать этот драйвер.

Но сложность в том, что при отсутствии какой-либо библиотеки Windows не выдаст красивого сообщения об этом и придется разбираться другими способами.

Разбираемся

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

Для этого достаточно в общих чертах представлять, как Windows ищет dll, а именно, что сначала производится поиск в каталоге exe-файла, а в конце — по путям, указанным в переменной окружения PATH. PATH удобно использовать на машине разработчика, но этот вариант рассматривать не будем т.к. это не соответствует изначальной задаче. 

Также надо знать, в каких каталогах QSqlDatabase::addDatabse ищет драйверы SQL. Существуют способы указать Qt альтернативные пути, где искать плагины (в т.ч. SQL), но не будем заниматься и этим.

Исследуем

Используем Прекрасную программы DependencyWalker, которая показывает дерево зависимостей dll и exe-файлов.

Сначала открываем с помощью неё исполняемый файл программы и смотрим, какие dll-библиотеки должны быть доступны, ищем их в каталоге установки Qt и компилятора и кладем рядом с исполняемым файлом. Теперь программа должна запускаться и доходить до вызова QSqlDatabase::addDatabse.

Чтобы увидеть, где Qt ищет SQL-драйверы, добавляем переменную окружения QT_PLUGIN_PATH = 1 (например, в настройках параметров запуска приложения в QtCreator), запускаем программу и изучаем ее вывод. Кроме прочего должны быть примерно такие строки:

QFactoryLoader::QFactoryLoader() checking directory path «C:/Qt/Qt5.5.1/5.5/mingw492_32/plugins/sqldrivers»

QFactoryLoader::QFactoryLoader() checking directory path «C:/projects/build-foobar-Desktop-Release/release/sqldrivers»

Из них становится ясно, что по умолчанию Qt ищет SQL-драйверы в каталоге установки и в подкаталоге sqldrivers рядом с exe-файлом. Поэтому находим qsqlpsql.dll в каталоге установки Qt (примерно в C:Qt5.5.1mingw491_32binpluginssqldrivers) и копируем в подкаталог sqldrivers рядом с exe-файлом.
Если все сделано верно, то после вызова QSqlDatabase::addDatabse должно вывестись:

QSqlDatabase: available drivers: QPSQL QPSQL7

Если не удалось, то попробовать положить qsqlpsql.dll в plugins/sqldrivers.

Далее с помощью DependencyWalker исследуем зависимости qsqlpsql.dll.

Кроме зависимостей от библиотек Qt и компилятора, будет зависимость от libpq.dll.

Проще всего взять libpq.dll из каталога установки PostgreSQL (примерно в C:Program Files (x86)PostgreSQL10bin). Здесь есть две важнейшие особенности:

1) разрядность libpq.dll должна совпадать с разрядностью приложения. Под Windows стандартный SDK Qt5 с официального сайта 32-разрядный. т.е. необходима 32-разрядная версия libpq.dll, которую можно взять из x86-версии PostgreSQL. Это не влияет на разрядность сервера PostgreSQL, к которому будет подключаться приложение;

2) libpq.dll необходимо располагать рядом с exe-файлом, а не рядом с qsqlpsql.dll. Все остальные dll, от которых зависит libpq.dll, необходимо класть также рядом с exe-файлом приложения.

Теперь все тем же DependencyWalker исследуем зависимости libpq.dll в каталоге установки PostgreSQL.

В зависимости от версии PostgreSQL у libpq.dll могут быть разные dll-зависимости. Находим их все в каталоге установки PostgreSQL и копируем рядом с exe-файлом. Не забываем пройтись по всем зависимостям всех добавляемых dll. 

Сравниваем

Из установленного PostgreSQL 9.4 нужно позаимствовать следующие библиотеки:

libpq.dll

ssleay32.dll

libeay32.dll

libintl-8.dll

libiconv-2.dll

Для PostgreSQL 10 набор уже другой:

libpq.dll

libssl-1_1.dll

libcrypto-1_1.dll

libintl-8.dll

libiconv-2.dll

Более новые версии PostgreSQL выпускаются только в редакции x64, поэтому для получения x86-версии libpq.dll и других библиотек, возможно, придется собирать их из исходников самостоятельно (я не пробовал).

Что еще
возможно, Вам, как и мне, потребуется откуда-то добыть msvcr120.dll (или что-то вроде того в новых версиях Windows и PostgreSQL) и тоже бросить рядом с exe-файлом.

Итого
У меня получилась следующая структура каталога простой консольной программы, выполняющей загрузку драйвера БД:

qpsqltest.exe

sqldrivers/qsqlpsql.dll

Qt5Core.dll

Qt5Sql.dll

libpq.dll

libssl-1_1.dll

libcrypto-1_1.dll

libintl-8.dll

libiconv-2.dll

libwinpthread-1.dll

libstdc++-6.dll

libgcc_s_dw2-1.dll

msvcr120.dll

Архив c примером на гуглодиске

If you’re trying to use Postgres with PyQt5/6 or PySide2/PySide6 you may have come across an issue with loading the driver.
Qt (correctly) lists the driver as available in Qt, but when trying to load it the load will fail. This is because the Qt
library depends on Postgres’ own library, which must be available in the path to load.

The following script will let you test if the Postgres library is loading correctly.

  • PyQt5
  • PyQt6
  • PySide2
  • PySide6

python

from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PyQt6.QtSql import QSqlDatabase
from PyQt6.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PySide2.QtSql import QSqlDatabase
from PySide2.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PySide6.QtSql import QSqlDatabase
from PySide6.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

Executing the above script in a new command prompt will give the following
output (if Postgres is not accessible).

command

>python test.py
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
Available drivers ['QSQLITE', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
Unable to connect.
Last error Driver not loaded Driver not loaded

The list of «available drivers» shows the Qt drivers which are available in your PyQt5 (or PyQt6, or PySide2, or PySide6) installation. For example, in my installation the driver files are under site-packagesPyQt5Qt5pluginssqldrivers

command

C:UsersMartinAppDataLocalProgramsPythonPython37Libsite-packagesPyQt5Qt5pluginssqldrivers> dir

 Volume in drive C has no label.
 Volume Serial Number is 0A6A-65ED

 Directory of C:UsersMartinAppDataLocalProgramsPythonPython37Libsite-packagesPyQt5Qt5pluginssqldrivers

02/12/2021  14:35    <DIR>          .
02/12/2021  14:35    <DIR>          ..
02/12/2021  14:35         1,412,080 qsqlite.dll
02/12/2021  14:35            98,288 qsqlodbc.dll
02/12/2021  14:35            79,856 qsqlpsql.dll
               3 File(s)      1,590,224 bytes
               2 Dir(s)  174,429,970,432 bytes free

The Driver not loaded error is occurring because the Qt Postgres driver cannot find the Postgres libraries. The Qt Postgres driver is a wrapper around these libraries, rather than a complete implementation of Postgres itself.

To get this working you need to ensure the required Postgres library files are available in your path.
You can do this by adding your Postgres installation bin folder to your path. For example, on my computer Postgres is installed under C:Program FilesPostgreSQL14 (I’m using version 14). We need to add to the Postgres bin folder to the PATH as this contains libpq.dll (Postgres Access Library) which Qt needs.

command

SET PATH=%PATH%;C:Program FilesPostgreSQL14bin

With that in place, running the script again will show that that driver has loaded successfully. The
connection still isn’t working, since it needs the username and password set. But if you get this far
you know the driver is working properly.

command

U:homemartinwwwpythonguiscontentfaqqt-postgres-driver>python test.py
Available drivers ['QSQLITE', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
Unable to connect.
Last error connection to server at "localhost" (::1), port 5432 failed: fe_sendauth: no password supplied
QPSQL: Unable to connect

We can modify the test script to add your username and password to complete the connection.

  • PyQt5
  • PyQt6
  • PySide2
  • PySide6

python

from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
db.setUserName("postgres")  # postgres is the default root username
db.setPassword("")    # add your password here
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PyQt6.QtSql import QSqlDatabase
from PyQt6.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
db.setUserName("postgres")  # postgres is the default root username
db.setPassword("")    # add your password here
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PySide2.QtSql import QSqlDatabase
from PySide2.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
db.setUserName("postgres")  # postgres is the default root username
db.setPassword("")    # add your password here
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

python

from PySide6.QtSql import QSqlDatabase
from PySide6.QtWidgets import QApplication

app = QApplication([])

db = QSqlDatabase("QPSQL")
db.setUserName("postgres")  # postgres is the default root username
db.setPassword("")    # add your password here
print("Available drivers", db.drivers())

if not db.open():
    print("Unable to connect.")
    print('Last error', db.lastError().text())
else:
    print("Connection to the database successful")

…and then the connection will complete as expected.

command

>python test-userpass.py
Available drivers ['QSQLITE', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
Connection to the database successful

Over 10,000 developers have bought Create GUI Applications with Python & Qt!

[[ discount.discount_pc ]]% OFF for [[discount.description ]]
with the code [[ discount.coupon_code ]]

Необходимо создать минимально работающее Qt приложение для подключения и взаимодействия с СУБД PostgreSQL. Из коробки не работает. ОС — windows 10 64bit, Версия Qt — Qt 5.9.5 MSVC 2015, MS Visual Studio 2017 Community, PostgreSQL 9.6 (пробовал как 32bit, так и 64bit)
Проверяю таким кодом:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    qDebug() << db.isValid();
    db.setHostName("hostname");
    db.setPort(5432);
    db.setDatabaseName("dbname");
    db.setUserName("username");
    db.setPassword("password");
    if (!db.open())
    {
        qDebug() << db.lastError().text();
        return;
    }

В результате:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
false

При этом файл qsqlpsql.dll в поддиректории Qt msvc2017_64pluginssqldrivers есть. Из чего я сделал вывод, что драйвер надо скомпилировать вручную.
Открываю командную строку Qt 5.9.5 64bit for Desktop (MSVC 2017), перехожу в папку C:QtQt5.9.55.9.5Srcqtbasesrcpluginssqldriverspsql, набираю команду

qmake «INCLUDEPATH+=»C:Program Files (x86)PostgreSQL9.6include»» «LIBS+=»C:Program Files (x86)PostgreSQL9.6liblibpq.lib»» psql.pro

В результате:

Project ERROR: Library ‘psql’ is not defined.

Пытался также собрать через Qt Creator

Project ERROR: Library ‘psql’ is not defined.
Cannot read /qtsqldrivers-config.pri: No such file or directory
Project ERROR: Library ‘psql’ is not defined.

Пытался собрать также всю ветку sqldrivers, аналогично:

Project ERROR: Library ‘psql’ is not defined.

Есть ли вообще возможность собрать какую-то работающую связку?

WhitePower_

4 / 4 / 3

Регистрация: 28.08.2017

Сообщений: 81

1

15.02.2018, 10:22. Показов 17243. Ответов 8

Метки нет (Все метки)


Не пойму в чем дело, до этого на SQLite работало все хорошо. Решил перейти на Postgres. И тут посыпалось, драйвер не видит, соединение не ставит. Пробовал и QPSQL и QPSQL7 ничего не выходит.
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlQuery::exec: database not open

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
if(QSqlDatabase::contains(QSqlDatabase::defaultConnection)) {
        db = QSqlDatabase::database();
    } else {
        qDebug() <<"Open Database";
        db = QSqlDatabase::addDatabase("QPSQL");
        db.setDatabaseName("postgres");
        db.setHostName("localhost");
        db.setUserName("postgres");
        db.setPassword("");
        qDebug() <<"Open DataBase Sucsessfull";
       // db.setDatabaseName("E:/PersonsForConnection.db");
    }
    db.open();

Добавлено через 1 час 14 минут
К всему этому lastError
Driver not loaded Driver not loaded

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



93 / 93 / 33

Регистрация: 17.03.2012

Сообщений: 536

15.02.2018, 10:26

2

Под виндой? Надо либо пути к библиотекам указывать, либо положить их рядом с экзешником. Библиотек много, основные libqsqlpsql, кажется. Но там еще зависимости есть. Их можно dependenciewalker’ом посмотреть, либо тут на форуме выкладывали софтину.
Вообще, такие темы уже были и не одна, воспользуйтесь поиском по форуму.



0



WhitePower_

4 / 4 / 3

Регистрация: 28.08.2017

Сообщений: 81

15.02.2018, 10:36

 [ТС]

3

Slip., да, по Windows. Через PATH указал пути, положил все .dll файлы Postgress’a из bin и lib рядом с .exe. Но работать так и не захотел. Вычитал где-то про addLibraryPath(), но ей я ни разу не пользовался, даже не представляю как добавить. В принципе по форуму одно и тоже, добавить к exe библиотеки и прописать PATH.

Добавлено через 3 минуты
Сейчас посмотрел isValid() после

C++ (Qt)
1
QSqlDatabase::addDatabase

он мне возвращает false.



0



93 / 93 / 33

Регистрация: 17.03.2012

Сообщений: 536

15.02.2018, 11:01

4

У меня где-то лежал список необходимых библиотек, но, боюсь, я его потерял.
Помню, что надо кутишные либы для работы с постгрес. libqsqlpsql и еще какие-то.
А еще надо виндовые положите. Из систем32 стянуть какие-то. Не помню.
Нашел. Их там много. Сейчас попробую написать.

Добавлено через 25 минут
Все из папки положить рядом с экзешником собранным, как лежит.
https://ufile.io/74yzx



0



solar_wind

770 / 760 / 59

Регистрация: 06.07.2009

Сообщений: 3,021

15.02.2018, 12:38

5

C++ (Qt)
1
a.addLibraryPath(a.applicationDirPath()+"/plugins");

В pluginssqldrivers все библиотеки складываете.
Библиотеки должны быть собраны в той же версии Qt как и основной проект.



0



4 / 4 / 3

Регистрация: 28.08.2017

Сообщений: 81

15.02.2018, 17:01

 [ТС]

6

Slip., распаковал папку в debug к exe файлу, но проблема не исчезла.

Добавлено через 3 часа 15 минут
Посмотрел папку plugins, драйвера и правда существуют, но смущает размер для MySQL ODC PSQL, они не превышают и 100КБ. Знает кто ссылочку на рабочий метод сборки драйверов.



0



80 / 69 / 9

Регистрация: 11.12.2009

Сообщений: 393

19.02.2018, 07:54

7

из папки bin в субд копируешь файлы: libeay32.dll, libpq.dll, libintl-8.dll, ssleay32.dll
всё это в папку qtверсия qtmingw492_32bin

Важно, чтобы сам postgres был 32 разрядным, на оф сайте всё время предлагают 64 установщики



1



80 / 69 / 9

Регистрация: 11.12.2009

Сообщений: 393

19.02.2018, 07:57

8

плагины у меня

Миниатюры

QSqlDatabase: QPSQL driver not loaded
 



0



487 / 365 / 93

Регистрация: 10.03.2011

Сообщений: 1,513

Записей в блоге: 5

19.02.2018, 10:19

9

Разрядность postgres и вашего комплекта совпадают? Постгря ныне, в основном, x64 идёт.



0




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:Qt5.12.4mingw73_64pluginssqldrivers.
3. установил Postgres Pro Standard на станцию разработки с офф. сайта разработчика и указал в PATH путь до либов: C:Program FilesPostgresPro11lib

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

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

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

Автор Тема: Postgresql + Qt 5.5 (как с ней работать)  (Прочитано 16902 раз)
rudireg

Гость


Привет.
У меня стоит Qt 5.5.1 (MSVC 2013, 32 bit)
Хочу работать с Postgresql
Имею ошибку QSqlDatabase: QPSQL driver not loaded
Знаю что:
1) Для работы с SQLite ничего устанавливать не надо, все работает из коробки.
2) Для работы с MySQL необходимо устанавливать на компьютер базу данных MySQL +  Апаче + клиент phpmyadmin для удобства просмотра

Вопрос:  Нужно ли что-либо устанавливать для работы с Postgresql как например для MySQL ? Или же все будет работать без установок как в случае с SQLite ?
Ведь если программу писать для клиентов, то они же не будут идти на сайт базы данных и устанавливать предварительно целую базу данных.

Вопрос 2: Как я понял что в Qt 5.5  драйвер не нужно собирать? он уже в коробке?
Тогда почему  имею ошибку : QPSQL driver not loaded


Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


Тогда почему  имею ошибку : QPSQL driver not loaded

Привет!

Не доступны библиотеки postgresql.


Записан
rudireg

Гость


Вот мои либы для работы с базами
Где qsqlpsql.dll — это для работы с Postgresql ?


Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


Я имею ввиду библиотеки самого PostgreSQL. Такие как libpq.dll например.
А qsqlpsql.dll, да это плагин для работы с PostgreSQL, но без библиотек PostgreSQL он работать не будет.

PS. Проще всего на компе где пишется код, установить PostgreSQL (для тестов все равно понадобится). И прописать пути в Path до /bin и /lib PostgreSQL.

« Последнее редактирование: Декабрь 11, 2016, 12:19 от PimenS »
Записан
rudireg

Гость


Я имею ввиду библиотеки самого PostgreSQL. Такие как libpq.dll например.
А qsqlpsql.dll, да это плагин для работы с PostgreSQL, но без библиотек PostgreSQL он работать не будет.

PS. Проще всего на компе где пишется код, установить PostgreSQL (для тестов все равно понадобится). И прописать пути в Path до /bin и /lib PostgreSQL.

А если я буду запускать программу на другом компьютере, то на другом компе нет нужды устанавливать PostgreSQL? Будет достаточно держать в папке с программой либы  libpq.dll  и все?


Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


Да. Устанавливать не надо. В папке с программой от PostgreSQL нужны libpq.dll и еще несколько библиотек. 


Записан
rudireg

Гость


А где взять libpq.dll  и другие… я установил PostgreSQL для Windows 32 разрядная.


Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


В /bin или /lib

прописать пути в Path до /bin и /lib PostgreSQL.

« Последнее редактирование: Декабрь 11, 2016, 12:49 от PimenS »
Записан
rudireg

Гость


В /bin или /lib

прописать пути в Path до /bin и /lib PostgreSQL.

Вы имеете ввиду системную переменную PATH операционной системы Windows?

Добавил
C:Program Files (x86)PostgreSQL9.6bin;C:Program Files (x86)PostgreSQL9.6lib;C:Program Files (x86)PostgreSQL9.6include

Ошибка осталась
QSqlDatabase: QPSQL driver not loaded

« Последнее редактирование: Декабрь 11, 2016, 13:15 от rudireg »
Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


Вы запускаете проект из MSVC?


Записан
rudireg

Гость


Вы запускаете проект из MSVC?

Да


Записан
PimenS

Крякер
****
Offline Offline

Сообщений: 363

Просмотр профиля


Я с MSVC не пробовал работать. Может быть он не видит плагин qsqlpsql.dll

Попробуйте в main вывести qDebug() << QSqlDatabase::drivers();

какие драйвера видит qt?


Записан
rudireg

Гость


Я с MSVC не пробовал работать. Может быть он не видит плагин qsqlpsql.dll

Попробуйте в main вывести qDebug() << QSqlDatabase::drivers();

какие драйвера видит qt?

(«QSQLITE», «QMYSQL», «QMYSQL3», «QODBC», «QODBC3», «QPSQL», «QPSQL7»)


Записан
rudireg

Гость


Перегрузил компьютер ошибка  более не возникла.
Но теперь появился другой вопрос.
При работе с SQLite  я мог сделать следующие настройки:

C++ (Qt)

   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", this->nameConnect);
   db.setDatabaseName(tableName);
   db.setHostName("127.0.0.1");
   db.setUserName("rudi");
   db.setPassword("rudi");
 

Я мог указать любое имя пользователя и пароль.
Теперь же используя QPostgreSQL
я не могу указать любое имя и пароль, пишет
«ВАЖНО:  пользователь «rudi» не прошёл проверку подлинности (по паролю)nQPSQL: Unable to connect
Пароль проходит только при условии, что я укажу пароль который указал при установки PostgreSQL
Но позвольте господа, если я сделаю программу и запущу на ином компе где не установлен PostgreSQL, что будет с паролем?


Записан
Пантер

Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876

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

Просмотр профиля
WWW


1. Логин/пароль должен вводить юзер.
2. Настрой доступ с локального компа всем без пароля.
3. Постгрес это не скулайт, деплоить его немного сложнее.


Записан

1. Qt — Qt Development Frameworks; QT — QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.

Понравилась статья? Поделить с друзьями:
  • Qsqldatabase qmysql driver not loaded windows
  • Qsoft ramdisk enterprise установка на windows 10
  • Qscalp не удалось проверить статус лицензии windows 10
  • Qrm plus manager rus скачать для windows 10
  • Qr сканер для windows 10 для web камеры