with ADOQ_FBXH do
begin
  close;
  SQL.Clear;
  SQL.Add('select max(kfbxh)  max_kfbxh from ZZP_SCBZPJH where sfff=2');
  SQL.Add('and substr(kfbxh,1,6) =:cs_date');
  Parameters.ParamByName('cs_date').Value:=YEAR_S+MONTH_S+day_S;
  Prepared;
  Open;
end;
出现错误提示‘非单组分组函数’,但我在pl/sql中执行不出错,应怎样写???

解决方案 »

  1.   

    with ADOQ_FBXH do
    begin
      close;
      SQL.Clear;
      SQL.Add('select max(kfbxh)  max_kfbxh from ZZP_SCBZPJH where sfff=2');
    //  SQL.Add('and substr(kfbxh,1,6) =:cs_date');   //这样行不行?
     // Parameters.ParamByName('cs_date').Value:=YEAR_S+MONTH_S+day_S;
      Prepared;
      Open;
    end;
      

  2.   

    SQL.Add('and substr(kfbxh,1,6) ='':cs_date''');//加引号试试
      

  3.   

    看这个和你那个一样么
    http://topic.csdn.net/t/20030710/19/2013965.html
      

  4.   

    需要把MAX的字段分组 用GROUP BY
      

  5.   

    在PL/SQL中执行select max(kfbxh)  max_kfbxh from ZZP_SCBZPJH where sfff=2 and substr(kfbxh,1,6) ='070716'没有问题,我想找出记录中kfbxh最大的序号,怎么办呀???
      

  6.   

    为什么sqladd要两行,合成一个试试
      

  7.   

    SQL.Add('select max(kfbxh) max_kfbxh from ZZP_SCBZPJH where sfff=2');
    SQL.Add('and substr(kfbxh,1,6) =:cs_date');//and 前是不是应该有个空格啊
    SQL.Add(' and substr(kfbxh,1,6) =:cs_date');
      

  8.   

    with ADOQ_FBXH do
    begin
      close;
      SQL.Clear;
      SQL.Add('select max(kfbxh)  max_kfbxh from ZZP_SCBZPJH where sfff=2 ');
      SQL.Add('and substr(kfbxh,1,6) =:cs_date');
      Parameters.ParamByName('cs_date').Value :=quotedstr(YEAR_S+MONTH_S+day_S);
      Prepared ;
      Open;
    end;
      

  9.   

    在Open之前把SQL.Text取出,看看是些什么,直接到数据库引擎中试验是否可以通过。
    带参数的SQL语句,数据库引擎会提示输入参数的。
      

  10.   

    合成一个也不行,但是这样就对’select max(kfbxh)  kfbxh from ZZP_SCBZPJH where sfff=2 and 1=1‘
      

  11.   

    --
    create table ZZP_SCBZPJH(kfbxh varchar2(10),sfff int);
    /
    insert into ZZP_SCBZPJH
    select '070101',2 from dual union all
    select '070201',2 from dual union all
    select '070101',1 from dual union all
    select '070101',2 from dual union all
    select '070101',3 from dual;
    /
    --执行查询
    select max(kfbxh) max_kfbxh from ZZP_SCBZPJH where sfff=2 and substr(kfbxh,1,6) ='070101';
    /
    --输出结果
    070101////  with ADOQ_FBXH do
      begin
        close;
        SQL.Clear;
        SQL.Add('select max(kfbxh) max_kfbxh from ZZP_SCBZPJH where sfff=2 and substr(kfbxh,1,6) =:cs_date');
        Parameters.ParamByName('cs_date').Value:='070101';
        Prepared;
        Open;
      end;再dbgrid中可以正常显示结果070101
      

  12.   

    你的查询语句我看没有什么意义,可能只是sql片断
    :)
      

  13.   

    修改了一下测试数据create table ZZP_SCBZPJH(kfbxh varchar2(10),sfff int);
    /insert into ZZP_SCBZPJH
    select '0701011',2 from dual union all
    select '0702012',2 from dual union all
    select '0701013',1 from dual union all
    select '0701014',2 from dual union all
    select '0701015',3 from dual;
    /
    --执行查询
    select max(kfbxh) max_kfbxh from ZZP_SCBZPJH where sfff=2 and substr(kfbxh,1,6) ='070101';
    /
    --输出结果
    0701014请揭帖
    :)
      

  14.   

    语句本身应该没有问题。是不是你的ADOQ_FBXH有什么别的field?
    另外,就是会不会是substr这个函数的问题?你用的是什么数据库?
      

  15.   

    oracle9i;ADOQ_FBXH没有别的field,substr这个函数的取之也对
    其实,kfbxh由年2位月2位日2位再加2位顺序号,每天生成序号如2007-7-16,第一次kfbxh为07071601;第二次07071602等;2007-7-17,第一次kfbxh为07071701;第二次07071702等
      

  16.   

    1、直接传入,不要用参数,试试;
    2、将substr(kfbxh,1,6) =:cs_date改成kfbxh like :cs_date,传参数时,
        Parameters.ParamByName('cs_date').Value:=YEAR_S+MONTH_S+day_S+'%';