用存储过程,如下面 PROCEDURE ,小做修改即可用。CREATE PROCEDURE get_invoice_serial   
   @my_day varchar(20)
 AS
declare @thisdate as varchar(20)
declare @serial as varchar(20)
declare @startserial as varchar(20)
declare @thisserial as varchar(20)
declare @tday as varchar(4)
declare @tmonth as varchar(4)
declare @tyear as varchar(6)
declare @dd as varchar(20)
    if  rtrim(@my_day) = ''  
      begin
        set @my_day = rtrim(getdate())
     end
    select @tyear = convert(char(4),year(@my_day)) , 
           @tday =  convert(char(2),day(@my_day)),
           @tmonth = convert(char(2),MONTH(@my_day))
    if len(rtrim(@tyear))< 4 
       begin
          set  @tyear = '20' + @tyear
       end 
    if len(rtrim(@tmonth))< 2 
       begin
          set @tmonth =rtrim('0' + @tmonth)
       end 
    if len(rtrim(@tday))< 2
       begin
          set   @tday = '0'+ @tday
       end 
    set @dd = rtrim(rtrim(@tyear)+'-'+rtrim(@tmonth)+'-'+@tday)
    select @serial = 
          max(serial_number) from unify_invoice  where date = @dd
    set @startserial =  rtrim(@tyear+@tmonth+@tday) + '10000'
    set @thisserial = 
          isnull(convert(char(18),convert(decimal(18),@serial)+1),@startserial)
    select  @thisserial

解决方案 »

  1.   

    1. 你在提交的时候采用
    try
     post;
     except
    showmessage('该记录已经存在');
     exit;
    end;2. 如果你用sql 语句控制的话。 那就是在提交前先检测一下在表里是否存在
    同样的记录如果没有则添加,如果有则提示已经有记录存在。定义一函数.
    在public下
    Function check(str:string):boolean;function form1.check(str:string):boolean;
    begin
     with adoquery1 do
     Begin
     active:=false;
     sql.add('select * from table where bh=:bh');
     Parameters[0].Value :=str;
     active:=True;
     Result:=RecordCount>0;
     end;
    end;在程序里调用该函数.if check(edit1.text) then
    begin
     showmessage('该记录已存在');
     exit;
    end;