调用 QSqlTableModel setTable 方法时出现“无法找到表”错误

m.t*_*eri 0 c++ qt qsqltablemodel qsqldatabase

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

\n\n
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");\nQString connectionTemplate = "DRIVER={SQL Native Client};SERVER=%1;DATABASE=%2;Uid=username;Pwd=password;Trusted_Connection=Yes;";\nQString connectionString = connectionTemplate.arg("localhost").arg("mydb");\ndb.setDatabaseName(connectionString);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我通过 QSqlDatabase 类中的 isValid() 和 open() 方法验证数据库连接。我还可以正确地从数据库表中查询。\xd9\x8d 到目前为止一切都很好。但是当我使用以下命令时出现问题:

\n\n
QSqlTableModel* model = new QSqlTableModel(parent,db);\nmodel->setTable("mytable");\nqDebug() << model->lastError().text(); // the error message is printed on consul.\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

m.t*_*eri 6

我找到了解决方案。我应该在 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");
Run Code Online (Sandbox Code Playgroud)