with q_kcink do   //计算oracle中数据条数
 begin
     close;
     sql.Clear;
     sql.Add('select count(*) as countkc from kcink where arrivedate=:aa');
     Parameters.ParamByName('aa').Value:=strtodate(adate);
    open;
 end;
其中adate是字符‘2004-08-31’运行后报‘not a single-group group function’的错误
请问这是什么原因?

解决方案 »

  1.   

    看提示不象数据库的问题你把Parameters.ParamByName('aa').Value:=strtodate(adate);注释掉换成 ShowMessage(datetostr(strtodate(adate));看看报不报错,如果不报就大致可以
    确定是数据库的问题,(如果用access数据库,'2004-08-31'的却不是日期写法)
      

  2.   

    with q_kcink do   //计算oracle中数据条数
     begin
         close;
         sql.Clear;
         sql.Add('select count(*) as countkc from kcink where arrivedate=:aa');
         Parameters.ParamByName('aa').Value:=strtodate(adate);
        open;
     end;
    改为
    with q_kcink do   //计算oracle中数据条数
     begin
         close;
         sql.Clear;
         sql.Add('select count(*) countkc from kcink where arrivedate=:aa ');//注意这行!
         Parameters.ParamByName('aa').Value:=strtodate(adate);
        open;
     end;
      

  3.   


    Parameters.ParamByName('aa').Value:=strtodate(adate);改为下面试试:Parameters.ParamByName('aa').AsDate:=strtodate(adate);另外. 看看oracle中日期/时间类型 是不是 yyyy-mm-dd格式的
    我没用过oracle
      

  4.   

    adate的值是:2004-09-04 10:51:00 的话那么就会出错的
    就是说时间类型转换有误的
    得看看你的字段数据类型
      

  5.   

    肯定有问题啊,select 里面要包含where的条件啊,就是要包含arrivedate字段
      

  6.   

    with q_kcink do   //计算oracle中数据条数
     begin
         close;
         sql.Clear;
         sql.Add('select count(*) as countkc from kcink where arrivedate=:aa');
         Parameters.ParamByName('aa').Value:=strtodatetime(adate);
        open;
     end;
      

  7.   

    可能是Oracle的PL_SQL语法不太一样,这样试试:
    with q_kcink do   //计算oracle中数据条数
     begin
         close;
         sql.Clear;
         sql.Add('select count(*) as countkc from ');
         sql.Add('(select * from kcink where arrivedate=:aa) tmp');
         Parameters.ParamByName('aa').Value:=strtodate(adate);
        open;
     end;
      

  8.   

    query1.Close;
    query1.SQL.Clear;
    query1.SQL.add('select * from gz_jbqkyue where to_char(C45,''yyyy-mm'')=:date  and c1='''+edit1.text+''' ');
    query1.parambyname('date').asstring:= formatdatetime('yyyy-mm',datetimepicker1.datetime);
    query1.open;看看这个
      

  9.   

    试试这样:
    sql.Add('select count(*) as countkc from kcink where arrivedate=to_date(:aa)');
      

  10.   

    Oracle中的日期不是这样的吧?
    试试:
    with q_kcink do   //计算oracle中数据条数
     begin
         close;
         sql.Clear;
         sql.Add('select count(*) as countkc from kcink where to_char(arrivedate,''YYYY-MM-DD'')=:aa');
         Parameters.ParamByName('aa').Value:=adate;
        open;
     end;