我在创建数据模块时,写了一些代码如下:
procedure TDM.DataModuleCreate(Sender: TObject);
var i:integer;
begin
  if ADOConnectLocalDB(ADOConn) then             //连接数据库,成功则将TADOQuery的所有控件
  begin
    for i:=0 to ComponentCount-1 do               的Active=true;
    begin
      if (Components[i].ClassName='TADOQuery') then
      begin
       (Components[i] as TADOQuery).Active:=true;
      end;
    end;
  end;
end;uses DMBase;
procedure Tfrmperson_info.FormCreate(Sender: TObject);
begin
  dm.adoc_dept.Active:=true;         //这句不写就报错,说Closed;
  showmessage(inttostr(dm.adoc_dept.RecordCount));  //上面这句加上就有记录,
end;为什么我在别的窗体调用该数据模块中的TADOQuery时,为什么是关闭的,要重新Active:=true,才有记录;请问这是为什么?应该如何做到在数据模块中查询一次设为True之后,在别的窗体都可用,不需要再重新查询,

解决方案 »

  1.   

    在TADOQuery属性中静态设置为Active:=true看看...每次打开时就默认开启了...
      

  2.   

    楼上的我只是在连接数据库成功后才设为True
      

  3.   

    是不是你在调用的时候DataModule单元时没连接?如果先设定下调用前都要保持连接状态,是不是就可以了!?
      

  4.   

    可以这样改一下循环:
      for i :=0 to ComponentCount - 1 do
      begin
        if Components[i] is TADOQuery then
          TADOQuery(Components[i]).Open;
      end;
      

  5.   

    TO  hqhhh(枫叶) 
    我也试过也不行!~
      

  6.   

    Tfrmperson_info.FormCreate之前TDM创建了没有?
    看看代码执行到(Components[i] as TADOQuery).Active:=true;没有
      

  7.   

    我已测试通过,
    是不是在你创建Tfrmperson_info时,TDM还没有创建!
    你先放在一个单元上试试,然后再在其他单元上测试 !
      

  8.   

    我已解決了,是我自己的問題!~TDM本身程序一启动就创建好了的,除主窗体外其它都是动态创建的,我在登录的时候又重新连接了数据了,郁闷!~所以出现这种情况,谢谢你们!~~