我在中间层中写了一个方法:
procedure TOrderQuery.SetSqlText(const SqlText, Qry_Name: WideString);
var
  i :integer;
begin
    if not adc_Ppo.Connected then adc_Ppo.Connected :=true;
    AdoQry_Ppo.SQL.Text :=SqlText;
    AdoQry_Ppo.Open;
   // 运行到下面这句时出现错误,但如我写死AdoQry的名字来取又不出错
  // 如: AdoQry_PpoItem.active :=True;    for i :=0 to  OrderQuery.ComponentCount-1 do
    begin
      if OrderQuery.Components[i].Name=Qry_Name then
      begin
        TAdoQuery(OrderQuery.Components[i]).SQL.Text :=SqlText;
        TAdoQuery(OrderQuery.Components[i]).Open;
        Break;
      end;
    end;
    
end;解决立即给分。

解决方案 »

  1.   

    AdoQry_PpoItem?是不是你写错了?应该是AdoQry_Ppo->Active = true;
      

  2.   

    重启一下机器,在run .应该没问题 了
      

  3.   

    AdoQry_Ppo.SQL.Text := SqlText;
    // string vs WideString  是不是类型的问题,跟踪以下看看:
    //Showmessage(AdoQry_Ppo.SQL.Text);
      

  4.   

    AdoQry_Ppo.Open;
    AdoQry_PpoItem.active :=True;如果他们是一个控件,那些一个就够了,他俩的意思是一样的。总的来讲,你叙述得我没全看懂。
      

  5.   

    先谢大家,不是AdoQry_Ppo.SQL.Text := SqlText;这一句出错,而是 for i :=0 to  OrderQuery.ComponentCount-1 do
    这一句出错。
    我是想根据名称找到对应的Query进行操作。
      

  6.   

    OrderQuery是什么?
    可以跟进中间层调试亚
      

  7.   

    OrderQuery 就是 中间层数据模板的名称,跟踪到 For ....这一句就出错,
    痛苦啊!Help me!
      

  8.   

    凡是遇到"灾难性故障",都是与操纵数据库方面有关,比如说SQL语句写错了等等.
      

  9.   

    如果是这一句出错的话,那你就要仔细看看你的SQL语句是否有问题了AdoQry_PpoItem.active :=True
      

  10.   

    这句没错啊,我觉得可能是sqltext的原因,如果不是select语句,下面要用adoqry_Ppo.execSQL
    你在看一下程序吧
      

  11.   


    GrassBoy(GrassBoy) 是对的,换成Self 就通过了。多谢! 马上给分。