C++ 为什么触发器查询在sqlite-QT中失败?
我是SQL的初学者。我在嵌入式系统上使用sqlite,QT-on。我想在这里扣动扳机。触发条件是每当主键Id大于32145时,应设置channelNum=101。我也想设置attrib name-text,但我遇到了编译问题。我相信触发器的设置是DDL数据定义语言的一部分。如果我错了,请告诉我。这是我的createdb代码。我得到了sql查询错误。另外,请建议如何设置文本-attrib=“喜剧”C++ 为什么触发器查询在sqlite-QT中失败?,c++,mysql,sql,qt,sqlite,C++,Mysql,Sql,Qt,Sqlite,我是SQL的初学者。我在嵌入式系统上使用sqlite,QT-on。我想在这里扣动扳机。触发条件是每当主键Id大于32145时,应设置channelNum=101。我也想设置attrib name-text,但我遇到了编译问题。我相信触发器的设置是DDL数据定义语言的一部分。如果我错了,请告诉我。这是我的createdb代码。我得到了sql查询错误。另外,请建议如何设置文本-attrib=“喜剧” /**将数据库与查询关联**/ QSqlQuery查询(m_demo_db); /**默认情况下,在
/**将数据库与查询关联**/
QSqlQuery查询(m_demo_db);
/**默认情况下,在sqlite中禁用外键**/
/**这是先打开它们的pragma**/
exec(“PRAGMA foreign_keys=ON;”);
if(false==query.exec())
{
qDebug()SQLite既没有IF语句,也没有SET语句
如中所示,触发器中只能使用UPDATE/INSERT/DELETE/SELECT语句
整个触发器的条件可以用WHEN子句实现
不能直接更改插入的值;必须在以后更新该记录:
创建触发器upd\U检查
在dttServiceList上插入后
每行
新建时.Id>32145
开始
更新dttServiceList
设置channelNum=101
其中Id=NEW.Id;
结束;
ID是主键,我想您不能使用这种方式。如果它不是自动递增的,并且您在插入查询中传递ID,那么尝试使用if NEW.ID>
而不是ID>
如何在此处分配文本-attrib=“Comedy”谢谢!我得到了答案。请检查这里。但是,我无法理解控制流程图。triggerQuery=“在dttServiceList上插入后\n为每行\WHEN NEW.Id>32145\BEGIN\UPDATE dttServiceList\SET channelNum=101,attrib='comeetic'\WHERE Id=NEW.Id;\END”创建触发器upd\u检查;
/** associate db with query **/
QSqlQuery query ( m_demo_db );
/** Foreign keys are disabled by default in sqlite **/
/** Here is the pragma to turn them on first **/
query.exec("PRAGMA foreign_keys = ON;");
if ( false == query.exec())
{
qDebug()<<"Pragma failed";
}
/** Create Table for storing user preference LCN for DTT **/
qDebug()<<"Create Table postcode.db";
query.prepare(" CREATE TABLE dttServiceList (Id INTEGER PRIMARY KEY, attrib varchar(20), channelNum integer )" );
if ( false == query.exec())
{
qDebug()<<"Create dttServiceList table failed";
}
/** Try placing trigger here **/
triggerQuery = "CREATE TRIGGER upd_check BEFORE INSERT ON dttServiceList \
FOR EACH ROW \
BEGIN \
IF Id > 32145 THEN SET channelNum=101; \
END IF; \
END; ";
query.prepare(triggerQuery);
if ( false == query.exec())
{
qDebug()<<"Trigger failed !!";
qDebug() << query.lastError();
}