调用 QSqlTableModel setTable 方法时出现"Unable to find table"错误

"Unable to find table" error when calling QSqlTableModel setTable method

本文关键字:Unable to table 错误 find setTable QSqlTableModel 方法 调用      更新时间:2023-10-16

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

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\"。

我找到了解决方案。我应该在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");

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

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

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

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