我现在做一个人事管理的程序,如何让按一下‘添加’按钮,ID就递增呢(首先要检查数据库的ID最大值然后+1)如:00001,00002,00003...00009,00010,00011。代码如何实现,我用的ADO连接,数据库MYSQL 2000

解决方案 »

  1.   

    取出来,然后可以strtoint并加一,然后在用format格式化为前补0(1) d 有符号十进制数
            Args必须是有符号整型数。如果在格式化字符串中还加入了["." prec],则如果Args
            的长度如果小于给出的精度数时,在前边填补0;如果大于精度数,按实际长度显示。
            Format('(%.3d)', [99]); 结果:'(099)'
      

  2.   

    Uses StrUtils;const str='00000';
    var
      NewId:String;
    begin
     with Adoquery1 do
     begin
      Close;
      Sql.Text:='Select Max(ID) As ID From t Order By ID';
      Open;
      NewId:=RightStr(str+IntToStr(StrToIntDef(Fields[0].AsString,0)+1),5);
      ...
      end;
    end;
      

  3.   

    哦,Order By ID是多余的,用Top 1时使用
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    var NewId:String;
    begin
      with Adoquery1 do begin
        Close;
        Sql.Text:='Select Max(ID) From table ';
        Open;
        NewId:=Format( '%.5d', [ StrToIntDef( Fields[0].AsString,0 ) ] );
        showmessage('新的ID值为:'+NewId);
      end;
    end;
      

  5.   

    噢,错了,该这样:procedure TForm1.Button1Click(Sender: TObject);
    var NewId:String;
    begin
      with Adoquery1 do begin
        Close;
        Sql.Text:='Select Max(ID) From table ';
        Open;
        NewId:=Format( '%.5d', [ StrToIntDef( Fields[0].AsString,0 ) + 1 ] );
        showmessage('新的ID值为:'+NewId);
      end;
    end;
      

  6.   

    前面写的很详细了,多客户端情况下最好用存储过程取ID。否则会有脏ID存在。
      

  7.   

    gzzai的朋友,你的代码只能增加一次,可是在一次按添加按钮还是原来的数字,就是不递增???
    求解!!!!!!!!!
      

  8.   

    把ID设为自增长,插入时插入ID=0,ID变为自动在最大的那个ID号加1了。
      

  9.   

    SQL 2000 有这个数据类型吗
      

  10.   

    Query.sql.text := 'Select top 1 ....
    Query.open;
    Query.append;
    //--------写入数据库的内容
    Query.post;
    ID := Format('%.5d', [Query.fieldByName('ID').asinteger]);
    Query.close;这时取出来的就是数据库自增的ID了
      

  11.   

    多用户下id程序控制增长有点不容易,因为要考虑到事务的提交回滚影响。
    不像interbase,oracle提供的序列号那样,独立于事务和会话,数据库级别提供的自增唯一数据对象,这个比自增字段要灵活太多。
      

  12.   

    我那代码没新增数据记录的语句,当然就是每次按的数值都相同呀。当里面有了新增的语句,自然就会递增了:
    procedure TForm1.Button1Click(Sender: TObject);
    var NewId:String;
    begin
      with Adoquery1 do begin
        Close;
        Sql.Text:='Select Max(ID) From table ';
        Open;
        NewId:=Format( '%.5d', [ StrToIntDef( Fields[0].AsString,0 ) + 1 ] );
    //    showmessage('新的ID值为:'+NewId);
        Close;
        Sql.Text:='Select * From table ';
        Open;
        //新增记录:
        Append;
        FieldByName('ID').AsString:=NewId;
        FieldByName('字段2').Value:=值2;
        FieldByName('字段3').Value:=值3;
        FieldByName('字段4').Value:=值4;
        ....
        Post;
      end;
    end;