PaulSpeaking_5 发表于 2020-3-7 13:37:09

应用中心,提交UPDATE语句,为什么重复执行呢?

本帖最后由 PaulSpeaking 于 2020-3-7 13:38 编辑

1. 定义触发器 `提取 -收据自动编号` , 保存触发
内容如下 :
a. 数据过滤: 本表单.开票方式 = "001" [这里的 单选框 是绑定了基础代码,001代表收据,002代表发票]
b. 数据填充: 收据当前编号(这个是文本框) , 填入值 是 : MYFUNC("setGetShouJv")
c. 处理引擎 : get_shoujv.fun

2. 在plugin\表单编号 的文件夹中, 创建get_shoujv.fun.php
<?php

date_default_timezone_set("PRC");

// 收据
      function setGetShouJv($PLUGIN_UTILS){
                        
                $today = date('d');
               
                // # 如果是本月的第一天
                if($today == 01 ){

                        //操作数据库的第一步
                        $sql_Db = $PLUGIN_UTILS -> getDb();
                        //$onoff="on";
                        // 加载 SQL语句 , 收据编码清零
                        $sql_result = $sql_Db -> createCommand("UPDATE `TD_OA`.`fapiaoshoujv` SET `TD_OA`.`fapiaoshoujv`.`shoujv` = 0 WHERE `invoice_key` = 1");
                  // $onoff="off";
                        // 执行 SQL 语句
                        $sql_result ->execute();
                        
                }else{
                // # 正常天数
                        //操作数据库的第一步
                        $sql_Db = $PLUGIN_UTILS -> getDb();
                        //加载 SQL语句 , 收据编码 +1
                        $sql_result = $sql_Db -> createCommand("UPDATE `TD_OA`.`fapiaoshoujv` SET `TD_OA`.`fapiaoshoujv`.`shoujv` = `TD_OA`.`fapiaoshoujv`.`shoujv` + 1 WHERE `invoice_key` = 1 ");
                  // 执行 SQL 语句
                        $sql_result ->execute();
                        
                        
                }
               
                // # 读取收据记录,回填到 控件 中
                $sql_Db2 = $PLUGIN_UTILS -> getDb();
                // 加载SQL 语句 , 获取收据的字段值
                $sql_result2 = $sql_Db2 -> createCommand("SELECT `shoujv` FROM `TD_OA`.`fapiaoshoujv`");
                // 执行 SQL 语句
                $result = $sql_result2 ->queryOne();
                // 返回到控件中
                return "TKC" . "-".date("m")."_".$result['shoujv'];                        
               
      }

3. 测试的时候, 在点击 单选框 `收据` ,再点击保存时候, 发现数据库,重复执行了 UPDATE 语句, 初始化 `shoujv` 字段为 0, 保存一次,数据库就变成了2,第二次操作,数据库就变成了 4 , 就是说,重复执行了UPDATE语句,而且SELECT语句每次显示的结果为 字段值-1 , 就是 第一次显示 1,第二次显示3.


4. 数据表 `fapiaoshoujv` 如下




5. 请问为什么会出现这样的问题呢?


通达王帅龙 发表于 2020-3-10 14:21:03

您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表

PaulSpeaking_5 发表于 2020-3-10 16:59:52

本帖最后由 PaulSpeaking 于 2020-3-10 18:22 编辑

通达王帅龙 发表于 2020-3-10 14:21
您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表
您好,我按照您的方法试了,还是会重复加一, 是不是我的触发条件出问题呢?
我做的是 单选框, 基础代码,001代表收据,002代表发票
每次我点击收据时候,就重复执行2次代码.

谢谢.

补充一下,是不是我的 数据过滤 条件中出了问题呢?

PaulSpeaking_5 发表于 2020-3-10 18:21:18

通达王帅龙 发表于 2020-3-10 14:21
您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表

我现在的处理方式是,return 前 ,把记录数据/2 , 然后字段值从1开始.

实在找不到原因了.还望赐教.

通达王帅龙 发表于 2020-3-11 18:17:02

PaulSpeaking 发表于 2020-3-10 18:21
我现在的处理方式是,return 前 ,把记录数据/2 , 然后字段值从1开始.

实在找不到原因了.还望赐教. ...

您好,加我QQ:1537720035

通达林河水 发表于 2020-3-12 17:49:05

通达王帅龙 发表于 2020-3-11 18:17
您好,加我QQ:1537720035

回填触发器定义一定要注意,成对出现,请参考阅读应用中心在线教程关于 回填触发器 方面的内容。
页: [1]
查看完整版本: 应用中心,提交UPDATE语句,为什么重复执行呢?