You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt多查询操作Sqlite时Update更新语句执行失败问题求助

Qt操作SQLite更新不生效问题排查与解决

核心排查步骤

  • 补全SQL执行错误检查:当前代码未判断QSqlQuery::exec()的返回值,也未捕获执行错误,第一步先添加错误日志定位逻辑,每次执行查询后若返回值为false,打印query.lastError().text()即可得到具体报错原因。
  • 修复数据类型溢出问题:代码中把Id_Composition字段值转换为qint8类型,qint8为8位有符号整数,取值范围仅为-128~127,若表中Id_Composition值超过127会发生类型溢出,导致绑定的参数值错误,自然匹配不到对应数据行。
  • 适配命名占位符规则:部分版本的Qt SQLite驱动不支持同一个命名占位符在单条SQL语句中出现多次,原UPDATE语句里:tmp出现了2次,仅绑定1次可能出现仅替换第一个占位符的问题,导致条件匹配失败。
  • 检查事务提交状态:若全局开启了数据库事务未显式执行commit,修改会在事务提交前不会持久化到数据库。

修复后代码示例

void DataBase::automatisationQteStock(Liste_Commande listeCommande){
    if(db.isOpen()){
        QSqlQuery query;
        QSqlQuery query2;
        
        QString querySelectIdCompo = "select Id_Composition from Carte_composition cc where Id_Carte  = :idcarte ;";
        // 拆分UPDATE语句重复占位符,适配驱动兼容性
        QString queryUpdate = "update Stock set quantite = quantite - dose from (select quantite as dose, Id_Stock from Composition where Id_Composition = :tmp1) where Stock.Id_Stock = (select Id_Stock from Composition where Id_Composition = :tmp2);";

        query.prepare(querySelectIdCompo);
        query.bindValue(":idcarte", listeCommande.getId_Carte());
        if(!query.exec()){
            qDebug() << "ID查询失败:" << query.lastError().text();
            return;
        }

        while(query.next()){
            // 替换qint8为int避免类型溢出
            int tmp = query.value("Id_Composition").toInt();
            qDebug() << "当前处理的Composition ID:" << tmp;

            query2.prepare(queryUpdate);
            // 分别绑定两个占位符
            query2.bindValue(":tmp1",tmp);
            query2.bindValue(":tmp2",tmp);
            if(query2.exec()){
                // 打印受影响行数确认更新生效
                qDebug() << "更新成功,受影响行数:" << query2.numRowsAffected();
            }else{
                qDebug() << "更新失败:" << query2.lastError().text();
            }
        }
        // 若全局开启了事务,取消下方注释执行提交
        // db.commit();
    }
    else
    {
        qDebug() << "数据库连接未建立";
    }
}

内容的提问来源于stack exchange,提问作者mdc93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:24:04