【发布时间】:2017-05-02 13:37:25
【问题描述】:
我的目标是从 vba 函数执行一个 sql server 存储过程,并检查存储过程是否返回任何记录。
在我得到的 vba 代码中:
Function TestStoredProcedure()
Dim strMsg As String
Dim ADOCon As ADODB.Connection
Dim ADOQD As ADODB.Command
Dim ADORS As ADODB.Recordset
Set ADOCon = New ADODB.Connection
ADOCon.ConnectionString = GetConnectionString("Dev")
ADOCon.CommandTimeout = 0
ADOCon.Open
Set ADOQD = New ADODB.Command
ADOQD.ActiveConnection = ADOCon
ADOQD.CommandTimeout = 0
ADOQD.CommandType = adCmdStoredProc
ADOQD.CommandText = "mn_CheckForInvalidEntries"
'Execute
Set ADORS = ADOQD.Execute
If ADORS.RecordCount > 0 Then
strMsg = "The SLI Search Feed was not successful."
MsgBox strMsg, vbExclamation, "foo"
Else
strMsg = "The SLI Search Feed successful."
MsgBox strMsg, vbExclamation, "foo"
End If
ADOCon.Close
Set ADOQD = Nothing
Set ADOCon = Nothing
strMsg = ""
End Function
还有存储过程:
ALTER PROCEDURE [dbo].[mn_CheckForInvalidEntries]
AS
BEGIN
SET NOCOUNT ON;
SELECT
[ProductID]
, [ForSale]
FROM [Product]
WHERE [ProductID] IN
(
SELECT
[SearchIndex].[ProductID]
FROM [dbo].[SearchIndex]
INNER JOIN [ProductData]
ON [dbo].[SearchIndex].[ProductID] = [ProductData].[ProductID]
WHERE [ForSale] = 1
AND [SearchIndex].[ProductID] NOT LIKE 'mn[d-g]%'
AND [Record] IS NULL
AND [SearchIndex].[ProductID] NOT LIKE 'mn[a-z]%'
END;
如果我能得到任何帮助来检查 sp 是否返回任何值,那就太好了。
谢谢。
【问题讨论】:
-
该过程看起来像是返回行,那么您是否尝试将 ADO 记录集分配给
Execute的返回值?Set rs = ADOQD.Execute()然后检查rs.EOF并进行相应操作。 -
我有,我得到的回报是-1。我正在更新我的 vb 代码,以便您在等待一些 cmets 和建议时看到我尝试过的内容。
-
不要使用
Recordcount(它只适用于特定的游标类型)来确定是否有任何记录:如果没有返回任何记录,ADORS.EOF将为 True
标签: sql vba stored-procedures sql-server-2012 vb6