如果外部 ADO 连接已连接或断开,如何检测组件内部?

Posted

技术标签:

【中文标题】如果外部 ADO 连接已连接或断开,如何检测组件内部?【英文标题】:How to detect inside a component if an external ADO Connection has connected or disconnected? 【发布时间】:2012-11-11 10:32:49 【问题描述】:

我正在开发一个与数据库一起使用的组件,并且数据库连接是通过 TADOConnection 属性从该组件外部指定的,该属性在对象检查器中可见。我假设外部用户可能打算使用此 ADO 组件的事件。然而,我还需要能够检测它何时连接或断开连接,以及其他各种事件。我能否在不覆盖外部用户可能已分配的事件处理程序的情况下获取 TADOConnection 的事件?

【问题讨论】:

检测是指在连接/断开连接时收到通知或事件 是的,还有所有的事件,比如OnCommitTransComplete——我只是不想干扰用户对这些事件的执行。 有趣的事实:ADO 连接有时可以被丢弃或断开,而您的 TADOConnection.Connected 属性不会变为假,至少对于远程 MS SQL Server ADO 连接是这样。当发生严重的网络故障或 SQL 服务器抖动和过载时,我就会发生这种情况。 【参考方案1】:

没有严重的副作用和/或严格的限制,没有解决方案。

您必须重新路由事件,但是...

外部用户可以在设计时修改事件(可以以某种方式处理),也可以在运行时修改事件,并且每种方法都会中断。

作为一种(可能)可能的解决方法(这是一个限制),您可以从 TADOConnection 发布自己的下降并强制外部用户使用它,并实现多播事件。

如果你只是想知道连接/断开事件,你可以调用受保护的方法 TCustomConnection.RegisterClient (unit Data.DB)

【讨论】:

以上是关于如果外部 ADO 连接已连接或断开,如何检测组件内部?的主要内容,如果未能解决你的问题,请参考以下文章

可靠的 WebSocket 连接状态检测

source端在hdmi断开连接多久会停止连接

宽带连接已断开连接怎么回事?

如果服务器断开我的连接,如何检测客户端?

如何检测 socket.io 上的断开连接?

如何检测win32上的datacard连接和断开事件?