Oracle データベースを実装しました。アプリケーションの GUI と db のインターフェイスとして Qt を使用しています。データベースへの接続を設定し、QTableView にテーブルを表示すると正常に動作します。すべてのセルの編集は、通常、QSqlTableModel を使用してネイティブにサポートされています。ただし、関連付けられているデフォルトの ItemDelegate がセルを編集するときに、Qt はデータベースによって定義された制約を考慮していないようです。
外部キー値であるセルを編集すると、Qt ではキー値を入力できないだけでなく、これらの変更を送信して更新を実行するためにデータベースにクエリを実行するとします。設定された制約により、これは明らかに機能しません。ここで、ビューのデフォルトの ItemDelegate が編集時に有効な値をチェックすることを期待するには、質問が多すぎるかもしれないことがわかりました。
サポートされていない値を送信すると、実際の問題が発生します。ビューは引き続き値の変更を適用し、編集が有効であることを示します。エラーは処理されず、エラー メッセージも配信されません。そこから、制約に従う値への変更を元に戻すまで、ビューは一部の行の編集を許可しません。
データベースの制約に対して値の変更を検証するために、独自のitemDelegateをセットアップする必要があるとは信じがたいです。
この投稿に答えることができ、接続の設定方法を知っている人なら誰でもできると思うので、コードを少し分解します。
bool driverSuccess = validDriver(driver);
if(driverSuccess) {
_db = QSqlDatabase::addDatabase(driver);
_db.setHostName(host);
_db.setDatabaseName(dbName);
_db.setPort(port);
_db.setUserName(user);
_db.setPassword(pwd);
_db.open();
//... validate connection
}
// setup table model and connect to view
QSqlRelationalTableModel* model = new QSqlRelationalTableModel;
model->setTable(tableName);
model->select()
QTableView* table_view = new QTableView(0);
table_view->setModel(model);
//...
_db.close()
助けていただければ幸いです。ありがとう!