以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助] 如何在远程数据库上直接递增一个整数的值 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=109760) |
-- 作者:hgzvip -- 发布时间:2017/11/18 19:42:00 -- [求助] 如何在远程数据库上直接递增一个整数的值 如何在远程数据库上直接递增一个整数的值。 代码如下: Dim pcid As Integer \'定义一个整数型变量:批次号 Dim c md As New SQLCommand cmd.C \'设置数据源名称 cmd.C ommandText = "Select 最大号 f rom {排号表} where 类型 = \'批次\' " pcid = cmd.E xecuteScalar() \'返回当前批次的值 pcid = pcid + 1 \'把该值递增1 cmd.C ommandText = "UP DATE {排号表} SET 最大号 = " & pcid & " WHERE 类型 = \'批次\'" \'直接在后台更新递增后的批次号 cmd.E xecuteNonQuery() 设计的意图如下: 为避免多用户同时进行相同操作导致批次号相同,保存时先在“排号表”中取一个号,再把这个号递增,然后就用递增的这个号,别的用户就不能再用这个号了。 但测试的时候,如果同时处理多行数据,以上代码是先取号回来,在用户电脑上递增后,再下一个修改远程数据表的命令,这里存在一个网络延时,实际测试时会出现大家用了相同的号。 请教老师,如何一步在后台递增这个值,然后返回这个值? 或者有没有什么变通的方法,让不同用户每次都领一个新的号?
[此贴子已经被作者于2017/11/18 20:01:21编辑过]
|
-- 作者:hgzvip -- 发布时间:2017/11/18 20:59:00 -- 刚才参考了“网络环境下的复杂编号” http://www.foxtable.com/help/index.htm?page=1994.htm 是不是我这种要求只能通过OpenQQ的方式来实现了
|
-- 作者:hgzvip -- 发布时间:2017/11/19 1:09:00 -- 经过几小时的学习、测试,成功修改。 过程大致如下: 1)新建一个服务器端项目,设置数据源和原项目数据源相同。 2)依据帮助文件,在全局代码中定义一个字典。 3)在服务器端项目属性中设置,启动读取【单据类型】表,把单据类型和已使用的最大号读入字典中。 4)依据帮助文件,在服务器端项目建立【用户】表(表是外部数据,以便在客户端中维护用户数据)。 5)依据帮助文件,定义代码并启动服务器端的OpenQQ。 6)定义代码,在客户端启动QQClient 7)在服务器端的“网络监视器”中,设置“ReceivedMessage”事件的代码:如果收到客户端传过来的具有特定格式的字符串,拆解提取这个字符串(单据类型),并在字典中查找相应的单据类型,把当前最大号加一,并更新数据库中的值,同时反馈给客户端。 这样修改后,每次需要写入单据编码的时候,就先向OpenQQ服务器发送一个取号请求,类似到银行排队取号一样,完美解决编号问题。 |
-- 作者:有点甜 -- 发布时间:2017/11/19 16:09:00 -- 嗯嗯。sqlserver并发你无法控制,当然你可以编写【存储过程】,这样就能锁表,查询到唯一编号;
你也可以做一个服务器端如openqq,排队取号。
当然,你搭建一个http也可以。 |