2017-03-17 7 views
0

QSqlTableModelオブジェクトからデータを取得することによってQTableViewを生成する必要があります。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()およびオープン()によって、データベース接続を検証する:私は、SQL Serverデータベースへの接続を行うために、次のコマンドを使用します。私はデータベーステーブルから適切に照会することもできます。今はすべてのことが大丈夫です。私は、次のコマンドを使用する場合でも、問題が発生:

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

方法は、設定可能な動作していないとエラーが発生します。「mytableは\」\テーブルを見つけることができません。 http://doc.qt.io/qt-5/qsqltablemodel.html#QSqlTableModel QSqlTablemodelのコンストラクタによると

+0

ありますか?もしそうなら、それを別のSQLクライアントから正常にクエリできますか? – Edd

+0

@Edd、はい私はそれを持っています。私は問題なくQSQLQueryでクエリを読むことができます。 –

答えて

0

:あなたのDBオブジェクトは、あなたのテーブルが利用できないデフォルトのデータベースに接続します有効ではありません場合に

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 dbの初期化とセットアップに使用されるパラメータを再度確認します。

+0

私のQSQLDatabaseオブジェクトのisValid()とopen()メソッドはtrueを返して以来、データベース接続はOKです。 QSQLQueryでデータベースを照会できます。 –

+0

Mh、**同じ** dbオブジェクトがQSQLQueryでうまく動作するとすれば、私はあまりよく分かりません。おそらく、テーブルを作成するために使用されるCREATEステートメントであなたの答えを更新しようとします。だから、人々はこれに取り組むためにいくつかの追加情報を持っているかもしれません – Edd

0

解決策が見つかりました。私は右setDataBaseNameメソッド後とQSqlTableModelの作成前に、データベースを開く必要があります:あなたの「mydbという」データベースに正確に「mytableは」という名前のテーブルが

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"); 
関連する問題