Я использую tableView для отображения некоторой информации из таблицы в моей базе данных через QSqlQueryModel. Он подключается, создает фактическую таблицу, создает строки и столбцы и помечает их соответствующим образом, когда я использую model->rowCount(); в qDebugg(), он показывает мне правильное количество строк, то же самое для столбцов.
Проблема в том, что мои столбцы в каждой строке, где должна отображаться информация,..... ну... пустые, ПУСТЫЕ, когда у меня есть фактические данные внутри таблицы, и я не могу понять, почему, и не нашел конкретного решение для видео, онлайн или при переполнении стека (только 1 вопрос, который близок к этому, но в нем говорится использовать rowCount() для отладки соединения и установки отсутствующих драйверов...)
Это то, что я пробовал до сих пор:
QString error=nullptr;
QSqlDatabase db=this->mDbConnection->getDataBase();
if (!this->mDbConnection->openDatabase(&error)) {
QMessageBox::critical(this, "Error: ", error);
return;
} else {
qDebug()<<"Connection to database sucess!";
db.open();
QSqlQueryModel *model = new QSqlQueryModel();
model->setQuery("SELECT [UserID],[FullName],[UserName],[Password],[PermissionID]FROM [Restaurant].[dbo].[Users]");
ui->tableView->setModel(model);
qDebug()<<model->rowCount();
//qDebug()<<data(model->createIndex(0,0));
db.close();
//cod aici
}
//mDbConnection is a custom object databaseconnection.cpp:
bool DatabaseConnection::openDatabase(QString *error) {
this->db.setDatabaseName(QString("DRIVER = {%1};SERVER=%2;DATABASE=%3;UID=%4;PWD=%5;Trusted_Connection=%6;").arg(this->conn->getDriver())
.arg(this->conn->getServer())
.arg(this->conn->getDatabaseName())
.arg(this->conn->getUser())
.arg(this->conn->getPassword())
.arg(this->conn->getTrustedConnection() ? "Yes" : "No"));
if (!this->db.open()) {
if (error!=nullptr) {
*error = this->db.lastError().text();
}
return false;
}
return true;
}
QSqlDatabase DatabaseConnection::getDataBase() {
return this->db;
}
Результатом является таблица из моей базы данных с правильными метками и хорошим количеством строк, но все пусто.





Объект QSqlDataBase db должен быть закрыт в деструкторе пользовательского интерфейса, иначе он не будет отображаться, даже если он загружен в память, и может вести себя странно..... Поэтому вы должны использовать db.open() в конструкторе интерфейса и db.close(); в деструкторе.
НЕ ПОМЕЩАЙТЕ их обоих в такую функцию:
void function()
{
db.open()
// code for database here
db.close();
}
так не получится и я пока не понимаю почему