以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 怎么实现项目中的所有表 都可以按照上述规则写入操作日志表 便于数据记录查找呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174888) |
-- 作者:cnsjroom -- 发布时间:2022/2/10 16:39:00 -- 怎么实现项目中的所有表 都可以按照上述规则写入操作日志表 便于数据记录查找呢? 为保证数据具有可溯源性,实现数据在新增、删除、编辑后,都对应写入操作日志表
操作日志表有:操作时间、操作内容、操作人
操作内容:记录当前表当前行所有列字段名及对应的值 最好是以josn格式记录
后续如果需要进行数据恢复,再将这个josn数据格式转换成当前表当前行对应列字段和列值
怎么实现项目中的所有表 都可以按照上述规则写入操作日志表 便于数据记录查找呢?
参照论坛例子:【想把这个代码直接写成内部函数,用按钮事件进行使用,提示为申明”e“ 下述代码怎么进行修改呢?实现全部自动获取当前表的所列信息】 Dim dr As DataRow = DataTables("数据操作日志").AddNew [此贴子已经被作者于2022/2/10 17:00:57编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/2/10 17:02:00 -- 参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=110215 自己改改代码,和数据合并为符合自己要求的json数据存到日志表即可
|
-- 作者:cnsjroom -- 发布时间:2022/2/10 18:38:00 -- 回复:(有点蓝)参考:http://www.foxtable.com/bbs/... 谢谢老师 !参照论坛例子 代码如下, 在项目中,直接修改对应表里面的数据,可以正常写入新增、修改、删除后操作数据日志 在窗体表中将代码写入对应的窗体表事件后,操作数据 可以正常写入新增、修改、删除后操作数据日志
下述三个表事件代码, 1、有没有办法直接封装在函数里呢?怎么解决提示未定义”e“的问题呢? 2、有没有办法直接对项目所有的表都能够起作用,包含项目表、窗体表、副本表……
项目事件afteropenproject代码如下: For Each dt As DataTable In DataTables dt.GlobalHandler.DataRowDeleting = True
全局表datacolchanged代码如下: If e.DataTable.Name <> "数据操作日志" Then
全局表datarowadded代码如下: If e.DataTable.Name <> "数据操作日志" Then
全局表datarowdeleting代码如下: If e.DataTable.Name <> "数据操作日志" ThenDim dr As DataRow = DataTables("数据操作日志").AddNew dr("uuid") = e.DataRow("uuid") dr("用户") = User.Name dr("涉及表") = e.DataTable.Name dr("涉及列") = Nothing dr("涉及行") = e.DataRow("_Identify") dr("时间") = Date.Now dr("操作内容") = "删除了一行" Dim str As String = "" For Each c As DataCol In e.DataTable.DataCols str += "[" & c.Name & "]=" & e.DataRow(c.Name) & "|" Next dr("原始数据") = str End If
[此贴子已经被作者于2022/2/10 18:43:30编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/2/10 20:32:00 -- 1、全局表事件本来就已经是共用的。代码也不多,没有必要再放函数。如果要放,把e作为参数传入即可 2、没有办法。 启用全局表事件的代码需要看情况使用:已加载的表放到afteropenproject;窗口sqltable放到窗口afterload;动态加载的表放到加载之后
|
-- 作者:cnsjroom -- 发布时间:2022/2/11 9:53:00 -- 回复:(有点蓝)1、全局表事件本来就已经是共用的。代... 因项目表类型比较多 为了便于引用方便,还是想采用内部函数的方式,经过老师的指点学习,现在代码如下:
如果采用当前表的方式写入内部函数
修改后数据写入日志【运行后红色部分出错,麻烦老师帮忙修正一下 谢谢!】 Dim e As String = CurrentTable.name
新增数据后写入日志【运行正常】 Dim e As String = CurrentTable.name
删除数据后写入日志【运行正常】 Dim e As String = CurrentTable.name |
-- 作者:有点蓝 -- 发布时间:2022/2/11 10:13:00 -- Dim e = args(0) If e.DataTable.Name <> "数据操作日志" Then If e.DataRow.RowState = 2 Then Return Else Dim dr As DataRow = DataTables("数据操作日志").AddNew dr("uuid") = e.DataRow("uuid") dr("用户") = User.Name dr("涉及表") = e.DataTable.Name dr("涉及列") = e.DataCol.Name dr("涉及行") = e.DataRow("_Identify") dr("时间") = Date.Now dr("操作内容") = """" & e.OldValue & """ 改成了 """ & e.NewValue & """" Dim str As String = "" Dim str1 As String = "" For Each c As DataCol In e.DataTable.DataCols str += "[" & c.Name & "]=" & e.DataRow.OriginalValue(c.Name) & "|" str1 += "[" & c.Name & "]=" & e.DataRow(c.Name) & "|" Next dr("原始数据") = str dr("改后数据") = str1 End If End If 全局表datacolchanged代码 Functions.Execute("xx函数",e)
|