找回密码
 立即注册

QQ登录

只需一步,快速开始

jiangcj369

高级会员

62

主题

293

帖子

1001

积分

高级会员

积分
1001
jiangcj369
高级会员   /  发表于:2024-12-14 19:10  /   查看:111  /  回复:9
1金币
外联库:sqlserver

采用前端调用服务端命令的模式存储数据,

A和B都打开了相同的一条记录进行修改,这时有平台自带的写排他模式吗?
我目前测试是A和B都能保存这条记录,以最后保存的人为准,并没有排他机制啊。
难道这个排他机制也要自己去设计吗?都4202年了啊,每个表难道都要自己去设计排他吗

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

9 个回复

倒序浏览
olookok活字格认证
论坛元老   /  发表于:2024-12-14 20:55:58
沙发

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
jiangcj369
高级会员   /  发表于:2024-12-14 21:08:57
板凳

不管用,几种全试过了。没有排他。A和B同时打开一条记录,都能保存,都不会提示,以最后保存的人为准。A先保存了个1,B然后保存了个2,这时B看到的是2,A看到的是1,其实应该是2,A一刷新,记录就变成了2。所以这个事务命令实现不了编辑排他。
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:2024-12-16 16:00:01
地板
大佬,活字格是有更新策略的哦,在更新同一字段时会有弹出框提醒的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
jiangcj369
高级会员   /  发表于:2024-12-16 16:30:52
5#
Levi.Zhang 发表于 2024-12-16 16:00
大佬,活字格是有更新策略的哦,在更新同一字段时会有弹出框提醒的:

服务端命令传参,在服务端操作数据表也有这个提示?
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:7 天前
6#
大佬,您用的外联库SQLServer:所使用的表需要包含时间戳数据类型的列,例如SQLServer中的timestamp类型。
可以参考这篇帖子哦:外联数据库并发控制
回复 使用道具 举报
jiangcj369
高级会员   /  发表于:7 天前
7#
本帖最后由 jiangcj369 于 2024-12-17 10:24 编辑
Levi.Zhang 发表于 2024-12-17 09:52
大佬,您用的外联库SQLServer:所使用的表需要包含时间戳数据类型的列,例如SQLServer中的timestamp类型。
...

在设计器上设计的外联表,不是自动插入活字格的几个系统字段吗,其中就有timestamp类型啊,那个FGC_RowVersion不就是timestamp类型?,但是用服务端命令存储数据表,还是不能写排他啊。不是前端页面上直接用数据表更新的命令,而是服务端命令中用。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:7 天前
8#
本帖最后由 Levi.Zhang 于 2024-12-17 16:33 编辑

大佬,这边调查了下:
前端的并发控制的逻辑是在页面加载时,会根据当前页面绑定的数据表,如果有当前行,就取了当前行的RowVersion来实现的;会存在一个时机点,知道当前行,然后会获取RowVersion。但是服务端命令只有执行一个时机,没有时机可以让服务端命令先获取一下RowVersion,服务端命令中没有当前行的概念,都是按条件进行更新,服务端命令通常会数据表操作很多数据表,更新都是按条件进行更新,按条件的话,有可能是一条数据,也有可能是多条数据。

目前确实不太容易实现
不过这边有个思路,不知道可以满足大佬需求不
可以根据时间戳实现:
当用户读取数据时,同时读取当前数据的时间戳,用于后续的并发更新校验;
在保存时,校验时间戳是否匹配,如果匹配说明没有被其他用户修改,执行更新操作;同时将时间戳更新为当前时间;
如果不匹配,说明被其他用户修改,弹出提示框返回错误;

评分

参与人数 1满意度 +5 收起 理由
amtath + 5

查看全部评分

回复 使用道具 举报
jiangcj369
高级会员   /  发表于:7 天前
9#
Levi.Zhang 发表于 2024-12-17 16:26
大佬,这边调查了下:
前端的并发控制的逻辑是在页面加载时,会根据当前页面绑定的数据表,如果有当前行, ...

如果这样的话,前后端分离设计,每一次存数据都要进行自设计逻辑判断,设计工作量可真是挺大,另外保存前判断不太友好,有时候两个人都打开了,都在编辑,结果辛辛苦苦编辑好了,一存盘提示有别人在编辑。。比较友好的方式是在点击编辑和删除按钮时去判断,但是这种做法也有问题,要求在点编辑的时候就要网数据表里提交更改状态,但是当编辑页面真正打开后,此人未实际编辑,也不是点关闭按钮关闭了页面,而是直接关闭了浏览器,这就会导致该数据的状态一直被编辑占据,其他人无法编辑。

评分

参与人数 1金币 +66 收起 理由
Levi.Zhang + 66 赞一个!

查看全部评分

回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:6 天前
10#
感谢大佬提供的新思路,
也感谢您对活字格的持续支持!







回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部