-1
此问题与使用Postgres的Windows上的Qt 4.7.3相关。如何在使用QSqlTableModel :: insertRecord插入行时检索生成的主键
我试图通过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提供生成的主键而不会额外增加数据库的双向往返。我宁愿不锁定表格以确保最后一个实际上是我创建的那个,如果我能避免的话。
请指教。