请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

qq8009 活字格认证

银牌会员

162

主题

694

帖子

2202

积分

银牌会员

积分
2202

活字格高级认证微信认证勋章活字格认证

qq8009 活字格认证
银牌会员   /  发表于:2021-9-18 13:35  /   查看:3840  /  回复:17
1金币

---------------
1.有人可能会说,建立一个历史表,把所有字段涵盖进去,不就可以了吗?
         应为有考虑到通用性,如果单纯一个表的历史记录就不必这么麻烦,但是所有业务表都要历史记录,然后业务表的字段又很多,接着又不是所有的字段都会修改,这方案显然是不太实际的。

2.还可以获取活字格自带的数据库日志呀
         这方案看似还可以,不过问题就在于,自带的数据库日志,更新字段没具体展示更新了哪一列(具体请看https://gcdn.grapecity.com.cn/showtopic-96865-1-1.html)只是知道谁修改了某个字段,但是无法朔源到哪个订单,这不是坑嘛
---------------

看个一个做过类似功能的文章,里面是提取了表名,与字段名称进行存储,如下图所示



现在问题是 如何获取表名,与修改的字段名称,如果用服务端命令是可以只将变化的数据提交,只是不知道如何获取到数据库字段名称。
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

我在生产环境做过,给你提供几个思路吧: 非活字格环境下,基于数据库触发器可以实现这个功能。sql server、postgresql、mysql都实现过; 在活字格环境下,可以搭配数据库的存储过程,自定义表名、字段名,对相关数据流进行二次加工。比如正常的增删改查后,对相关表、字段进行二次保存到备份表。如果数据量小,可以放在前端页面上。如果数据量大,需要定时对备份表和业务表进行轮询,把增量部分保存到备份表。 其实你纠 ...

17 个回复

倒序浏览
最佳答案
最佳答案
孤狼悬赏达人认证 活字格认证
高级会员   /  发表于:2021-9-18 13:35:44
来自 5#
本帖最后由 孤狼 于 2021-9-19 08:56 编辑

我在生产环境做过,给你提供几个思路吧:

非活字格环境下,基于数据库触发器可以实现这个功能。sql server、postgresql、mysql都实现过;

在活字格环境下,可以搭配数据库的存储过程,自定义表名、字段名,对相关数据流进行二次加工。比如正常的增删改查后,对相关表、字段进行二次保存到备份表。如果数据量小,可以放在前端页面上。如果数据量大,需要定时对备份表和业务表进行轮询,把增量部分保存到备份表。

其实你纠结的点就是表名、字段名等信息需要自定义,存储过程能很好的解决这个问题,它天生就是为了自定义变量而存在的。
存储过程在sql server、postgresql都有很成熟的应用了,你可以直接百度 存储过程 即可。

原理也很简单,就是告诉数据库,我要把a表、b字段的c值保存到d表、e字段,这里的abcde都可以通过变量赋值的方式进行定义,不再局限于select 固定字段名 from 固定表名  这种形式了。

如果觉得有帮助,记得选我为最佳答案哟,感谢

回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-18 16:33:54
2#
大佬,这个之前有个格友做过这样一个功能,而且他做的不但有历史表,还可以一键恢复至之前的表的状态。不过这个实现起来挺困难的,这边有一个思路就是,写一个触发器。每次做增删改查操作时,将变动之前的表的数据和对应操作储存至备份表的一条数据中。然后备份表就相当于是一个历史表,这样不但可以查对表的操作,还可以从备份表中直接恢复之前表的状态。
回复 使用道具 举报
qq8009活字格认证
银牌会员   /  发表于:2021-9-18 16:45:44
3#
Lay.Li 发表于 2021-9-18 16:33
大佬,这个之前有个格友做过这样一个功能,而且他做的不但有历史表,还可以一键恢复至之前的表的状态。不过 ...

触发器不会写,有没有案例啥的,我可以不用还原数据的
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-18 17:44:35
4#
qq8009 发表于 2021-9-18 16:45
触发器不会写,有没有案例啥的,我可以不用还原数据的

这个网上有很多教程的,我给您找了几个,您可以参考参考。

Oracle中用触发器实现自动记录表数据被修改的历史信息

SQL Server 用触发器实现表的历史记录
回复 使用道具 举报
mfkpie8
银牌会员   /  发表于:2021-9-19 12:25:57
6#
本帖最后由 mfkpie8 于 2021-9-19 12:29 编辑
qq8009 发表于 2021-9-18 16:45
触发器不会写,有没有案例啥的,我可以不用还原数据的

建议不要这么复杂化,能追溯谁修改了就好了。能以单号做为唯一性,不是论坛里面有一个修改日志自动读入数据库的吗?

https://gcdn.grapecity.com.cn/fo ... 0&fromuid=51381

我的建议是在这个前提上优化,因为考虑的业务逻辑不是一般的多!这个每一个程序都是不同的没必要去做记录恢复,


按唯一性 单据类型+单号进行追溯就很好了!没必要做到恢复的
回复 使用道具 举报
qq8009活字格认证
银牌会员   /  发表于:2021-9-19 13:08:59
7#
mfkpie8 发表于 2021-9-19 12:25
建议不要这么复杂化,能追溯谁修改了就好了。能以单号做为唯一性,不是论坛里面有一个修改日志自动读入数 ...

感谢回答,这个方法我也有考虑过了,只是没办法实现我想要的功能,Update记录不完整(具体请看https://gcdn.grapecity.com.cn/showtopic-96865-1-1.html),我不需要数据恢复,这个方案无法朔源才被放弃的
回复 使用道具 举报
mfkpie8
银牌会员   /  发表于:2021-9-19 17:22:26
8#
qq8009 发表于 2021-9-19 13:08
感谢回答,这个方法我也有考虑过了,只是没办法实现我想要的功能,Update记录不完整(具体请看https://gc ...

我的需求跟你实际也是一样的 ,可以把内容做一个包含按单号来查询呢!你试着做起来看下下我们跟进一下!做个DEMO
回复 使用道具 举报
mfkpie8
银牌会员   /  发表于:2021-9-20 16:07:14
9#
qq8009 发表于 2021-9-19 13:08
感谢回答,这个方法我也有考虑过了,只是没办法实现我想要的功能,Update记录不完整(具体请看https://gc ...

希望你能做出来哦
回复 使用道具 举报
Lay.Li悬赏达人认证 活字格认证
超级版主   /  发表于:2021-9-22 10:02:10
10#
感谢各位大佬的支持~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部