以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]如何解决在多用户情况下自动编号重复问题? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=139717) |
-- 作者:新福星 -- 发布时间:2019/8/20 6:47:00 -- [求助]如何解决在多用户情况下自动编号重复问题? 多用户。设定了一个子程序获取编号。格式为日期+四位顺序号。 实现方法和帮助中的《自动编号生成方法》基本一样,只是将统计数量作为序号改为了表格记存方式。某个用户取一个加一。 并且设定了占用标识。 在实际使用中发现仍然会出现重号的现象。分析原因就是出现了极端情况,两个用户就是在同一时间进入子程序来获取编号。 这样取得的编号就重复了。 有什么办法解决么?程序如下。谢谢 此主题相关图片如下:qq图片20190820065002.png [此贴子已经被作者于2019/8/20 6:55:50编辑过]
|
-- 作者:xxfoxtable -- 发布时间:2019/8/20 7:30:00 -- 常用的功能,官方能做出一个标准模块就好了 |
-- 作者:有点蓝 -- 发布时间:2019/8/20 8:43:00 -- 加入事务控制:http://www.foxtable.com/webhelp/topics/2933.htm |
-- 作者:新福星 -- 发布时间:2019/8/20 9:27:00 -- 程序中所有的SQL语句都是单一单表执行语句,而不是多表多功能的语句. 不知道事务语句加到何处呢?谢谢 |
-- 作者:有点蓝 -- 发布时间:2019/8/20 9:35:00 -- 第一句SQL之前和最后一句SQL之后,而且需要改代码,使用同一个cmd变量 Try
Connections("数据源").BeginTransaction() \'开始事务 Dim cmd As new SQLCommand cmd.ConnectionName = "数据源" cmd.CommandText = "Delete From {订单} Where [订单编号] = 32" cmd.ExecuteNonQuery cmd.CommandText = "Delete From {订单明细} Where [订单编号] = 32" cmd.ExecuteNonQuery Connections("数据源").Commit \'提交事务,所有操作生效 Catch ex As Exception \'如果出错 Connections("数据源").Rollback() \'回滚事务,撤销所有操作 End Try |
-- 作者:新福星 -- 发布时间:2019/8/20 9:40:00 -- 理解这个语句是保证订单和订单明细主从记录必须同时删除.要么就都不删除. 这个机到运用到保证取的编号唯一性的原理是什么呢? 可以理解为运用了事物机制后,是不是第二个进入者就无法修改数据了?自动排队了?谢谢 |
-- 作者:有点蓝 -- 发布时间:2019/8/20 10:01:00 -- 是的,因为有update,在事务没有结束之前,其他人就无法update同一行了 |
-- 作者:playmal -- 发布时间:2020/8/24 11:41:00 -- 没看明白,有没有例子代码 |