qt实现sqlite3的级联删除

本文介绍如何在Qt环境下,利用SQLite3的级联删除功能,实现在删除产品表记录时自动删除关联的条码表记录。讨论了可能存在的自增主键越界问题,并提供了代码示例及编译环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.需求

有两张表,条码表和产品详情表,条码表中的rfid为产品表中的rfid外键,要求删除产品表中的相关条目时能实现条码表的级联删除

2.解决

使用qt中的sqlite3自带的级联删除解决这个需求

3.代码

mymain.cpp
#include "mysql.h"
#include <QtWidgets/QApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QtCore/QDir>
#include <QMessageBox>

bool createdb();

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    createdb();

    mysql w;
    w.show();
    return a.exec();
}

bool createdb()
{
    bool bret = false;
    //这里创建一个db目录存储数据库文件
    QString strdbpath("");
    strdbpath = QCoreApplication::applicationDirPath();
    strdbpath += "/db";
    QDir dir("");
    dir.mkpath(strdbpath);
    strdbpath += "/mysqlite.db";
    QSqlDatabase dbset = QSqlDatabase::addDatabase("QSQLITE", "file");
    dbset.setDatabaseName(strdbpath);
    if (!dbset.open()) {
        //LOG_ALL_ERROR(QStringLiteral("failed open mysqlite.db"));
        return bret;
    }

     QSqlQuery setquery(QSqlDatabase::database("file", true));
     if(!setquery.exec("PRAGMA foreign_keys = ON;"))
     {
         QSqlError sqlerror = setquery.lastError();
         QString texterr = sqlerror.text();
         QMessageBox::information(nullptr, "errormsg", texterr);
         return false;
     }

    //商品详情表
    bret = setquery.exec("create table tb_goods(rfid varchar(33) primary key, name varchar(200) not null)");
    if (!bret)
    {
        QSqlError sqlerror = setquery.lastError();
        QString texterr = sqlerror.text();
        if (texterr.contains("already exists", Qt::CaseInsensitive))
            bret = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值