2017-07-20 18 views
0

ビューを通してSQLiteデータベースを更新しようとすると、異常な動作が発生します。使用する編集方法に応じて、ビューを更新するかデータベースを更新することができますが、データベースを更新してビューに新しい値を表示させることはできません。私はQSqlTableModel::OnManualSubmitQt:ビューを通してデータベースモデルを更新する

ビューの変更を使用しますが、基礎となるデータベースが更新されない場合は

auto sdb = QSqlDatabase::addDatabase("QSQLITE"); 
sdb.setDatabaseName("database.db"); 

QSqlTableModel *model = new QSqlTableModel(0, sdb); 
model->setTable("table"); 

//model->setEditStrategy(QSqlTableModel::OnFieldChange); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->select(); 

QTableView *tv = new QTableView(); 
tv->setModel(model); 
tv->show(); 

// I'm not sure, this connect statement is needed. 
// Either way, it does not change the behavior of the problem I observe 
connect(model, 
     SIGNAL(dataChanged(const QModelIndex &, 
          const QModelIndex &, 
          const QVector<int> &)), 
     tv, 
     SLOT(dataChanged(const QModelIndex &, 
         const QModelIndex &, 
         const QVector<int> &))); 

は基本的に、私は次のコードを使用します。私。アプリケーションを再起動する(またはデータベースを再ロードする)と、フィールドは更新されません。私は手動で変更を基になるDBに提出しなければならないので、どちらが当てはまりますか?

Iビューを編集した後入る打撃後QSqlTableModel::OnFieldChange

を使用すると、(編集された行の)ビューが空白になります。基礎となるDBは更新され、DBで見ることができますが、何らかの形で新しい値が得られません。

+1

私はModel/Viewでデータベースを使用していませんでしたが、私の助言:何か変なことがあり、進行方法がわからない場合は、代理人を作成してデータ編集を手動で処理することを検討してください。 –

+1

あなたはどのプラットフォームにいますか?マイナープラットフォーム上のいくつかのDBドライバプラグインはかなりバグです – IlBeldus

+0

マイナーなプラットフォームはLinux(RedHat)です。デリゲートを使うことは良いアドバイスと思われます!残念ながら、それは同じ動作を示しています。 –

答えて

0

私の問題は、SQLiteデータベースのカラムの1つに「PRIMARY KEY」が見つからないようです。ビューを編集することで、データベースは正常に更新されましたが、何らかの変更がビューに正しく転送されませんでした。

列の1つを主キーとして新しいテーブルを作成して問題を解決しました。

+0

コメントをいただきありがとうございました。デリゲートは必要ありませんでした。単にSQLiteカラムPRIMARY KEYの1つを作成するだけで、QSqlTableModelをQtのモデル/ビューインタフェースでうまく動作させることができました。 –

関連する問題