找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

通达OA官网网站
搜索
查看: 1123|回复: 5

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

[复制链接]

17

主题

16

回帖

124

牛毛

游客

积分
157
发表于 2020-3-7 13:37:09 | 显示全部楼层 |阅读模式
本帖最后由 PaulSpeaking 于 2020-3-7 13:38 编辑

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

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

  2. date_default_timezone_set("PRC");

  3. // 收据
  4.         function setGetShouJv($PLUGIN_UTILS){
  5.                         
  6.                 $today = date('d');
  7.                
  8.                 // # 如果是本月的第一天
  9.                 if($today == 01 ){

  10.                         //操作数据库的第一步
  11.                         $sql_Db = $PLUGIN_UTILS -> getDb();
  12.                         //$onoff="on";
  13.                         // 加载 SQL语句 , 收据编码清零
  14.                         $sql_result = $sql_Db -> createCommand("UPDATE `TD_OA`.`fapiaoshoujv` SET `TD_OA`.`fapiaoshoujv`.`shoujv` = 0 WHERE `invoice_key` = 1  ");
  15.                     // $onoff="off";
  16.                         // 执行 SQL 语句
  17.                         $sql_result ->execute();
  18.                         
  19.                 }else{
  20.                 // # 正常天数
  21.                         //操作数据库的第一步
  22.                         $sql_Db = $PLUGIN_UTILS -> getDb();
  23.                         //加载 SQL语句 , 收据编码 +1
  24.                         $sql_result = $sql_Db -> createCommand("UPDATE `TD_OA`.`fapiaoshoujv` SET `TD_OA`.`fapiaoshoujv`.`shoujv` = `TD_OA`.`fapiaoshoujv`.`shoujv` + 1 WHERE `invoice_key` = 1 ");
  25.                     // 执行 SQL 语句
  26.                         $sql_result ->execute();
  27.                         
  28.                         
  29.                 }
  30.                
  31.                 // # 读取收据记录,回填到 控件 中
  32.                 $sql_Db2 = $PLUGIN_UTILS -> getDb();
  33.                 // 加载SQL 语句 , 获取收据的字段值
  34.                 $sql_result2 = $sql_Db2 -> createCommand("SELECT `shoujv` FROM `TD_OA`.`fapiaoshoujv`");
  35.                 // 执行 SQL 语句
  36.                 $result = $sql_result2 ->queryOne();
  37.                 // 返回到控件中
  38.                 return "TKC" . "-".date("m")."_".$result['shoujv'];                        
  39.                
  40.         }
复制代码


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


4. 数据表 `fapiaoshoujv` 如下




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


搜狗截图20200307133756.png

0

主题

700

回帖

1456

牛毛

游客

积分
2171
发表于 2020-3-10 14:21:03 | 显示全部楼层
您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表

17

主题

16

回帖

124

牛毛

游客

积分
157
 楼主| 发表于 2020-3-10 16:59:52 | 显示全部楼层
本帖最后由 PaulSpeaking 于 2020-3-10 18:22 编辑
通达王帅龙 发表于 2020-3-10 14:21
您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表

您好,我按照您的方法试了,还是会重复加一, 是不是我的触发条件出问题呢?
我做的是 单选框, 基础代码,001代表收据,002代表发票
每次我点击收据时候,就重复执行2次代码.

谢谢.

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

17

主题

16

回帖

124

牛毛

游客

积分
157
 楼主| 发表于 2020-3-10 18:21:18 | 显示全部楼层
通达王帅龙 发表于 2020-3-10 14:21
您好,建议把上次数值取到表单,再获取表单数据加一,更新到数据表

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

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

0

主题

700

回帖

1456

牛毛

游客

积分
2171
发表于 2020-3-11 18:17:02 | 显示全部楼层
PaulSpeaking 发表于 2020-3-10 18:21
我现在的处理方式是,return 前 ,把记录数据/2 , 然后字段值从1开始.

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

您好,加我QQ:1537720035

点评

回填触发器定义一定要注意,成对出现,请参考阅读应用中心在线教程关于 回填触发器 方面的内容。  详情 回复 发表于 2020-3-12 17:49

1

主题

1294

回帖

1962

牛毛

游客

积分
3246
QQ
发表于 2020-3-12 17:49:05 | 显示全部楼层
通达王帅龙 发表于 2020-3-11 18:17
您好,加我QQ:1537720035

回填触发器定义一定要注意,成对出现,请参考阅读应用中心在线教程关于 回填触发器 方面的内容。
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

咨询电话:400 818 0505 通达OA,国内协同管理软件行业内唯一的央企单位,中国协同OA软件的领跑者,优秀协同办公解决方案供应商

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|由NB5牛论坛提供技术支持NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-3-14 10:44 , Processed in 0.380854 second(s), 55 queries .

Powered by Discuz

Copyright © 2001-2025, 北京通达信科科技有限公司.

快速回复 返回顶部 返回列表