如何自动生成自CA+年份+0001向上的自动编号呢
当年份增加一年时,编号从0001再开始

解决方案 »

  1.   

    var
      sPrev: string;
      sYear: string;
      sSeri: string;
      sNo: string;
      I: Integer;
    begin
      sPrev := 'CA';
      sYear := FormatDateTime('YYYY', Now);
      for I := 1 to 9999 do
      begin
        sSeri := '0000' + IntToStr(I);
        sSeri := Copy(sSeri, Length(sSeri) - 3, 4);
        sNo := sPrev + sYear + sSeri;
      end;
    end;
      

  2.   

    STR:=CA+年份+**** //当前编号
    IF STRTOINT(COPY(DATETOSTR(DATE),1,4))=STRTOINT(COPY(STR,3,4))+1
    THEN
    STR:=CA+COPY(DATETOSTR(DATE),1,4)+0001 //重新编号
      

  3.   

    HowardLynn(Howard)
    我是增加一个记录,增加一个编号,你写的代码我知道,一下子都实行玩
      

  4.   

    大家帮忙看一下我写的代码
    可是只实行一次,其他结果都一样
    var
      card,cardNo:string;
      num,num1:integer;
      year,mon,date:word;
      clientdataset:Tclientdataset;
    begin
     decodedate(now,year,mon,date);
     clientdataset:=Tclientdataset.Create(nil);
     clientdataset.RemoteServer:=SocketConnection1;
     clientdataset.ProviderName:='DataSetProvider1';
     clientdataset.Active:=true;
      if clientdataset.RecordCount>0 then
      begin
        card:=clientdataset.fieldbyname('p').AsString;
        num:=strtoint(Copy(card,3,4));
        if num<year then
        begin
          cardNo:='CA'+inttostr(year)+'0001';
        end
        else
        begin
          num1:=strtoint(copy(card,7,4));
          inc(num1);
          if num1<10 then
            cardNo:='CA'+ inttostr(num) +'000' +inttostr(num1)
          else
          if Num1<100 then
            cardNo:='CA'+ inttostr(num) +'00' +inttostr(num1)
          else
          if num1<1000 then
            cardNo:='CA'+ inttostr(num) +'0' +inttostr(num1)
          else
            cardNo:='CA'+ inttostr(num) +inttostr(num1);
        end;
      end
      else
        cardno:='CA' + inttostr(year) + '0001';
      cxtextedit1.Text:=cardno;
      clientdataset.Free;
    end;