我用一个表存放当前的单据编号,每次增加新的单据就从该表读取该记录赋予出库单的单据号,然后把该值加1。 在一个人使用时这样做是没有问题的,但多用户环境下好多人会同时取该编号啊,那样岂不重复了????
怎样做得一个人读取该记录时不让别人读取啊????。

解决方案 »

  1.   

    数据库为SQLServer。
    (Access也需要大侠顺便指教。)
      

  2.   

    我试试了,先使用事务,然后update 该值,取得新值(因为事务未提交之前别人读不了这个表的),然后赋予出库单,最后提交。最关键的地方:在事务未结束之前,别人无法读取这个表。
      

  3.   

    即然使用SQLSERVER数据库,最好的解决方法是使用存贮过程。用存贮过程来读取最大值,并将最大值加1。不管有多少个用户,均通过调用此存贮过程来处理,这样就可以避免冲突
      

  4.   

    to 楼主多人同时取的时候是临时编号,取的时候给tmpID +1 ,而保存的时候则是保存真实编号,明白吗?
      

  5.   

    设置事务的隔离级别。。下面的过程是我们用的CREATE  PROC SP_GetKeyValue
      (@aTblName  char(50),@aKeyvalue numeric OutPut)
    as
    begin
      SET TRANSACTION ISOLATION LEVEL SERIALIZABLE   begin tran KeyValue    
        UPDATE T_SYS_TBLLIST with (Xlock)
        SET KEYVALUE=KEYVALUE+1
        WHERE upper(TBLNAME)=upper(@ATBLNAME)    SELECT @AKEYVALUE=KEYVALUE
        FROM T_SYS_TBLLIST
        WHERE upper(TBLNAME)=upper(@ATBLNAME)
      Commit tran KeyValue
      SET TRANSACTION ISOLATION LEVEL  READ COMMITTED 
      RETURN
    end
      

  6.   

    增加一个机器号。机器进入你的程序时,检查是否已有机器在登录中。如机器@1,机器@2,单据格式:yyyymmdd_机器号_单据号:如040615_01001;
      

  7.   

    方法一:在表中建一个触发器(Insert),插入编号
    方法二:提交时插入编号(POST前,调用函数取值,设置编号)
    总之编号与提交的间隔越短越好,如果有重复,数据库表对主键或唯一约束自动检查。
      

  8.   

    YAMABACK(CODE,CODE,CODE……) 
    能给字符型字段自动编号吗?逗!
      

  9.   

    如果不想让别人同时读数据库的话,用sp_dboption 'single user','true'