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

0

通过对LASTVAL(). 不确定这是否是使用 Qt API 的正确方法。LASTVAL()在交易中是安全的。

于 2013-04-25T13:43:20.077 回答