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;
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()) {
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))