TableView не загружает QSqlQueryModel в него - PullRequest
0 голосов
/ 22 апреля 2019

Я использую 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;
}

В результате получается таблица из моей базы данных с правильными метками и большим количеством строк, но со всем пустым

1 Ответ

0 голосов
/ 14 мая 2019

Объект QSqlDataBase db необходимо закрыть в деструкторе пользовательского интерфейса, иначе он не будет отображаться, даже если он загружен в память, и может вести себя странно ..... Поэтому вы должны использовать db.open () в конструкторе интерфейса и db.close (); в деструкторе.

НЕ ставьте их обоих в такую ​​функцию:

void function()
{
db.open()
// code for database here
db.close();
}

это не сработает, и я пока не понимаю, почему

...