我用程序继承了一个TADOCONNECTION对象
如何设置他的ONDisconnect事件请大家讨论我的程序
-------------------------
unit fConnection;interface
uses ADODB,fDBSet,Dialogs;type
TDBConnection = class(TADOConnection)
   procedure connectionBreak(Connection: TADOConnection ; var EventStatus: TEventStatus);
private
public
   constructor create(var db_set:TDBSet);
   destructor destroy();override;end;implementation   constructor TDBConnection.create(var db_set:TDBSet);
   var eventStatus:TEventStatus;
   begin
       inherited create(nil);
       self.ConnectionString := 'Provider=SQLOLEDB.1;User ID=''' +  db_set.getUserName() + ';Initial Catalog=''' + db_set.getDatabaseName + ';Data Source=''' + db_set.getServerName + '''';
       if db_set.getPassword <> 'no' then
          self.ConnectionString := self.ConnectionString + 'Password=''' + db_set.getPassword() + '''';
       writeln(self.ConnectionString);
       self.Open();
       self.OnDisconnect := self.connectionBreak(self ,eventStatus);
   end;   destructor TDBConnection.destroy();
   begin
      self.Close;
      self.Free;
      inherited;
   end;   procedure TDBConnection.connectionBreak(Connection: TADOConnection;
  var EventStatus: TEventStatus);
   begin
      ShowMessage('数据库服务器连接中断!程序退出.');
      halt;
   end;end.

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4106/4106061.xml?temp=.7855188觉得你的问题和这个差不多
      

  2.   

    var db_set:TDBSet
    这里好象不用VAR吧,而且尽量避免少用外部的指针
      

  3.   


    type
      TMyConn = class(TAdoconnection)
      public
        procedure Disconnect(Connection: TADOConnection;
         var EventStatus: TEventStatus);overload;
    end;
    implementationprocedure TMyConn.Disconnect(Connection: TADOConnection;var EventStatus: TEventStatus);
    begin
      showmessage('ha ha !')
    end;
      

  4.   

    type
      TMyConn = class(TAdoconnection)
      public
        procedure Disconnect(Connection: TADOConnection;
         var EventStatus: TEventStatus);overload;
    end;
    implementationprocedure TMyConn.Disconnect(Connection: TADOConnection;var EventStatus: TEventStatus);
    begin
    inherited;
      showmessage('ha ha !')
    end;
      

  5.   

    db_set是我写的一个纯数值对象用于存储
    数据库服务器的设置
    包含IP地址
    默认数据库名
    用户名
    密码
      

  6.   

    两位自己这样写过吗?
    你们这样能在连接断开时候自动掉用吗?
    我查看帮助手册好象也没有DISCONNECT方法
    怎么重载
      

  7.   

    程序已经正确,特将程序帖出
    谢谢各位关注unit fConnection;interface
    uses ADODB,fDBSet,Dialogs;type
    TDBConnection = class(TADOConnection)
       procedure connectionBreak(Connection: TADOConnection ; var EventStatus: TEventStatus);
    private
    public
       constructor create(db_set:TDBSet);
       destructor destroy();override;
    end;implementation   constructor TDBConnection.create(db_set:TDBSet);
       //var eventStatus:TEventStatus;
       begin
           inherited create(self);
           self.ConnectionString := 'Provider=SQLOLEDB.1;Initial Catalog=' + db_set.getDatabaseName + ';Data Source=' + db_set.getServerName ;
           if db_set.getUserName <> 'no' then
              self.ConnectionString := self.ConnectionString + ';User ID=' +  db_set.getUserName() ;
           if db_set.getPassword <> 'no' then
              self.ConnectionString := self.ConnectionString + ';Password=' + db_set.getPassword() ;
           self.Open();
           self.OnDisconnect := self.connectionBreak; 
       end;   destructor TDBConnection.destroy();
       begin
          self.Close;
          inherited;
       end;
       procedure TDBConnection.connectionBreak(Connection: TADOConnection;
      var EventStatus: TEventStatus);
       begin
          ShowMessage('数据库服务器连接中断!程序退出.');
          halt;
       end;end.