如下代码
var 
   cd, s:string;
begin
 if query1.Active then query1.Close();
  query1.SQL.Clear ;
         query1.Params.Clear;
         s:= 'select sum(number) as num from ink.db where code like :cvr';
         query1.SQL.Add( s );
         query1.Params.CreateParam(ftstring,'cvr',ptInput);
         query1.Params.ParamByName('cvr').Asstring :=cd;
         query1.Open ;
end;
结果一运行就报错
project xx.exe raise exception class EDBEngineError with message '
could not find object. ' 感觉SQL好象很难使用,老出些不知是怎么回事的错误。

解决方案 »

  1.   

    query1.Open ; /改为 query1.execsql;
      

  2.   

    var 
       cd, s:string;
    begin
      cd:='%value%'
     if query1.Active then query1.Close;
      query1.SQL.Clear ;
             s:= 'select sum(number) as num from ink.db where code like :cvr';
             query1.SQL.Add( s );
             query1.Params.ParamByName('cvr').Asstring :=''''+cd+'''';
             query1.Open ;
    end;變量cd怎麼沒有初始值,like 空 肯定會出問題的  
    like ''''+'%'+cd+'%'+''''先看看你的select sum(number) as num from ink.db where code like :cvr
    語句有沒有問題,將:cvr賦一值試一下
      

  3.   

    > as num from ink.db 
    如果是 oracle的话,就不需要 as
      

  4.   

    var 
       cd, s:string;
    begin
     if query1.Active then query1.Close();
      query1.SQL.Clear ;
             query1.Params.Clear;
             s:= 'select sum(number) as num from ink.db where code like :cvr';
             query1.SQL.Add( s );
            // query1.Params.CreateParam(ftstring,'cvr',ptInput);
             query1.Params.ParamByName('cvr').Asstring :=cd;
             query1.Open ;
    end;把上面那行注释掉就好了
      

  5.   

    to 海浪:将open 改为 execsql还是出错。
    to 秋水: SQL语句没错,我曾经在设计期用过这个语句,只不过将:cvr 变成了实参。to 贱客: 你的答案成功了,不再出错。只是我很不明白为什么。因为我在另一个语句中没用 creatparam 时就报错找不到 param , 但这回用了 creatparam 又错,请问到底什么时候用 creatparam, 什么时候又不该用呢?