TAdoQuery的大BUG?断网重连后不能再Open公用AdoQuery,否则堆栈溢出。
最近接了个任务,给一个程序增加断网重连的能力(该程序是通过ADO连接到MSSQL数据库)。
于是,我做了一个ADO连接的辅助类TAdoConnHelper,它的主要功能是:
1.检测断网;
2.待网络恢复后,重连;
3.发送消息,通知其他窗体刷新数据。
功能1,2都没问题,但功能3出现问题了。
问题:
如果某个FORM中实现查询数据时,使用了另一个DataModule中的TAdoQuery(公用TAdoQuery),那么刷新数据时,就不能再Open该TAdoQuery了,否则会导致堆栈溢出。
如果在断网之前,只使用自己本单元的TAdoQuery就没有问题。
我跟了一下那个公用DEMO,发现断网后它的active=inactive, Dataset.RecordsetState=[stExecuting].
此时,什么CLOSE啥的都没用了,我怀疑这是TAdoQuery的Bug。
不知道有什么办法解决吗?
--------
我提取了一个DEMO,可以到网盘下载,链接:
http://yunpan.cn/cA7mdRacxZTrD
提取码 7716
压缩包中有个SQL脚本,请先执行一下,就可以运行DEMO了。谢谢。