Как работать с QSqlDatabase пример ( QSqlDatabase example)
Заголовок изменён потому, что ответ на вопрос отражает почти все аспекты работы с QSqlDatabase для того чтобы сделать запрос к бд.
Есть метод:
QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName)
- сигнатура из подсказки qt (на картинке) в доке немного другая.
Проблема в том, что если я создаю базу без указания connectionName
(как на рисунке выше), то query.exec
:
- возвращает
код работы 1
, - в противном случае (если я задаю имя данному соединению) возвращает
код работы 0
, да еще и выдает ошибку на этапе исполнения
"QSqlQuery::prepare: database not open"
Получается, что я не могу задать имя подключению и соответственно удалить потом подключение, чтобы создать новое, тоже не могу.
Проблема именно в имени подключения, почему при его указании, не работает query.exec()
?
PS: сам по себе запрос нормальный, я проверял на pgadmin
, более того он работает, если не указывать имя подключения.
бд postgre\
Qt 5.15.3 (x86_64-little_endian-lp64 shared (dynamic) release
build; by GCC 11.3.0) on "xcb"
OS: Ubuntu 22.04.1 LTS [linux version 5.15.0-56-generic]
#include <iostream>
#include <QApplication>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlResult>
#include <QSqlRecord>
int main(int argc, char *argv[])
{
QSqlDatabase testDb;
testDb = QSqlDatabase::addDatabase("QPSQL");//testDb = QSqlDatabase::addDatabase("QPSQL","qwe");
testDb.setHostName(some_ip);
testDb.setPort(port);
testDb.setDatabaseName(name);
testDb.setUserName(some_user);
testDb.setPassword(some_pass);
bool ok = testDb.open();
std :: cout <<"\n----------------------\nconnection to gid DataBase is "<<ok;
QSqlQuery query;
query.prepare(some_select);
int a = query.exec();
QSqlError err = query.lastError();
//вывести ошибку
std :: cout <<"\n query.exec status (0 if bad) = "<<a<<"\n";
// query.finish();
}