【发布时间】:2017-06-15 16:42:04
【问题描述】:
这是一个奇怪的问题,我事先道歉 - 我在一个名为“刷新”的 ActiveX 按钮中有以下 VBA 代码:
Sub Refresh_Click()
With ActiveWorkbook.Connections("Lender Pipeline").OLEDBConnection
.CommandText = "EXECUTE dbo.sp_Lender_Pipeline " & Range("Q2").Value
End With
ActiveWorkbook.Connections("Lender Pipeline").Refresh
End Sub
它的基本作用是根据 Q2 单元格的值从 SQL SP 中提取数据,并根据该值刷新 SP 表 - 这是我在单元格中手动添加的数字。此数字通常在 1 到 120 之间(基于 SP 中的 ID)。
问题:
- 似乎只有在输入某些数字时才会拉入数据。即 29
- 对于其他号码,我必须手动点击“全部刷新”。
- 如果我在 SQL Server Management 中手动执行 SP,它工作得非常好,所以问题似乎出在 VBA 内。
- 如果我从 Excel 电子表格中手动执行 SP,它也可以正常工作...
有没有人知道为什么会发生这种情况?可能是VBA还是其他?让我知道是否需要进一步澄清。
谢谢。
【问题讨论】:
-
您是否运行 SQL Profiler 以确保 number 参数按预期进入 SP,并且该过程实际上正在被触发?无论参数如何,返回列的名称和数量是否一致?也许 SET NOCOUNT ON;似乎是因为 Refresh All 似乎有效。在 Excel 2013 中,您现在在数据连接中有一个新的复选框选项。新选项是如果使用“全部刷新”,是否刷新特定连接。这是检查吗? “当单元格值更改时自动刷新”复选框怎么样?在这里钓鱼,但试图提供帮助。 :-)
-
几乎总是可行的一件事是让 SP 填充一个 TEMP 表,并将 Excel 表基于 TEMP 表,该表由 SP 更新。