首先,祝大家新年快乐,在过去的2004年,我得到了大家无私的帮助,使得我一个人能为20多家单位成功的开发了各种软件,在此感谢大家。
大年初六就要出远门了为一家企业开发定做一个软件,软件搞定了,不过我现在有两三个问题无法解决:
1.软件有十台收费终端同时收费问题,要能产生收费编号不重复?
2.十台终端同时收费时,某一种商品的库存会出现并发的问题,如何解决?
希望大家能提供一点思路,给我一点类似代码,谢谢!(注:VB+SQLSERVER2000网络版)

解决方案 »

  1.   

    用SQL Server 2000应该好解决
    1、用一个自增字段或者用一个Sequencer来产生不重复的编号
    2、用数据库锁和事务。
      

  2.   

    1.自增字段或者自己生成序号或者guid
    2。数据库表加锁,事务也要用
      

  3.   

    --第一个问题(两种方法)1.将编号设置成主键,然后生成编号并且插入,如果重复,则会报错,程序中拦截错误,如果是编号重复,重复生成编号并插入的处理过程,直到完成2.取编号的时候用锁,示例
      declare @id int
      begin tran
         select @id=isnull(max(id)+1,1) from 表 with(tablockx)
         insert 表(id,其他字段)
    values(@id,.....)
      commit tran
      

  4.   

    --第二个问题  declare @商品编号 int,@出库量 int,@库存量 int
      set @商品编号=1001
      set @出库量=100
      begin tran
    select @库存量=库存数量-@出库量 from 库存表 with(tablockx)
    where 商品编号=@商品编号
    if @@rowcount=0
    begin
    raiserror('库存中无 "%d" 的商品!',1,16,@商品编号)
    rollback tran
    end
    else if @库存量<@出库量
    begin

    raiserror('商品 "%d" 的当前库存为:%d,小于需要出库的数量:%d,无法出库',1,16,@商品编号,@库存量,@出库量)
    rollback tran
    end
    else
    begin
    update 库存表 set 库存数量=@库存量-@出库量
    where 商品编号=@商品编号
    commit tran
    end