0

この質問は、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に生成された主キーを提供させることは可能ですか? 回避できるのであれば、最後のテーブルが実際に作成したものであることを確認するためにテーブルをロックしたくありません。

お知らせ下さい。

4

1 に答える 1