Can I catch SQL Server Events with TEventDispatcher via TADOConnection?

96 Views Asked by At

I'm trying to catch lost connection on TADOConnection. I've read this and that article

I've implement TEventDispatcher class like that.

#include <utilcls.h>
#include <ADOInt.hpp>

class EventHandler : public TEventDispatcher<EventHandler,&DIID_ConnectionEvents>
{
private:
  bool connected;
  TForm1 *theform;
  _Connection* server;
protected:
  HRESULT InvokeEvent(DISPID id, TVariant *params);
public:
  EventHandler();
  ~EventHandler();
  void Connect(TForm1 *form, _Connection* srv);
  void Disconnect();
};

EventHandler::EventHandler()
{
  connected = false;
  theform = NULL;
}

EventHandler::~EventHandler()
{
  if (connected)
    Disconnect();
}

implementation

EventHandler *handler = new EventHandler();

HRESULT EventHandler::InvokeEvent(DISPID id, TVariant *params)
{
 String data = WideString(*params);
 ShowMessage("InvokeEvent : "+IntToStr(id)+" "+data);
}

void EventHandler::Connect(TForm1 *form, _Connection* srv)
{
  theform = form;

  server = srv;
  server->AddRef();
  ConnectEvents(server);
}

void EventHandler::Disconnect()
{
  DisconnectEvents(server);
  server->Release();
}

I'm trying to using EventHandler class like that.

handler->Connect(this,ADOConnection1->ConnectionObject);

Why don't call InvokeEvent method of EventHandler class when sql server manual stopped ?

0

There are 0 best solutions below