这个问题与带有 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 提供生成的主键,而不需要额外的 - 丑陋 - 往返数据库。如果可以避免的话,我宁愿不锁定表以确保最后一个实际上是我创建的表。
请指教。