Excel:使用 VBA 执行 SQL 过程——允许用户继续工作——不要挂起 Excel 应用程序
Posted
技术标签:
【中文标题】Excel:使用 VBA 执行 SQL 过程——允许用户继续工作——不要挂起 Excel 应用程序【英文标题】:Excel: Execute SQL Procedure with VBA -- allow user to continue working -- do not hang the Excel Application 【发布时间】:2019-05-15 17:03:11 【问题描述】:我有几种从 Excel VBA 执行存储过程的方法。事实上,我什至没有兴趣将该程序的结果返回到 Excel,我只需要启动该程序。但是,当程序运行时 Excel “挂起”并且因为对客户不可用,尤其是当程序运行时间为 5 分钟或更长时间时。
我查看了人们在单个工作簿中实例化新应用程序的其他解决方案,但不清楚如何在该上下文中执行该过程。另一种解决方案是在后台打开第二个工作簿(对用户隐藏),并在该工作簿打开时自动运行宏,但我不清楚何时知道关闭它。
我用于调用该过程的代码,请注意,这存在超时问题,对此也有任何想法:
Sub Workbook_Open()
'Create connection string variable
Dim item As String
Dim con As New ADODB.Connection
'Build the connection string
con.ConnectionString = "Provider=SQLNCLI11;" _
& "Server=MyServerName;" _
& "Database=Oracle;" _
& "Integrated Security=SSPI;"
'Open the connection
con.Open
item = vbNullString
item = "exec dbo.SP_ORACLE_PULL"
con.Execute (item)
'Close the connection
con.Close
End Sub
有人有推荐的方法吗?是否最好打开隐藏在后台的工作簿并从那里运行程序?我怎么知道何时关闭该工作簿并将状态转发回原始工作簿?是否仍然会“挂起”所有打开 Excel 工作簿的客户。我搜索了所有内容,但没有找到此类场景的任何代码示例。
这只是权宜之计,直到我们可以在 4 到 6 个月内正式确定一个更企业化的解决方案。
【问题讨论】:
与***.com/questions/17574524/adodb-query-timeout重复 ADODB query timeout的可能重复 @DougCoats 超时查询与异步运行命令有何关系?我会在this post 上提交答案作为欺骗目标......这基本上是蒂姆在下面回答的内容。 @MathieuGuindon b/c 我没有仔细阅读。或者 b/c 我是这么说的(尽管我试图玩弄它,但有一点 sass 一点用都没有)。 【参考方案1】:如果您使用 WithEvents
声明连接等,ADO 支持异步操作
请参见此处,例如:https://support.microsoft.com/en-us/help/190988/how-to-open-ado-recordsets-asynchronously-using-withevents
【讨论】:
以上是关于Excel:使用 VBA 执行 SQL 过程——允许用户继续工作——不要挂起 Excel 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
为啥sql数据库的表用VBA导到EXCEL中的速度比EXCEL的数据导入功能慢
在 VBA 中使用 SQL 连接两个 Excel 工作簿中的数据(只读错误)