LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

sql表中获取最大流水号的问题

admin
2011年3月3日 16:54 本文热度 3892
 

我以前都是用以下的方法获得最大流水号,,以前一直以为不会有重复号,,,


n=SQLEXEC(con,"select MAX(idh) from ghk","mycur")
IF n < 1
  MESSAGEBOX( "失败 !")
RETU
ENDIF
zd_idh=mycur.exp+1
n=SQLEXEC(con,"insert into ghk(idh) values (?zd_idh)")
IF n < 1
  MESSAGEBOX( "失败 !")
RETU
ENDIF


但我今天看到了论坛上另外一个人发的有关这方面的帖子,,,所以我也对我的这段代码有疑虑了,,因为有可能同时二个人获得同样的最大号,,这该怎么办??


该文章在 2011/3/3 16:54:39 编辑过

全部评论5

admin
2011年3月3日 16:54
能否建多一个表,用来存放最大的单号,当需要新单号的时候先到该表取得下一单号的数字,再作加1处理,这样即使上一个用户的单未完成,下一个用户访问该的时候取得的是另外一个单号了。

该评论在 2011/3/3 16:54:49 编辑过
admin
2011年3月3日 16:55
不是这样的问题,,我是读取后马下先把最大号写入表中的,并不是一个单全部处理完再写入,,主要是在读取计算最大号而没有写入表的瞬间有可能刚好同时有几个人在操作(虽然这种机率是很少很少),,就可能产生重复号了

该评论在 2011/3/3 16:55:02 编辑过
admin
2011年3月3日 16:55
启动事务,锁定SQL表在你写入时,其它用户不可读写该表。

该评论在 2011/3/3 16:55:29 编辑过
admin
2011年3月3日 16:55
=SQLSETPROP(nhandle,"Transactions" ,2)&&启动事务 csql="select MAX(spid) as maxid from sp with (serializable)" &&取最号,并锁其它用户读入 nResult=TABLEUPDATE(.T.,.T.,'cursp')&&提交 IF nResult=.t.&&成功 =SQLCOMMIT(nhandle) =MESSAGEBOX("保存商品登记成功!",64,'提示') ELSE =SQLROLLBACK(nhandle) =MESSAGEBOX("保存商品登记失败!",16,'提示') ENDIF =SQLSETPROP(nhandle,"Transactions" ,1)&&结束事务

该评论在 2011/3/3 16:55:46 编辑过
admin
2011年3月3日 16:56
一、编号的过程应该由服务器来完成。 二、编号的字段应该是主键。 三、编号都是由事务来完成的。 四、如果简单的单一表处理。直接编写成函数,然后在表的INSERT 触发器写入该函数;如果是涉及多表复杂处理,可以编写成存储过程,然后直接调用该存储过程,并传递相应的参数,处理全部由存储过程操作。

该评论在 2011/3/3 16:56:25 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved