2013-04-25 67 views
-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提供生成的主键而不会额外增加数据库的双向往返。我宁愿不锁定表格以确保最后一个实际上是我创建的那个,如果我能避免的话。

请指教。

回答

0

通过使用LASTVAL()的附加查询来“解决”。不知道这是否是使用Qt API的正确方法。在交易中,LASTVAL()是安全的。

相关问题