私の目標は、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
ストアドプロシージャ:私はこれまでのところ得VBAコードで
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コードを更新しています。 –
レコードがあるかどうかを判断するために 'Recordcount'(実際には特定のカーソルタイプのみで動作します)を使わないでください:何も返されなければ' ADORS.EOF'は真となります –