首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Qt应用程序在sqLite中编辑字段值?

如何使用Qt应用程序在sqLite中编辑字段值?
EN

Stack Overflow用户
提问于 2016-08-31 10:49:19
回答 1查看 442关注 0票数 0

我正在使用QT5.7和C++编写一个库应用程序,该应用程序由一个sqLite v3数据库支持。我想实现一个贷款/返回功能。我已经在我的数据库中启用了一个名为isLoaned的bool字段,每当用户单击loan按钮时,我希望将相应记录的值更改为true。我得到了与数据库的正确连接,没有错误,但是数据库没有更新,字段值保持不变。我按照Qt文档说明了这些类的使用情况,但我找不到解决方案。这是我的代码:

代码语言:javascript
运行
复制
void loanBookDialog::on_loanBookBtn_clicked()
{
MainWindow mw;
mw.connOpen();
QString id, title;
id = ui->idLnEdit->text();
title = ui->titleLnEdit->text();
QSqlQuery qry(mw.myDb);
qry.prepare("select * from Books where (id='"+id+"' OR title='"+title+"') AND isLoaned=0");
if (qry.exec()) {
    QSqlRecord loanRec(qry.record());
    QSqlField loanField = loanRec.field(5);
    loanField.setValue(true);
    qDebug() << loanField.isNull();
    qDebug() << loanField.isReadOnly();
    qDebug() << loanField.isValid();
    qDebug() << loanField.isGenerated();
    ui->wrong5Lbl->setStyleSheet("QLabel {color: green}");
    ui->wrong5Lbl->setText("Loaned succesfuly.");
    mw.connClose();
}
else {
    ui->wrong5Lbl->setStyleSheet("QLabel {color: red}");
    ui->wrong5Lbl->setText("Oops! Something went wrong, try again.");
}
}

调试输出:

代码语言:javascript
运行
复制
Field value: QVariant(bool, true)
isNull: false
isReadOnly: false
isValid: true
isGenerated: true
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 11:03:35

在任何数据库中,SQL查询按值返回结果。QSqlRecord是数据库的副本,而不是对它的引用。因此,loanField.setValue(true);绝对一无所获。

要修改数据库的内容,需要执行数据修改语句,在本例中是更新

此外,请记住,由于引用问题,使用字符串组合组合查询充满了危险,不应在参数可以使用的地方使用。

代码语言:javascript
运行
复制
QSqlQuery loanQuery(mw.myDb);
loanQuery.prepare("update Books set isLoaned where id=:id");
// note: you can re-use the prepared query with different bindings to improve performance
loanQuery.bindValue(":id", id);
loanQuery.exec();

另外,不要忘记在事务中包装它。做:

代码语言:javascript
运行
复制
mw.myDb.transation();

在此之前

代码语言:javascript
运行
复制
mw.myDb.commit();

之后。检查错误!如果提交失败,则不会写入数据!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39247566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档