我刚学delphi,想问一个问题。我的一个表主键为stu_no  char(3),现在里面有一条记录'001',我想增加记录,如'002','003',....这样来每次加1,怎么编程序呀。
tblStu.Append;
tblStu.fieldbyname('stu_no').asString:=???
多谢赐教!

解决方案 »

  1.   

    要看什么数据库ACCESS就有自加的字段.
    其他的就要稍微麻烦一些,有0.
      

  2.   

    function getMaxNo:string;
    var
      maxNO:string;
    begin
    with adoquery1 do
      begin
        close;
        sql.clear;
        sql.add('select max(cast(stu_no as int)) stu_no  from table1');
        open;
        if recordcount>0 then
          maxNo:=inttostr(fieldbyname('stu_no').asinteger+1)
        else
          maxNo:='001';
        if Length(maxNo)=1 then maxNo:='00'+maxNo;
        if length(maxNo)=2 then maxNo='0'+maxNo;
        result:=maxNo;        
      end;
    end;
    .........................................................
    tblStu.Append;
    tblStu.fieldbyname('stu_no').asString:=getmaxNo;
      

  3.   

    首先多谢:byc6352(雪原),继续问一下,如果我的主键为stu_no  char(7),那么对长度判断要7句吗?
      if Length(maxNo)=1 then maxNo:='000000'+maxNo;
      if Length(maxNo)=2 then maxNo:='00000'+maxNo;
      if Length(maxNo)=3 then maxNo:='0000'+maxNo;
        .....有没别的函数象PB中可以用string(),比如maxNo:=string(maxNo,'0000000')这样制定格式的。
      

  4.   

    adoquery1.close;
    adoquery1.sql.add('Select max(stu_no) max1 from table ');
    adoquery1.open;
    adoquery2.insert
    adoqyery2.fieldbyname('Stu_no').value:=copy(adoqyery2.fieldbyname('max1').value,lenght(adoqyery2.fieldbyname('Stu_no').value)-lenght(IntToStr(adoqyery2.fieldbyname('max1').AsInteger)))+IntToStr(adoqyery2.fieldbyname('max1').AsInteger);
    adoquery2.post;
      

  5.   

    to :henry2003(阿波) 你的没法通过编译。
    to: amei2000go(浪子) Format('%0000000d',[x])不行呀。
    如果现在选出的最大编号为'0100005',怎么往库里插入'0100006'? 哈哈.
      

  6.   

    id為資料庫的自動增加一的字段 001,002,003....
    代碼如下,絕對可以,我已經測試了!procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    adoquery1.close;
    adoquery1.sql.add('Select max(id)as max1  from table1 ');
    adoquery1.open;
    adoquery2.Close;
    ADOQuery2.SQL.Add('select * from table1');
    ADOQuery2.Open;
    adoquery2.insert;if adoquery1.FieldByName('max1').IsNull then
      adoquery2.fieldbyname('id').value:='001'
    else
     if length(IntToStr(adoquery1.fieldbyname('max1').AsInteger+1))-length(IntToStr(adoquery1.fieldbyname('max1').AsInteger))=0 then
       adoquery2.fieldbyname('id').value:=copy(adoquery1.fieldbyname('max1').value,1,length(adoquery1.fieldbyname('max1').value)-length(IntToStr(adoquery1.fieldbyname('max1').AsInteger)))+IntToStr(adoquery1.fieldbyname('max1').AsInteger+1)
     else
       adoquery2.fieldbyname('id').value:=copy(adoquery1.fieldbyname('max1').value,1,length(adoquery1.fieldbyname('max1').value)-length(IntToStr(adoquery1.fieldbyname('max1').AsInteger))-1)+IntToStr(adoquery1.fieldbyname('max1').AsInteger+1);
    adoquery2.post;
    end;