我要新增一个字段的一个编号,当我点新增按钮时,这个编号是自动新增,
我应如何新增成YYMMDD+***(流水号型)呢?
如今天是:04年01月13日;
          新增第一张单的编号就是:040113001;
          新增第二张单的编号就是:040113002;
          新增第三张单的编号就是:040113003;
。。
类推;谢谢! 

解决方案 »

  1.   

    http://www.csdn.net/Develop/read_article.asp?id=22672
    业务单号自动增长的处理办法 
      

  2.   

    先用decodedate函数将日期分解成年月日三个变量;组成前六位;
    然后从数据表中取编号字段的最大值;取其后三位;转换成数字类型后加一;
      

  3.   

    如果你用的是MS SQLserver2000的话.给你一点建义:
    把这个字段设为decimal类型的.然后再修改这个字段下面的设置;默认值为:1.getdate()+000
    2.identity:yes ;identity seed:1 ;identity increment:1
    这个方法试一下.
      

  4.   

    http://expert.csdn.net/Expert/topic/2649/2649338.xml?temp=.600979
    参考一下我后面提供的那种方法
      

  5.   

    function tbhscq.buildbh1223(table,zd:string):string;
    var   strsql:string;
          bh:string;
          day:string;
          str:string;
    begin
       str:=formatdatetime('yyyy_mm_dd',date());
       day:= copy(str,4,1)+copy(str,6,2)+copy(str,9,2);
       strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%''';
       try
         with ObjAdoDataSet do
          begin
            Connection:=ObjAdoConnection;
            CommandType:=cmdtext;
            CommandText:=strsql;
            Active:=True;
            if objadodataset.Fields[0].text<>''  then
             begin
               bh:=trim(objadodataset.Fields[0].text);
               if copy(bh,1,5)=day then
                begin
                 str:=inttostr(strtoint(copy(bh,6,3))+1);
                 if length(str)=1 then str:='00'+str;
                 if length(str)=2 then str:='0'+str;
                 result:=day+str;
                end
               else
                 result:=day+'001';
             end
             else
              result:=day+'001';
          end;
          except
           showmessage('数据库连接错误,请重试。');
         end;
    end;我这个函数是生成你要的编号的函数,不过我是2001-01-01变成10101001,也就是1-2-2-3的形式,你只需要改成2-2-2-3的形式就可以了,改一点代码就可以了
      

  6.   

    function AutoOrderNo(table,zd:string):string;
    var   strsql:string;
          OrderNo:string;
          day:string;
          str:string;
    begin
       str:=formatdatetime('yyyy_mm_dd',date());
       day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
       strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%''';   Query1.close;
       Query1.Sql.Clear;
       Query1.Sql.Add(strsql);
       Query1.Open;
       
       if not Query1.Eof then
        begin
         OrderNo :=trim(objadodataset.Fields[0].text);
         if copy(bh,1,6)=day then
            begin
              str:=inttostr(strtoint(copy(bh,7,3))+1);
              if length(str)=1 then str:='00'+str;
              if length(str)=2 then str:='0'+str;
              result:=day+str;
            end
          else
            result:=day+'001';
        end
      else
       result:=day+'001';
     end;
    end;
      

  7.   

    //上面错了,改正
    function AutoOrderNo(zd:string):string;
    var   strsql:string;
          OrderNo:string;
          day:string;
          str:string;
    begin
       str:=formatdatetime('yyyy_mm_dd',date());
       day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
       strsql:='select max('+zd+') as zd from '+table+' where '+zd+' LIKE '+''''+day+'%''';   Query1.close;
       Query1.Sql.Clear;
       Query1.Sql.Add(strsql);
       Query1.Open;
       
       if not Query1.Eof then
        begin
         OrderNo :=trim(objadodataset.Fields[0].text);
         if copy(OrderNo,1,6)=day then
            begin
              str:=inttostr(strtoint(copy(OrderNo,7,3))+1);
              if length(str)=1 then str:='00'+str;
              if length(str)=2 then str:='0'+str;
              result:=day+str;
            end
          else
            result:=day+'001';
        end
      else
       result:=day+'001';
     end;
    end;
      

  8.   

    //上面错了,改正
    function AutoOrderNo(table,OrderNum:string):string;
    var   strsql:string;
          OrderNo:string;
          day:string;
          str:string;
    begin
       str:=formatdatetime('yyyy_mm_dd',date());
       day:= copy(str,3,2)+copy(str,6,2)+copy(str,9,2);
       strsql:='select max('+OrderNum+') as OrderNum from '+table+' where '+OrderNum+' LIKE '+''''+day+'%''';   Query1.close;
       Query1.Sql.Clear;
       Query1.Sql.Add(strsql);
       Query1.Open;
       
       if not Query1.Eof then
        begin
         OrderNo :=trim(objadodataset.Fields[0].text);
         if copy(OrderNum,1,6)=day then
            begin
              str:=inttostr(strtoint(copy(OrderNum,7,3))+1);
              if length(str)=1 then str:='00'+str;
              if length(str)=2 then str:='0'+str;
              result:=day+str;
            end
          else
            result:=day+'001';
        end
      else
       result:=day+'001';
     end;
    end;
      

  9.   

    to cosmart(忧郁蓝) 你也太辛苦了吧,我只所以不把改好的代码贴出来就是想让楼主自己体会一下,哪知道你这么积极啊^_^
      

  10.   

    档案号的格式: 四位年+两位月+两位日+四位档案号
                    即:200202260001
           档案编号表:记录当前最新的档案编号,只有一个记录.为了防止记录 出现重复的情况.
            CREATE PROCEDURE prGetNo --产生按年月日排列的档案号
        @No varchar(12) output ---为产生的档案号
    AS 
    declare @Year Int,
            @Month int,
            @Day int,
            @Temp_No varchar(12),
            @NeedNo varchar(4) --档案号
    BEGIN
      select @year=Year(GetDate())
      select @Month=Month(GetDate())
      select @Day=Day(GetDate())
      select @No=Str(@Year,4,0)+
                    (select
                     case
                      when @Month>=10 then Str(@Month,2,0)
                      when @Month<10 Then '0'+Str(@Month,1,0)
                    end)+
                    (select
                     case
                      when @Day>=10 then Str(@Day,2,0)
                      when @Day<10 Then '0'+Str(@Day,1,0)
                     end)
      SELECT @Temp_No = 档案编号 FROM 档案编号表
         IF @No <> SUBSTRING( @Temp_No,1,8)
         SELECT @No = @No+'0001'
      ELSE
       BEGIN
         SELECT @RandNo = STR(CONVERT(int,(SUBSTRING( @Temp_No ,9,4))+1),4,0)
         SELECT @RandNo = REPLACE( @RandNo,' ','0')
         SELECT @No = @No + @RandNo
       END
      UPDATE 档案编号表
             SET 档案编号 = @No
    END
    END
      

  11.   

    写个procedure撷取序号喽create procedure test
    as
      begin
        declare @datestr  varchar(100)
        declare @maxSeq   int
      end  select @datestr=convert(char(8), getdate(),112)  select @maxSeq=count(*)+1 from dtproperties
     
      set @datestr=@datestr + cast(@maxSeq as char(99))  print @datestr  return @datestr
    go其中 @datestr 返回值就是所需序号,再拿此序号新增喽。2003赛季CSDN联赛进入最后阶段,年底大抢分~~~~~~~~~~~~~~~~~~~~~
      

  12.   

    查找当天的流水号记录,再加1,就得到当前的流水号
    GetSystemDateTime:获得当前系统的时间(自己编写的)
    ------------------------------------------------------
    select * from StoreIn_Info where DHandDate between to_date(to_char(sysdate,''yyyy-mm-dd''),''yyyy-mm-dd'') and to_date(to_char(sysdate+1,''yyyy-mm-dd''),''yyyy-mm-dd'')'
    tempVID := IntToStr(DBBTemp.SQLClientDataSet.RecordCount+1);
    Result := 'R' + FormatDateTime('yyyymmdd',GetSystemDateTime) + Copy(Concat('00000',tempVID), Length(tempVID)+1, 5);
    ------------------------------------------------------
    结果:R2004011300001
      

  13.   

    //生成信息编号函数
    function TFrm_Intro_Regi.GetNewId(tablename,pkname:string):string;
    var
      strnewid:string;
      strsql:string;
      strpkdate:string;
      strdate:string;
      transstr:string;
      IntNum:Integer;
      PreZero:String;
      Y1,M1,D1:Word;
      I:Integer;
    begin
      Decodedate(date(),Y1,M1,D1);                             //获取当前年份
      strdate:=inttostr(y1);
      with ADOQuery2 do
        begin
          close;
          sql.clear;
          strsql:='select max('+pkname+') from '+tablename+' WITH (TABLOCK) where '+pkname+' like '+'''JS%'''; //取最大编号
          sql.add(strsql);
          open;
        end;
      TransStr:=adoquery2.fields[0].asstring;
      strpkdate:=copy(TransStr,4,4);                           //取出编号中的年份
    //  I:=comparestr(strpkdate,strdate);
      if  (TransStr='') or (strpkdate<>strdate) then          //与当前年份比较,若不同取当前年份
         StrNewID :='JS-'+strdate+'-'+'0001'
      else
        begin
           TransStr:=Trim(TransStr);
           TransStr:=copy(TransStr,9,4);
           TransStr:=IntToStr(StrToInt(TransStr)+1);
           IntNum:=Length(TransStr);
           PreZero:='';                                        //流水号补零
           for I:=1 to 4-IntNum do
              PreZero:=PreZero+'0';
           StrNewID:='JS-'+strdate+'-'+PreZero+TransStr;
        end;
      adoQuery2.Close;
      Result:=StrNewID;
    end;