注册 登录
编程论坛 VFP论坛

请问记录缓冲或表缓冲,能处理同时新插入数据的冲突吗

kofan 发布于 2025-08-18 17:52, 247 次点击
如题,
6 回复
#2
easyppt7 天前 08:24
这个话题涉及的面有点广,相关技术点有:
1、主键设置
2、事务处理
3、更新冲突
    大部分都是由系统自动处理,以最后编辑的为准
    选项1:比如A和B同时编辑,A提交后,B也提交,则以B为准。认为这是正常的。不会处理冲突,
    选项2:如果A在编辑状态,任何人不可以编辑,那就要用时间戳,自己控制,比较繁琐,我的应用还没这么高级,所以选项2从来不用。
    大部分人都是选择选项1+事务,不会选择2这种

表缓冲新增行如果你担心重复录入的冲突,那没必要,这是管理上的问题,比如,一个订单总不至于A员工新增操作后,然后B员工也新增操作吧。
职责分工+权限,都知道...



[此贴子已经被作者于2025-8-19 08:30编辑过]

#3
hsfisher7 天前 08:27
种个草
#4
yiyanxiyin7 天前 10:05
新增数据分两步, 第一步新增的数据放缓冲区, 第二部提交数据
缓冲有两种模式:保守模式和开放模式, 保守模式在新增数据的时候不会锁定数据, 提交时会锁定(单条提交锁定时间很短, 批量提交根据数量锁定时间会延长), 如果多人同时提交那么会冲突, 第一个人锁定了数据, 后面的人会因为数据被锁提交失败(新增时是主键或唯一索引被锁),开放模式不会加锁, 但可能会引起唯一索引冲突而失败

所以能不能解决冲突,要怎么解决冲突, 看你的具体业务逻辑

[此贴子已经被作者于2025-8-19 11:19编辑过]

#5
kofan7 天前 11:09
以下是引用yiyanxiyin在2025-8-19 10:05:21的发言:

新增数据分两步, 第一步新增的数据放缓冲区, 第二部提交数据
缓冲有两种模式:保守模式和开放模式, 保守模式在提交数据的时候不会锁定数据, 提交时会锁定(单条提交锁定时间很短, 批量提交根据数量锁定时间会延长), 如果多人同时提交那么会冲突, 第一个人锁定了数据, 后面的人会因为数据被锁提交失败(新增时是主键或唯一索引被锁),开放模式不会加锁, 但可能会引起唯一索引冲突而失败

所以能不能解决冲突,要怎么解决冲突, 看你的具体业务逻辑


你好。谢谢你的解答。红色部分是不是写错了。
我想继续问一下。
调用cursorsetpro函数开启缓冲,是只需在表单init事件里执行一次?
还是我每次要修改数据时开启(比如编辑按钮的click事件中,开启缓冲)。然后在保存按钮的click事件中关闭缓冲?
#6
kofan7 天前 11:11
以下是引用easyppt在2025-8-19 08:24:28的发言:

这个话题涉及的面有点广,相关技术点有:
1、主键设置
2、事务处理
3、更新冲突
    大部分都是由系统自动处理,以最后编辑的为准
    选项1:比如A和B同时编辑,A提交后,B也提交,则以B为准。认为这是正常的。不会处理冲突,
    选项2:如果A在编辑状态,任何人不可以编辑,那就要用时间戳,自己控制,比较繁琐,我的应用还没这么高级,所以选项2从来不用。
    大部分人都是选择选项1+事务,不会选择2这种

表缓冲新增行如果你担心重复录入的冲突,那没必要,这是管理上的问题,比如,一个订单总不至于A员工新增操作后,然后B员工也新增操作吧。
职责分工+权限,都知道...



谢谢。在更新冲突上,我肯定不会选择选项2。 我看示例中,有让用户选择是否覆盖别人的修改。
表缓冲新增冲突,主要是主键ID,容易造成索引不唯一。
可能我想太复杂了。还是谁最后提交,以谁为准。这个简单。

[此贴子已经被作者于2025-8-19 11:23编辑过]

#7
yiyanxiyin7 天前 11:25
"保守模式在提交数据的时候不会锁定数据, 提交时会锁定" 是写错了, 不好意思, 原帖已改,   关于是否在init事件里面开启缓冲一次, 还是click事件里面开启关闭, 这个你得自己取舍, 开启一次的方式肯定是长时间占用缓冲区,会占内存, 但换来的是速度的提升, 反复开启关闭的方式是用牺牲速度换空间

你的程序要变得足够优秀可以这样考虑:  自动判断内存可用空间大于某个阈值, 软件以速度优先(分配足够的内存,开启各种缓存,并长时间占用,确定不用了才释放), 否则以节约内存优先(用的时候分配内存,用完即释放, 不使用缓存).  为了避免被人误认为你的程序是个吞内存的怪兽, 你可以让用户选择以提升速度优先还是以优化内存优先

[此贴子已经被作者于2025-8-19 11:37编辑过]

1