Qt QSqlTableModel正在插入新记录,获取的数据为QVariant(无效)
我有一个简单的QSqlTableModel:Qt QSqlTableModel正在插入新记录,获取的数据为QVariant(无效),qt,qvariant,qsqltablemodel,Qt,Qvariant,Qsqltablemodel,我有一个简单的QSqlTableModel: class UsersModel : public QSqlTableModel { Q_OBJECT public: UsersModel(); ~UsersModel(); bool newUser(const QString &name, const QString &surname, const QString &birthday); }; UsersModel::UsersMode
class UsersModel : public QSqlTableModel
{
Q_OBJECT
public:
UsersModel();
~UsersModel();
bool newUser(const QString &name, const QString &surname, const QString &birthday);
};
UsersModel::UsersModel()
{
setTable("users");
select();
}
在将新记录插入模型时,会将其插入数据库,但立即从模型检索此记录不起作用:
bool UsersModel::newUser(const QString &name, const QString &surname, const QString &birthday)
{
QSqlRecord rec = record();
rec.setGenerated("id", true);
rec.setValue("name", QVariant(name));
rec.setValue("surname", QVariant(surname));
rec.setValue("birthday", QVariant(birthday));
bool res = insertRecord(-1, rec);
if (res) {
qDebug() << "last inserted id:" << query().lastInsertId();
qDebug() << "name: " << record(rowCount() - 1).value("name");
}
return res;
}
newUser方法调用的结果:
最后插入的id:QVariantqlonglong,31
名称:QVariantInvalid
如果我查看数据库,就会插入记录,但是如果我试图从模型中获取它,就会返回无效的QVariant。
我做错了什么?模型不应该返回新插入记录的数据吗?模型的编辑策略是什么?尝试将其设置为QSqlTableModel::OnFieldChange并检查结果。是否假设query.lastInsertId与rowCount-1相同?事实并非总是如此。@PavelStrakhov根据docs:QSqlRecord QSqlQueryModel::record int row const返回包含当前查询字段信息的记录。如果行是有效行的索引,则记录将填充该行的值。-我假设插入的记录是模型中的最后一条记录,因此rowCount-1应该是最后一行的索引。-可能是错误的假设,但是根据DOC插入记录1,ReC应该在模型中附加行。新的条目可能会出现在表的中间,这取决于模型的排序设置。@ PavelStrakhov Hmm.。OK,但是RealDeordRooStudio1.ValueNeNm应该从模型返回最后一条记录,不管该记录的id是什么。模型负责在rowCount方法中返回正确的行数。