在多用户同时对一个表进行添加记录操作时。表中有一个"bh"。我想让“bh”不重复。我是这样做的:
在“保存按钮”事件中,先取已有“bh”最大值,然后加1作为新的"bh"。
可是上次两个人同时操作的时候就出现了两个编号相同的情况。我想这是他们同时按了“保存”的缘故。该如何防止“bh”相同呢?

解决方案 »

  1.   

    用觸發器,如果新增加的"bh"已有重復的就用觸發器自動產生新的"bh"的最大值代替
      

  2.   

    http://blog.csdn.net/jinjazz/archive/2004/09/30/121456.aspx
      

  3.   

    在 DB 上面做一个 sequence ,然后在你的这个 table 里面创建 trigger 引用 sequence 来给 bh 自动编号。
      

  4.   

    with TempQuery do
        begin
          close;
          sql.Clear;
          sql.Add('select * from Table);
          sql.Add('where bh=:bh);
          parambyname('bh').AsString:=Trim(Edit1.text);
          open;
          if Not(IsEmpty)
            then
              begin
                showmessage('编号重复');
                Exit;
              end;
        end;
      

  5.   

    ADOCnn.BeginTrans;        ADODataSetMaxbh.Close;
            ADODataSetMaxbh.CommandText:='select Max(bh) as maxbh from 表 with (tablock)';
            ADODataSetMaxbh.Open;
            if ADODataSetMaxbh.FieldByName('maxbh').IsNull then
              ADODataSet.FieldByName('bh').AsString:='1001'
            else
              ADODataSet.FieldByName('bh').AsFloat:=ADODataSetMaxbh.FieldByName('Maxbh').AsFloat+1;ADOCnn.CommitTrans;
            
      

  6.   

    if Fields[0].AsString='' then
    xh:='000'
    else
    xh:= IntToStr(StrToInt(fields[0].AsString)+1);
      

  7.   

    oracle用sequence,sql server有自动编号字段。
    如果要用表中最大的值+1,则需要进行锁定以防多人同时使用时重复。
      

  8.   

    如果BH字段不是有规律的组成的话用自动编号字段是最安全的了,如果BH是有规律的,比如根据BH的值可以得到部分信息,那么就使用触发器,这样比较安全。
      

  9.   

    要不你的编号让sql server自己去加,就象access的自动编号