我在一个COM控件中引入了一个DataModule单元,然后在DataModulex引入了一个ClientDataset控件,并在设计时导入数据,但我却发现对ClientDataset做任何操作时(比如取值,移动记录集等)都有会出现“灾难性错误”,但如果我在运行时Create一个ClientDataset,并在运行时加载数据,则可以操作(移动,取值等)。不知为什么??

解决方案 »

  1.   

    如果出现这种问题建议你先一步步排除问题吧,你可以先放一个 TClientDataSet 控件到 DataModule 中,看看运行结果如何,然后再进行下一步判断。出现这种问题的原因有很多,以前我因为其它的原因(如在客户端中调用服务端不存在的接口)也报类似的错误。
      

  2.   

    你是用ADO连接数据库的吗?我用ADO就会出现“灾难性错误”的提示,后来改用DBExpress就没有这个问题了。
      

  3.   

    仅供参考:
    “灾难性错误”我遇到过,我的原因是对一个TAdoQuery的data在同一个线程内绑定到了多个Tdataset,然后我操作Tdataset时,该Tdataset似乎影响到了TadoQuery。后来我多声明了几个Tadoquery,然后分别应用,问题解决了。
    当然,程序内部错误,比如sql语句步正确也会有这样的错误处来。
      

  4.   

    “灾难性错误”可能性太多了,一个非法指针存取引起的ACCESS VIOLATION...错误,返回给客户就是'灾难性错误'.
      

  5.   

    问题已解决,是因为dmDataModule 没有初始化,所以会报错,需要在Initialize方法里面坐初始化工作,通常新建Form, DataModula时系统帮助建立的实例变量,系统会在项目初始化的时候创建,但是ActiveX和COM组件系统不会自动初始化这些实例变量,所以不能直接使用
    procedure TABC.Initialize;
    begin
      inherited;
      dmDataModule := TdmDataModule.Create(nil);
    end;