SELECT top 1 FMAX FROM BTABLE ORDER BY FMAX DESC这样取得最大数后,我这编码规则两位数的从01开始到99,然后是A0到A9,然后是B0到B9一直到Z9
Z9之后从AA-AZ 然后BA-BZ一直到ZZ。。
这样如何从最大号加1实现啊??各位能否帮忙写一下如何用DELPHI实现?

解决方案 »

  1.   

    var
      str := xxx.FieldByName('FMax').AsString;//取得FMax
      str := IntToHex(StrToInt('$'+str) + 1),2);
      

  2.   

    照你的sql语句排序结果肯定跟你定的规则不同
    B0就比AA~AZ大
      

  3.   

    怎么做呀?我要实现的是最大号加1
    首先是01-99
    然后是A0-A9-B0-B9......Z0-Z9然后是AA-AZ-BA-BZ......ZA-ZZ就是这样的效果。。
      

  4.   

    const
      CON_NUM_36: array [0..35] of char= ('0'..'9','A'..'Z');//..这种连续区间,自己拆分。
    var
      str: String;
      Str_0,Str_1: String;
      I: Integer;
    begin
      str := xxx.FieldByName('FMax').AsString;//取得FMax
      ShowMessage(Str);
      Str_0 := UpperCase(Str[1]);
      Str_1 := UpperCase(Str[2]);
      //先处理低位
      case Str_1 of
        '0'..'9':
          I := Ord(Str_1) - Ord('0');
        'A'..'Z':
          I := Ord(Str_1) - Ord('A') + 10;
        else
          Exit;//出错最好Raise Exception
      end;  Inc(I);//从低位加1  Str_1 := CON_NUM_36[I mod 36];//低位取余  I := I div 36;//取进位  //高位处理
      case Str_0 of
        '0'..'9':
          I := Ord(Str_0) - Ord('0') + I;//高位加进位
        'A'..'Z':
          I := Ord(Str_0) - Ord('A') + 10 + I;//高位加进位
        else
          Exit;//出错最好Raise Exception
      end;  //得到高位
      Str_0 := CON_NUM_36[I mod 36];  //高低位拼合
      Str := Str_0+Str_1;//Str就是最终加1之后的编码之后
      ShowMessage(Str);
    end;
      

  5.   

    下面是自动增加1的函数function TForm1.AddOne(value:string):string;
    var
      tmp1 : char;
      tmp2 : char;
    begin
      tmp1 :=  value[1];
      tmp2 :=  value[2];
      if  tmp2 ='9' then
          begin
              if   tmp1  = 'Z' then
                   begin
                      tmp2:='A';
                      tmp1:='A';
                   end
              else if tmp1 ='9' then
                   begin
                      tmp1 := 'A';
                      tmp2 := '0';
                   end
              else
                   begin
                      tmp2 := '0';
                      tmp1 :=  char(ord(tmp1)+1);
                   end;
          end
      else  if   tmp2 ='Z' then
          begin
             tmp2 :='A';
             tmp1 :=  char(ord(tmp1)+1);
          end
      else
          tmp2 :=  char(ord(tmp2)+1);
      AddOne := tmp1 +tmp2;
    end;
      

  6.   

    下面是我修改后的SQL存储过程,其中@ID可以利用查询条件查询出来CREATE PROCEDURE  usp_AddOne  
                @ID    varchar(2)
     AS
    declare   @tmp1 varchar(1),@tmp2 varchar(1)
    set  @tmp1 = substring(@ID,1,1)
    set  @tmp2 = substring(@ID,2,1)
    if  @tmp2 ='9'
        begin
              if  @tmp1 ='Z'
                   begin
                          set @tmp1 ='A'
                         set  @tmp2='A'
                   end
             else if @tmp1 ='9' 
                   begin
                      set  @tmp1='A'
                       set @tmp2='0'
                   end
            else
                   begin
                        set      @tmp1 = char( ASCII( @tmp1) +1 )
                        set @tmp2 ='0'
                   end
        end
    else if   @tmp2='Z'
        begin
            set @tmp2 ='A'
            set      @tmp1 = char( ASCII( @tmp1) +1 )
        end
    else
       set      @tmp2 = char( ASCII( @tmp2) +1 )select  @tmp1 +@tmp2
      

  7.   

    flychenjun 的方法比较易懂些,这样比较好,谢谢各位:)