首先设一个断点,用F8来跟踪调试,看看执行到哪里出的错,这里就是非法访问对象了,一般情况下是指对象还没有Create或者已经Free了,还要去访问该对象,会出现类似的错误!你先设一个断点试试,就在FormOnCreate里好了,一般情况下程序的执行顺序是先FormOnCreate,然后是FormOnShow等等!

解决方案 »

  1.   

    应该是创建时,DataM对象还没有创建。
    如果是自动创建,请调整创建顺序。
      

  2.   

    应该是TFrmSys.FormCreate时,DataM对象还没有创建。
    如果是自动创建,请调整创建顺序。
      

  3.   

    DataM.DataSouLogin.DataSet:=DataM.ADOLogin;??
      

  4.   

    在原DataM.ADOLogin的SQL String里有没写SQL语句?如果没写就不要这句//DataM.ADOLogin.SQL.Clear;  看看...
      

  5.   

    点击delphi的Project菜单里面的Option。然后在Auto-create forms里把你的DataM移到最前面,也就是TFrmSys的前面。因为你的TFrmSys需要调用DataM里面的组件,所以要在TFrmSys创建之前创建你的DataM。
      

  6.   

    或者直接修改你的工程文件,如下
    begin
      Application.Initialize;
      Application.CreateForm(TDataModule2, DataModule2);  //放到第一个就可以了。
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
      

  7.   

    点击delphi的Project菜单里面的Option。然后在Auto-create forms里把你的DataM移到最前面,也就是TFrmSys的前面。因为你的TFrmSys需要调用DataM里面的组件,所以要在TFrmSys创建之前创建你的DataM。
    -----------------------------------------------------------------------------------------
    谢谢 xixuemao(俺可是㊣②㈧经儿滴人)了,我按你的做就可以了,这是怎么回事的呢?它不是创建了DataM就可以在程序中调用了吗?怎么会要求顺序的呢?能给我说说吗?还有在PROCEDURE的时候每个PROCEDURE的执行会不会也是要讲顺序的啊,还是不用的.
    对了,用没有好的DELPHI群啊我想进去学点东西.
    谢了每个帮我的大哥,一个菜鸟.
      

  8.   

    怎么会要求顺序的呢?答:做一个简单的比喻
        我要开一号门;一号门的钥匙在二号房间里;
        所以,我要先到二号房拿钥匙才能进一号房。   DataM提供的连接就象一号门的钥匙;
       TFrmSys.FormCreate就是开一号门。还有在PROCEDURE的时候每个PROCEDURE的执行会不会也是要讲顺序的啊,还是不用的.答:这个是不讲讲顺序的;注意不要死循环。
      

  9.   

    上面是打错了的,我明白了,是不是要TFrmSys.FormCreate时DATAM不提前创建,它就找不到里面的组件,老在找就产生了死循环一。如果没有TFrmSys.FormCreate的话那DATAM在不在前就无所谓了?