У меня проблемы с использованием функции выбора для QSqlTableModel. Он всегда возвращает false, и я не смог понять, почему.
Я настроил базу данных SQL, используя PostgreSQL. Я смог добавить базу данных, используя QSqlDatabase::addDatabase, и я смог использовать QSqlQuery для извлечения данных из базы данных и создания новых таблиц и новых строк в таблицах. Теперь я пытаюсь отобразить базу данных в TableView. Я обнаружил, что вы можете создать QSqlTableModel для подключения к TableView. Однако на шаге выбора происходит сбой.
Вот код, который я запускаю:
_database = loadDatabase();
qDebug()<<"table database name: "<<_database.databaseName()<<endl; //Returns: table database name: "postgres"
qDebug()<<"table database isOpen: "<<_database.isOpen()<<endl; //Returns: table database isOpen: true
qDebug()<<"table database tables: "<<_database.tables()<<endl; //Returns: table database tables: ("Test", "testtable")
qDebug()<<"last error: "<<_database.lastError().text()<<endl; //Returns: last error: " "
_tableModel = new QSqlTableModel(this,_database);
_tableModel->setTable(_database.tables().at(1));
_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
if(_tableModel->select()){
qDebug()<<"Table was selected!"<<endl;
}
else{
qDebug()<<"Table could not be selected"<<endl;
}
qDebug()<<"is database valid: "<<_database.isValid()<<endl; //Returns: is database valid: true
_database определяется как QSqlDatabase. Всегда возвращает Таблица не может быть выбрана.
Я нашел ответ на Stack Overflow, в котором предлагалось проверить, является ли база данных Open (), правильно ли имя таблицы и есть ли какие-либо сообщения об ошибках с помощью lastError (). Я включил эти ответы в операторы отладки в своем коде. Вроде бы все правильно, но все же возвращает false.
Любая помощь будет принята с благодарностью. Спасибо!
code QSqlQuery qry(_database); QString string = "SELECT * FROM " + _database.tables().at(1)+";"; if(qry.exec(string)){ qDebug()<<"Query succeeded!"<<endl; QSqlRecord rec = qry.record(); while (qry.next()){ qDebug() << qry.value(0).toString()+" "+qry.value(1).toString()+" "+qry.value(2).toString(); } }
Это успешно распечатывает записи в таблице. Отвечает ли это на ваш вопрос? - person Nekreg45   schedule 03.03.2021qDebug() << _database.lastError().text();
после_tableModel->select()
, чтобы увидеть сообщение об ошибке - person mugiseyebrows   schedule 04.03.2021