写了个控件定义:FADOConnection:TADOConnection;
有属性:
    property Connection: TADOConnection read FADOConnection write FADOConnection default nil;控件安装成功了在修改Connection时:
属性Connection也能连接成功,例如连接到"ADOConnection1"这时,如果把ADOConnection1删除,我的控件,将出现错误

解决方案 »

  1.   

    if Assigned(FADOConnection ) and (not FADOConnection  = nil) then
      

  2.   

    to firetoucher(风焱) 这样也不行to  FrameSniper
    具体一点就是,两可控件有关联
    例如:TADOQuery1有 Connection 属性连接 ADOConnection1
    当ADOConnection1 被删除时,数据集TADOQuery1的Connection 属性连接会自动清掉,不知道怎么实现的 adoconnection有个RegisterClient
    的得到connection好像的调用RegisterClient登记一下
    但这是adoconnection私有的无法调用
      

  3.   

    你好, 如下做,保证药到病除
    在类定义中假如如下定义
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;实现的时候写
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    begin
        inherited Notification(AComponent, Operation);
        if (Operation = opRemove) and (FADOConnection<> nil) and
            (AComponent = FADOConnection) then FADOConnection := nil;
    end;
      

  4.   

    呵呵,牛郎,你啥时候成了买药的了,哈哈!楼主,看到上面这个朋友的回复偶才明白你要问啥:楼上说的没有错误
    所有的数据集对象都派生于TComponent,这个类有个方法成员叫Notification(虽然从TControl开始就有这个方法了),这个方法的目的是为了让用户在删除与自身相连接的菜单(弹出式)的时候控件自身可以对自己进行刷新,比如清空PopupMenu属性的值。但数据集控件覆盖了这个方法,从而保证了与自身相连接的数据源(这里是TADOConnection)控件被删除的时候清空相应属性,这里是Connection属性,从而避免了访问一个已经无效的引用!所以只要派生一个TADOQuery的子类,并在其中的Protected部分覆盖Notification方法就可以了,具体代码如Wush007所写那样!
      

  5.   

    哦!哈哈!谢谢  wush007(防守反击) 以及 FrameSniper 的详解 实在太感激了,成功了,真想拥抱你;-)
    还有 风焱呵呵