我的数据库里有个考生编号字段,我想在窗体一显示时从库里比较,查出最大的然后加1赋给编辑框edt_ksbh.text,但这个循环我不知怎么写,
我用的考生编号不是纯数字,而是zg001开始的,比如连接数据库的adoquery 名为adoq_ksbh
我是这么写的:
adoq_ksbh.first;
edt_ksbh.text:=zg001;
with adoq_ksbh do
begin
  next;
  close;
  sql.clear;
  sql.add('select * from tbl_ksbh');
  open
  if strtoint(copy(edt_ksbh.text,5,6))<adoq_ksbh.fieldbyname('ksbh').value then
   edt_ksbh.text:=adoq_ksbh.fieldbyname('ksbh').value then
end;
但是不对,请各位高手教教小弟

解决方案 »

  1.   

    select max(right(ksbh,length(ksbh)-2)) from tbl_ksbh
      

  2.   

    //需要在数据库中另建一个最大编号库的表,记录你的最大编号值.如此可以自动生成员工编号.以下是我写的一段程序,可以给你借鉴一下.
    procedure TFBasicPersonInfo.BasicPersonInfoInitial;   
    begin
      with datamodule1 do
      begin
        TMaxbh.Filter:='biaoshi=''zg''';
        TMaxbh.Filtered:=true;
        TMaxbh.Open;
        counter:=TMaxbh['maxbh'];
        TMaxbh.Close;
        counter:=counter+1;
        biaoshi:='000000'+Inttostr(counter);
        biaoshi:='PID'+RightStr(biaoshi,6);
      end;
      DBEid.Text:=biaoshi;
    end;
      

  3.   

    写错几个字,把倒数第四行的PID改成zg即可.
      

  4.   

    建表语句也可以给你,我用的SQL Server
    --最大编号库
    create table Maxbh
    (
     biaoshi char(2) primary key, --职员编号的标识
     maxbh char(11) null default '', --职员当前的最大编号
     beizhu varchar(20) null default '' --备注
    )insert into Maxbh values('zh','0','')
      

  5.   

    adoq_ksbh.first;
    edt_ksbh.text:=zg001;
    While Not adoq_ksbh.Eof Do
    begin
      adoq_ksbh.close;
      adoq_ksbh.sql.clear;
      adoq_ksbh.sql.add('select * from tbl_ksbh');
      adoq_ksbh.open
      if strtoint(copy(edt_ksbh.text,3,5))<Strtoint(Copy(adoq_ksbh.fieldbyname('ksbh').AsString,3,5)) then
       edt_ksbh.text:=adoq_ksbh.fieldbyname('ksbh').AsString,3,5));
    adoq_ksbh.Next; 
    end;
    edt_ksbh.text:=copy(adoq_ksbh.fieldbyname('ksbh').AsString,1,2)+IntToStr(StrToint(copy(edt_ksbh.text,3,5))+1);
      

  6.   

    herozzg(herozzg) ( ) 信誉:100   这位仁兄写的有点不太懂,
        counter:=TMaxbh['maxbh'];这句啥意思是调用一个取最大编号的函数吗但我觉得思想不错谢谢 angle097113(深思不解) ( ) 信   这位
    edt_ksbh.text:=copy(adoq_ksbh.fieldbyname('ksbh').AsString,1,2)+IntToStr(StrToint(copy(edt_ksbh.text,3,5))+1);
    这句啥意思我运等不对呀希望还能有人帮助谢谢了,