2017-03-17 338 views
0

我需要通过从QSqlTableModel对象中检索数据来填充QTableView。我用下面的命令来建立到SQL Server数据库的连接:调用QSqlTableModel setTable方法时出现“无法找到表”错误

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. 

的方法可设置不工作,导致一个错误:无法找到表\“mytable的\”但是当我使用下面的命令问题就出现了。

+0

在'mydb'数据库中是否有一个正好名为'mytable'的表?如果是这样,您可以从另一个SQL客户端成功查询它吗? – Edd

+0

@Edd,是的,我拥有它。我可以通过QSQLQuery读取它的查询而没有任何问题。 –

回答

0

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

Creates an empty QSqlTableModel and sets the parent to parent and the database connection to db. If db is not valid, the default database connection will be used.

在你的数据库对象是无效的,你会连接到您的表是不是默认提供的数据库中的事件。

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

+0

正如我所说的,因为我的QSQLDatabase对象的isValid()和open()方法返回true,所以数据库连接正常。我可以通过QSQLQuery查询数据库。 –

+0

如果你说** **相同​​的** db对象在QSQLQuery中可以正常工作,那我就不太确定了。也许尝试用CREATE语句来更新你的答案,用于创建表,所以人们可能有一些额外的信息来解决这个问题 – Edd

0

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