以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  数据更新日志  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=113589)

--  作者:newsun2k
--  发布时间:2018/1/19 8:45:00
--  数据更新日志
我想做一个数据更新的日志,记录数据更新前后的情况,及更新人。
原来是用触发器做的。有个缺陷是,不知道数据是哪个用户更新的。
如果在系统里面,每次更新就保存数据更新记录,比较麻烦,涉及表的更新类型太多了:
用户直接更新当前表、更新其他表时更新当前表(有的是通过datatables().save,有的是通过dr.save保存的,或者sqlreplacefor保存)
修改起来涉及面比较广
不知道老师有没有好的方法教我,谢谢。

--  作者:有点甜
--  发布时间:2018/1/19 9:12:00
--  

1、参考

 

下载信息  [文件大小:312.0 KB  下载次数:22]
图片点击可在新窗口打开查看点击浏览该文件:操作日志2017.table

 

2、如果用触发器,可以查询客户端信息

 

http://blog.csdn.net/xiaojia_boke/article/details/40310629

 


--  作者:newsun2k
--  发布时间:2018/1/19 10:36:00
--  
1、提供的例子中,确实通过replacefor也可以更新数据。
但是有一个比较重要的缺陷,如果改动比较多,尤其是新增一行数据的时候。
会在日志中创建很多行数据,(一个字段对应一行数据),甚至不最后保存,只是中间改动了一下,也会创建一行数据。
这肯定不行啊。
那日志表不得非常巨大?

2、访问sql server都是一个用户,sa.

--  作者:有点甜
--  发布时间:2018/1/19 10:42:00
--  

1、你可以对新增的行不进行处理;

 

     你可以不在datacolchanged事件处理,你可以在beforesavedatarow事件处理,循环每一行对比,把不同的记录。

 

2、你可以弄多个用户;

 

    你也可以在触发器记录修改的内容,在foxtable里面记录修改的人员以及时间,两者结合大致确定谁修改了数据。


--  作者:newsun2k
--  发布时间:2018/1/19 10:55:00
--  
1、使用beforeavedatarow,那replacefor更新的时候,不起作用了。图片点击可在新窗口打开查看
--  作者:有点甜
--  发布时间:2018/1/19 10:59:00
--  
以下是引用newsun2k在2018/1/19 10:55:00的发言:
1、使用beforeavedatarow,那replacefor更新的时候,不起作用了。图片点击可在新窗口打开查看

 

起作用的。只要是前台那里修改的内容,最后保存都会触发beforeSaveDataRow事件