Моя цель - выполнить хранимую процедуру сервера sql из функции vba и проверить, вернула ли хранимая процедура какие-либо записи.VBA: как сохранить возвращаемое значение хранимой процедуры
В коде 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;
Если бы я мог получить любую помощь в получении части чека, если зр возвращается любой ценности, это было бы здорово.
спасибо.
Эта процедура выглядит так, как будто она возвращает строки, так что вы пытались присвоить ADO Recordset возвращаемое значение 'Execute'? 'Set rs = ADOQD.Execute()' Затем проверьте для 'rs.EOF' и действуйте соответственно. –
У меня есть, и я получаю взамен -1. Я обновляю свой код vb, чтобы вы могли видеть, что я пробовал, ожидая комментариев, рекомендаций. –
Не используйте 'Recordcount' (который действительно работает только с определенными типами курсоров), чтобы определить, есть ли записи:' ADORS.EOF' будет True, если ничего не было возвращено –