我原来用BDE查询时,下面查询能执行,改为ADOQuery查询后,就不行了,为什么?
    with frmDM.qryCommon do begin
      Close;
      SQL.Clear;
      SQL.Add('Select CURVALUE,CURTIME from asensoralarm where (CURTIME >=:kssj and');
      SQL.Add(' CURTIME <=:jssj) and SENSORID=:id ');
      Parameters.ParamByName('kssj').Value:=kssk;
      Parameters.ParamByName('jssj').Value:=jssk;
      Parameters.ParamByName('id').Value:=cgqbh;
      Prepared:=True;
      Open;
      Prepared:=False;
end;
为什么?谢谢高手帮忙!

解决方案 »

  1.   

    当然,如果没有CURTIME >=:kssj 这种日期类型的参数,查询能执行!
      

  2.   

    忘了说了,数据库是SQL Server 2000
      

  3.   

    :jssj 参数前后加引号 """号试试。with frmDM.qryCommon do begin
          Close;
          SQL.Clear;
          SQL.Add('Select CURVALUE,CURTIME from asensoralarm where (CURTIME >=":kssj" and');
          SQL.Add(' CURTIME <=":jssj") and SENSORID=:id ');
          Parameters.ParamByName('kssj').Value:=kssk;
          Parameters.ParamByName('jssj').Value:=jssk;
          Parameters.ParamByName('id').Value:=cgqbh;
          Prepared:=True;
          Open;
          Prepared:=False;
    end;
      

  4.   

    先在查询分析器中设置 quoted_identifier 勾去掉
      

  5.   

    是单引号,或者用quotstr函数,日期型必须用''引起来的
      

  6.   

    如果你的kssk是日期类型,那么这么写
    Parameters.ParamByName('kssj').Value:=formatdatetime('yyyy-mm-dd',kssk);
      

  7.   

    with frmDM.qryCommon do 
    begin
          Close;
          SQL.Clear;
          SQL.Add('Select CURVALUE,CURTIME from asensoralarm where (CURTIME >=:kssj and');
          SQL.Add(' CURTIME <=:jssj and SENSORID=:id ');
          Parameters.ParamByName('kssj').Value:= formatdatetime('yyyy-mm-dd',kssk);
          Parameters.ParamByName('jssj').Value:=formatdatetime('yyyy-mm-dd',jssk);
          Parameters.ParamByName('id').Value:=formatdatetime('yyyy-mm-dd',cgqbh);
          Prepared:=True;
          Open;
          Prepared:=False;
    end;你的代码中的第五行中间多了一个')'吧