怎么让编号自动出现JH2002101301,JH2002101302,
如果是明天就是:JH2002101401,JH200210140,
下面该如何该才能达到我的目的呢?我想因为前面加了'jh'的关系吧。一查询就出错!if table1.Eof then   //当数据库为空的时候,自动生成第一张编号;
begin
table1.Append;
table1.FieldByName('bh').AsString:='JH'+formatdatetime('yyyymmdd',now)+'01';
end
else               //找出最大值,然后加一!
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select max(bh) as sumr from bh');
query1.Open;
dbedit1.Text:=query1.FieldValues['sumr']+1;
dbedit1.SelectAll;

解决方案 »

  1.   

    var
      NoStr,DetailStr:String;
    begin
      ...
      NoStr:=Query1.Fields[0].AsString;
      DetailStr:=Copy(NoStr,Length(NoStr)-1,2);
      NoStr:=Copy(NoStr,1,Length(NoStr)-2)
               +IntToStr(StrToInt(DetailStr)+1);
      dbedit1.Text:=NoStr;
      dbedit1.SelectAll;
    end;//试试,我在网吧没办法调试
      

  2.   

    改一下你的程序:else               //找出最大值,然后加一!
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.Add('select max(right(bh,2)) as sumr from bh');
    query1.Open;
    table1.Append;
    table1.FieldByName('bh').AsString:='JH'+formatdatetime 'yyyymmdd',now)+query1.fieldbyname('sumr').asstring;
      

  3.   

    呵呵,加上一个begin.endelse               //找出最大值,然后加一!
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.SQL.Add('select max(right(bh,2)) as sumr from bh');
    query1.Open;
    table1.Append;
    table1.FieldByName('bh').AsString:='JH'+formatdatetime 'yyyymmdd',now)+query1.fieldbyname('sumr').asstring;
    end
      

  4.   

    TO: lxl(蚊蚊) 
    你的想法不错,不过可能不对吧,象这样的数据:
    JH2002101305,
    JH2002101403//比方这是今天的单号,你的方法就有问题
      

  5.   

    lxl(蚊蚊)方法要作下这样的改动一下:
    把:
    query1.SQL.Add('select max(right(bh,2)) as sumr from bh');
    改为:
    query1.SQL.Add('select max(right(bh,2)) as sumr from bh');
    query1.SQL.Add('where bh like '''+formatdatetime('yyyymmdd',now)+'%''');
    说到这楼主的SQL语句也写得有问题。
      

  6.   

    我的数据表有一个id字段(自动增加),所以我的sql语句是:
    select max(bh) from biao where biao.id=(select max(id) from biao)
    很好用啊。
      

  7.   

    求出表中那一天最大的id
      select max(Right(myID, 2)) from a
    然后就可以通过Format函数格式化你所要的字符串了。
     
    function GetAutoID(ADataSet: TQuery; ADate: TDataTime);
    var
      Year, Month, Day: Word;
    begin
      DecodeDate(ADate, Year, Month, Day)
      with ADataSet do
      begin
        if Active then Close;
        //Max函数不说了,Right函数是取这个字段值,取它右边的两位
        // 还要加上Where语句,不然它找的是全部记录.
        SQL.Text := Format('SELECT MAX(RIGHT(myID, 2)) FROM A WHERE myID like ''JH%.4d%.2d%.2d%s''', [Year, Month, Day, '%']);
        try
          Open; First;
        except
          raise Exception.Create('打开什么表出错。');
        end;
        if Fields[0].IsNull then   //为空,说明是第一张
          Result := Format('JH%.4d%.2d%.2d%.2d', [Year, Month, Day, 1])
        else
          Result := Format('JH%.4d%.2d%.2d%.2d', [Year, Month, Day, Fields[0].AsInteger + 1]); 
      end;
    end;