写了个控件定义:FADOConnection:TADOConnection;
有属性:
property Connection: TADOConnection read FADOConnection write FADOConnection default nil;控件安装成功了在修改Connection时:
属性Connection也能连接成功,例如连接到"ADOConnection1"这时,如果把ADOConnection1删除,我的控件,将出现错误
有属性:
property Connection: TADOConnection read FADOConnection write FADOConnection default nil;控件安装成功了在修改Connection时:
属性Connection也能连接成功,例如连接到"ADOConnection1"这时,如果把ADOConnection1删除,我的控件,将出现错误
具体一点就是,两可控件有关联
例如:TADOQuery1有 Connection 属性连接 ADOConnection1
当ADOConnection1 被删除时,数据集TADOQuery1的Connection 属性连接会自动清掉,不知道怎么实现的 adoconnection有个RegisterClient
的得到connection好像的调用RegisterClient登记一下
但这是adoconnection私有的无法调用
在类定义中假如如下定义
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;
所有的数据集对象都派生于TComponent,这个类有个方法成员叫Notification(虽然从TControl开始就有这个方法了),这个方法的目的是为了让用户在删除与自身相连接的菜单(弹出式)的时候控件自身可以对自己进行刷新,比如清空PopupMenu属性的值。但数据集控件覆盖了这个方法,从而保证了与自身相连接的数据源(这里是TADOConnection)控件被删除的时候清空相应属性,这里是Connection属性,从而避免了访问一个已经无效的引用!所以只要派生一个TADOQuery的子类,并在其中的Protected部分覆盖Notification方法就可以了,具体代码如Wush007所写那样!
还有 风焱呵呵