Foxtable(狐表)用户栏目专家坐堂 → 事务处理不一致的问题


  共有3227人关注过本帖树形打印复制链接

主题:事务处理不一致的问题

帅哥哟,离线,有人找我吗?
zpx_2012
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/11/18 20:26:00 [只看该作者]

_Identify是在保存后才生成,那下面这个代码将_Identify赋值给行号,会是保存前的还是保存后的_Identify呢?
Insert Into Log (修改时间,操作者,部门,修改方式,表名,单据编号,识别号,辅助识别号,行号) Values('" & Date.Now() & "','" & MyName & "','" & MyGroup & "','" & xgfs & "','" & tb & "','" & e.DataRow(Idc) & "','" & e.DataRow(Idc1) & "','" & e.DataRow(Idc2) & "'," & e.DataRow("_Identify") & ")

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/18 20:36:00 [只看该作者]

 肯定是之前的_Identify

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/11/18 20:40:00 [只看该作者]

那要记录真正保存过后的_Identify要在哪个事件,怎么写代码才能记录?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/18 20:48:00 [只看该作者]

以下是引用zpx_2012在2014-11-18 20:40:00的发言:
那要记录真正保存过后的_Identify要在哪个事件,怎么写代码才能记录?

 

必须save之后,才能得到真正的_Identify,但是没有这个事件的。建议一添加行就把行保存一下最好。

[此贴子已经被作者于2014-11-18 20:47:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/11/18 20:51:00 [只看该作者]

那样不现实啊,因为很多时候增加行是有些字段要设置必填的,没有必填就不能保存的。

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12117 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/11/18 20:52:00 [只看该作者]

我的事务的看法

 

1、一旦选择了事务,也就放弃了系统默认的保存方式。所以不管事务是否执行 都应该有 e.cancel = True ,否则就形成了二次保存。(我没有在贴出的代码中看见,所以说   不在一个事务中)

 

2、BeforeSaveDataRow 并不是一个好的选择,会将一次保存分成好几个事务(除非你是编辑一行保存一行的)。

 

3、保存后,同步是靠重新加载的  datatable.load(false)    俺也没看见

 

所以说,不妥

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/11/18 21:41:00 [只看该作者]

我现在的做法是在保存一张表单比如采购入库单前,将跨表更新其他表数据的sql语句加入到事务中统一执行(例如:更新采购单中的累计入库数量,更新库存表中的库存数量等,所以只能一行一行的保存)事务的作用就是这些相关的更新全部成功执行时才保存采购单,有个最大的疑问是如果这些事务都成功执行了,会不会出现本采购单保存不成功的情况,这样就会不一致了。
但我不知道怎么样才能将本采购单的保存动作也加入到前面说到的这个事务中一起执行(难道也用一个Update语句来更新本采购单中变动的行?),所以只好选择系统默认的保存了。不知这个要怎么克服才好?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/18 21:45:00 [只看该作者]

 如果要放在一起,就必须也编写SQL语句去执行,放弃默认的保存


 回到顶部
帅哥哟,离线,有人找我吗?
zpx_2012
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:976 积分:8521 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2014/11/18 21:56:00 [只看该作者]

想再问下,两个问题
1、保存前到底是什么含义,即本单要Update到数据库之前,如果系统的beforesavedatarow的代码都成功执行了,就开始执行保存的动作,但保存是否成功怎么知道啊,平时都是按系统那个默认的保存按钮,如果没有成功会有什么反应,怎么才知道?(是不是行号那个颜色没有就表示返回了成功保存的信号)
2、如果要自己编写SQL语句,用UPdate语句保存那且不是还必须遍历每一行的每一列出来才行,这样太繁琐了吧!


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/18 22:00:00 [只看该作者]

1、保存是否成功不知道,一般,保存不成功都会报错;

 

2、肯定的。


 回到顶部
总数 21 上一页 1 2 3 下一页