2017-03-17 69 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"); 
相關問題