苏州三木软件科技有限公司

 找回密码
 立即注册
搜索
热搜: 活动
查看: 1520|回复: 4

关于记录修改跟踪

[复制链接]

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2023-3-20 21:49:46 | 显示全部楼层 |阅读模式
一个表,假如修改了其中的不同行和不同列的若干个单元格的数据,我怎么跟踪这些单元格的数据修改记录。 假如一个单元格,反复修改,又改回到原来的值了,这个单元格算是修改过的吗,有跟踪记录吗?
回复

使用道具 举报

25

主题

313

帖子

2077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2077
QQ
发表于 2023-3-20 22:29:06 | 显示全部楼层
可以考虑在表事件BeforeSave中写代码
  1. Dim tbl As SmGrid=Proj.CurrentSmGrid
  2. '获得当前表中有过修改过的所有行记录
  3. Dim dtChanges As DataTableHelp=tbl.DataTableHelp.DataTable.GetChanges(DataRowState.Modified).GetDataTableHelp()
  4. If dtChanges IsNot Nothing AndAlso dtChanges.DataRows.Count>0 Then
  5.         Dim sb As New StringBuilder
  6.         For Each dr As RowData In dtChanges.DataRows
  7.                 '遍历所有列
  8.                 For Each dc As ColData In dtChanges.DataCols
  9.                         '如果初始值与当前值不一样
  10.                         If dr(dc.Name,DataRowVersion.Original)<>dr(dc.Name,DataRowVersion.Current) Then
  11.                                 sb.AppendLine("列【" & dc.Name & "】从原始数据【" & dr(dc.Name,DataRowVersion.Original) & "】修改为【" & dr(dc.Name,DataRowVersion.Current) & "】")
  12.                         End If
  13.                 Next
  14.         Next
  15. End If
  16. '获得新增行的数据
  17. Dim dtAdd As DataTableHelp=tbl.DataTableHelp.DataTable.GetChanges(DataRowState.Added).GetDataTableHelp()
  18. '获得删除行的数据
  19. Dim dtDelete As DataTableHelp=tbl.DataTableHelp.DataTable.GetChanges(DataRowState.Deleted).GetDataTableHelp()
复制代码


相关帮助文档介绍
http://www.sanmugrid.com/help/index.htm?page=00445IsNull.htm
http://www.sanmugrid.com/help/in ... %BC%95%E5%99%A8.htm
http://www.sanmugrid.com/help/index.htm?page=00420RowData.htm
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2023-3-21 08:31:44 | 显示全部楼层
Dim sb As New StringBuilder
这行是什么意思有点看不懂,是不是一个临时表,假如我要把这个表里的数据一次性插入后台的一个数据库表,需要怎么操作呢
回复

使用道具 举报

4

主题

13

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2023-3-21 08:32:53 | 显示全部楼层
Dim sb As New StringBuilder  
这句什么意思,是建立一个临时表吗
假如我要把这个表里的数据一次性插入后台数据库的一个表,怎么操作呢
回复

使用道具 举报

25

主题

313

帖子

2077

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2077
QQ
发表于 2023-3-21 09:42:43 | 显示全部楼层
StringBuilder是高性能拼接文本的一个类,详细帮助文档可以参考
http://www.sanmugrid.com/help/index.htm?page=00521StringBuilder.htm

如果你想要记录一些表的操作记录的话,比较通用的做法就是像我上面的示例代码一样,记录一下当前修改行中,哪个单据(拥有唯一性的单号,方便后期寻找定位)哪些字段被从什么数据修改到了什么数据。你可以这样设计表结构

表名称 修改时间 修改者 修改内容修改主键值 修改类型
入库单明细 2023-03-21 13:23 列【数量】从【12.2】修改成了【13】,列【单价】从【1.2】修改成了【1.3】 RK202303210002 修改、新增、删除

这种设计方案好在我一个表结构可以记录很多个表的修改状态。如果按你说的,想记录一个表的修改日志,就建一个一样表结构的表,这很浪费与不合理,你后期表结构有变动,去维护这种一对一的关系也是问题。

如果真的想实现将表里的数据一次性插入后台数据库的一个表,可以考虑参考帮助文档
[size=11.3333px]http://www.sanmugrid.com/help/index.htm?page=00836%E4%BF%9D%E5%AD%98%E6%95%B0%E6%8D%AE%E8%A1%A8%E7%9A%84%E4%BF%AE%E6%94%B9%E6%97%A5%E5%BF%97.htm
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|苏州三木软件科技有限公司 ( 苏ICP备2022038390号 )

苏公网安备 32058502010732号

GMT+8, 2024-10-3 00:22 , Processed in 0.069172 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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