在执行远程查询时异步运行的VBA Timer

时间:2018-03-19 20:46:30

标签: vba ms-access winapi asynchronous timer

我有一个Access应用程序,它从慢速SQL Server数据仓库中提取数据。我正在使用VBA使用Docmd.OpenQueryCurrentDb.Execute调用查询(具体取决于它们是否为操作查询)。某些查询可能需要5-10分钟才能运行。调用查询时,我想在屏幕上显示一个已用时间,从“00:00:00”开始,在等待查询完成时以秒为单位递增。

我尝试使用Timer()事件构建表单,但发现只要调用查询,计时器事件就会停止。做了一些进一步的研究我已经读过这是不可能的,因为Access是单线程的。为此,定时器和查询需要异步运行。我向社区提出的问题是,有没有人找到一种方法来通过API调用或其他方式来实现这一点,这些方法不需要VBA项目之外的其他文件?此代码是Access Add-in的一部分,我希望它易于分发并能够处理任何查询(慢/快/ Access / ODBC /等)。

' Code might look like this:
StartTimer ' This starts and shows the timer
Docmd.OpenQuery "vw_CustomerReport" ' This calls the query.  The timer should still update while this runs.
StopTimer ' This stops the timer.

注意:我无法控制数据库或查询的速度,因此请不要提出优化查询或将其作为传递方式运行的建议。这个问题是关于显示已用时间而不是慢查询。

0 个答案:

没有答案