2012-04-12 6 views
0

私はそれに2 QTableViewsQMainWindowを持っています。各QTableViewには独自のQSqlRelationalTableModelがあります。両方のモデルの編集方法としてOnManualSubmitを使用しています。両方のモデルは、同じデータベースをヒットし、select()続いsetTableを(各々が異なるテーブルに当たる)、使用して取り込まれます。QTableViewは外部キーをリフレッシュしませんか?

第二テーブルのモデルは、最初のモデルを移入するために使用されるテーブルにリンクするsetRelationへの適切な呼び出しで設定されています。 2番目(子)のビューでは、view->setItemDelegate(new QSqlRelationalDelegate(view));

すべてがうまくいくように見えます。最初のビューに表示されるデータは、2番目のビューの適切なフィールドのドロップダウンリストに表示されます。

問題:最初の(親)ビューにレコードを追加、編集、または削除してデータベースに保存すると、ドロップダウンが正確になるように2番目のビューを更新する方法を教えてください。

は、第二の(子)ビューに保存されていない編集があるかもしれない、と私はそれらを失いたくない、でも私はまだそれらを保存したいです。ドロップダウンリストを適切に更新したいだけです。

私はchild_model->relationModel(fk_col)->select();を試しましたが、それはうまくいきますが、child_model->relationModel(fk_col)->columnCount();は、選択が親テーブルのすべてのフィールドで動作していることを示しています。これは不要なペシメーションのようです。

これは私の最初の試みで、<QtSql>QTableViewを使用しているため、何か根本的なものが欠落している可能性があります。両方のビューに同じモデルを使用する方法があり、リフレッシュは自動的に行われますか?子ビューのドロップダウンをリフレッシュする適切な方法は何ですか?

答えて

0

QSqlRelationalTableModelによって実行されたクエリは、もはや外部キーが含まれていません。

このDB構造の例:

CREATE TABLE countries (id, name); 
CREATE TABLE cities(id, name, id_country); 

クエリは次のようになります。

SELECT id, name, country_name FROM cities 
    LEFT JOIN countries ON id_country = countries.id; 

意味するクエリが更新されるテーブルに対して再実行する必要があり、結合されたテーブルが変更された場合

自動的に更新するために、私はあなたが持っているだろうと思います。

  • がモデルに実際の外部キーを維持するために定期的にQSqlTableModelを使用して、
  • がマッピングされた値を表示するようにして作成することQAbstractItemDelegateクラスを書くためにQComboBoxエディタ
  • 最初のモデルが変更されたときは常に、ビューのマッピングされた列領域の再描画をトリガーします。
関連する問題