この質問は、Postgres を使用する Windows 上の Qt 4.7.3 に関するものです。
を使用してかなり大きなテーブルに行を挿入しようとしてQSqlTableModel
います QSqlTableModel::setTable
。モデルに を使用してレコード オブジェクトを要求し、QSqlRecord row(QSqlTableModel::record);
を介してこれにデータを入力しQSqlRecord::setValue
ます。行を永続化するコードは次のとおりです。
const bool insertOk = tableModel.insertRecord(-1, row);
if (!insertOk || !tableModel.submitAll()) {
return -1;
}
QSqlError err = tableModel.lastError();
if (err.type() != QSqlError::NoError) {
std::cerr << "errormsg " << std::endl;
return -1;
}
const int primaryKey = tableModel.query().lastInsertId().toInt();
上記は私が試したものですが、その内容はtableModel.query()
巨大な選択であり、RETURNING
キーワードはありません。lastInsertId()
無効な を返しますQVariant
。データベースへの追加の-厄介な-ラウンドトリップを行わずに、Qtに生成された主キーを提供させることは可能ですか? 回避できるのであれば、最後のテーブルが実際に作成したものであることを確認するためにテーブルをロックしたくありません。
お知らせ下さい。