0

我需要通过从 QSqlTableModel 对象中检索数据来填充 QTableView。我使用以下命令连接到 sql server 数据库:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString connectionTemplate = "DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Uid=username;Pwd=password;Trusted_Connection=Yes;";
QString connectionString = connectionTemplate.arg("localhost").arg("mydb");
db.setDatabaseName(connectionString);

我通过 QSqlDatabase 类的 isValid() 和 open() 方法验证数据库连接。我也能够正确地从数据库表中查询。ٍ到目前为止一切正常。但是当我使用以下命令时会出现问题:

QSqlTableModel* model = new QSqlTableModel(parent,db);
model->setTable("mytable");
qDebug() << model->lastError().text(); // the error message is printed on consul.

方法 setTable 不起作用并导致错误:无法找到表“mytable”。

4

2 回答 2

3

我找到了解决方案。我应该在 setDatabaseName 之后和创建 QSqlTableModel 之前打开数据库:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
QString connectionTemplate = "DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Uid=username;Pwd=password;Trusted_Connection=Yes;";
QString connectionString = connectionTemplate.arg("localhost").arg("mydb");
db.setDatabaseName(connectionString);
db.open(); // :)
QSqlTableModel* model = new QSqlTableModel(parent,db);
model->setTable("mytable");
于 2017-03-18T17:56:54.703 回答
0

根据http://doc.qt.io/qt-5/qsqltablemodel.html#QSqlTableModel QSqlTablemodel的构造函数:

创建一个空的 QSqlTableModel 并将 parent 设置为 parent 并将数据库连接设置为 db。如果 db 无效,将使用默认数据库连接。

如果您的 db 对象无效,您将连接到您的表不可用的默认数据库。

仔细检查用于初始化和设置 QSqlDatabase db 的参数。

于 2017-03-17T16:13:13.657 回答