SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询
Posted
技术标签:
【中文标题】SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询【英文标题】:SQL Server stored procedure to report progress to its caller, an Access (VBA DAO) pass through query 【发布时间】:2017-10-29 11:38:01 【问题描述】:SQL Server 存储过程是否可以向调用者报告进度? 我有一个由多个步骤组成的复杂任务,并且我有一个存储过程来完成它。我从 MS Access 前端调用此存储过程。存储过程大约需要 3-4 分钟才能完成,在此期间 Access 似乎“挂起”,等待存储过程返回结果或超时。
我知道我可以将我的存储过程分成 3-4 个小块,然后一个接一个地调用它们,在这些步骤之间提供一些反馈。然而,这感觉像是一种解决方法,而不是解决方案。
我也讨厌有四个存储过程而不是一个,因为我有很多这样的任务,这条路径会将我的 30 个存储过程(已经很多)变成 50 多个。
那么,存储过程有什么方法可以偶尔向调用 Access (DAO) 报告状态或任何内容?
这是我调用存储过程的方式:
Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("")
' get .Connect property from existing ODBC linked table
qdf.Connect = cdb.TableDefs("Quote").Connect
qdf.sql = "EXEC INV.ProcessMatchedQueries"
qdf.ReturnsRecords = False
qdf.ODBCTimeout = 300
qdf.Execute dbFailOnError
Set qdf = Nothing
Set cdb = Nothing
【问题讨论】:
【参考方案1】:似乎没有好的解决方案。
尝试执行一个 SP 来完成你的工作(使用dbRunAsync
),另一个 SP 来接收结果状态。第一个 SP 应该在某处存储执行状态,第二个 SP 将读取它。
【讨论】:
这其实是个好主意,我会试试的。我将把这个问题留待一段时间,希望有另一个更漂亮的解决方案。谢谢! 在 ADO.NET 中,您可以创建一个SqlDataReader
对象来接收多个记录集,并在一个 SP 中添加多个 SELECT
语句以返回结果状态。我认为 DAO 不支持它。以上是关于SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)