Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么触发器查询在sqlite-QT中失败?_C++_Mysql_Sql_Qt_Sqlite - Fatal编程技术网

C++ 为什么触发器查询在sqlite-QT中失败?

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); /**默认情况下,在

我是SQL的初学者。我在嵌入式系统上使用sqlite,QT-on。我想在这里扣动扳机。触发条件是每当主键Id大于32145时,应设置channelNum=101。我也想设置attrib name-text,但我遇到了编译问题。我相信触发器的设置是DDL数据定义语言的一部分。如果我错了,请告诉我。这是我的createdb代码。我得到了sql查询错误。另外,请建议如何设置文本-attrib=“喜剧”

/**将数据库与查询关联**/
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();
         }