这个问题适用于带有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提供生成的主键,而不需要额外的 - 复杂 - 往返数据库。我宁愿不锁定表格以确保最后一个实际上是我创建的那个,如果我可以避免它。
请指教。
答案 0 :(得分:0)
使用LASTVAL()
的附加查询“解决”。不确定这是否是使用Qt API的正确方法。 LASTVAL()
在交易中是安全的。