gpt4 book ai didi

c++ - 第一次错误后,使用 QSqlTableRecord 插入记录失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:12 25 4
gpt4 key购买 nike

我在使用 QSqlTableModel 将数据插入 SQLite 数据库时遇到问题。该表是这样创建的:

QSqlQuery createTblSMS("CREATE TABLE sms_tbl("
"isRead BOOLEAN NOT NULL,"
"readTime DATETIME,"
"arrivalTime DATETIME NOT NULL,"
"sender TEXT NOT NULL,"
"receiver TEXT NOT NULL,"
"smsContent TEXT,"
"PRIMARY KEY(arrivalTime, sender, receiver));");

我正在插入这样的记录:

smsModel->insertRecord(-1, sms);
QString error = smsModel->lastError().text();
smsModel->submitAll();

smsModel 是 QSqlTableModel。

例如,如果我用这个值 (false, NULL, '2010-06-30 17:27:55', '075710383', 'ONE 142140', 'TOP 15 # 2') - 记录被插入。在那条记录之后,如果放一 strip 有这个值的记录(false,NULL,'2010-06-30 10:05:29','075710383','ONE 142140','TOP 15 # 3')——也是这条记录被插入。

但是如果我尝试重新插入已经在数据库,smsModel 会给出这样的错误:“列 arrivalTime、发送者、接收者不是唯一的,无法获取行”——这是预期的。 任何其他后续插入的唯一记录都将失败,并且模型会给我同样的错误。您知道为什么会这样吗?

最佳答案

我遇到了这个双重问题。

当您处于手动提交模式时,QSqlTableModel 不会在 submitAll 失败时清除其缓存(当您向它发送违反约束的记录时它应该这样做)。

要更正此问题,您需要调用 select() 或 revertAll 来删除那些挂起的更改。

文档并没有使这一点变得非常明显,但它确实存在,请查看:http://doc.qt.io/qt-4.8/qsqltablemodel.html#submitAll

关于c++ - 第一次错误后,使用 QSqlTableRecord 插入记录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3343976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com