Как получить выходное значение из хранимой процедуры через сквозной запрос DAO

Я конвертирую ADP в ACCDB (таблицы / представления, связанные с SQL Server), и мне очень повезло с пропущенными запросами DAO. Одна область, где я застреваю, заключается в извлечении параметра OUTPUT из хранимой процедуры.

SP имеет следующие параметры:

(@IType int, @RetVal bit OUTPUT) 

и, говоря просто, следующая логика обработки

 IF @IType = 1 SET @RetVal = (SELECT ... . . . 

Никакие записи не возвращаются. Все, что требуется процедуре доступа VBA, это RetVal.

Я искал в Интернете, и решения, как правило, направлены на запись значения в таблицу или использование ADODB.

Я действительно хочу избежать изменения хранимой процедуры, так как изменение должно быть распространено на несколько баз данных.

Кроме того, было бы неплохо придерживаться пропусков DAO, поскольку я уже начал этот путь.

Есть ли способ достичь этого?

Да, вы можете создать сквозной запрос, который использует анонимный блок кода для извлечения параметра OUTPUT. Для хранимой процедуры

 CREATE PROCEDURE [dbo].[IsOne] @IType INT = 0, @RetVal BIT OUTPUT AS BEGIN SET NOCOUNT ON; IF @IType = 1 SET @RetVal = 1; ELSE SET @RetVal = 0; END 

вы можете использовать код VBA следующим образом:

 Option Compare Database Option Explicit Sub ptqTest() Dim cdb As DAO.Database Set cdb = CurrentDb Dim ptq As DAO.QueryDef Set ptq = cdb.CreateQueryDef("") ' temporary pass-through query ptq.Connect = "ODBC;DSN=SQLmyDb" ptq.ReturnsRecords = True ptq.SQL = _ "DECLARE @rv BIT;" & _ "EXEC dbo.IsOne @IType = 3, @RetVal = @rv OUTPUT;" & _ "SELECT @rv;" Dim rs As DAO.Recordset Set rs = ptq.OpenRecordset ' BIT value 0 will map to False in this case Debug.Print "stored procedure returned " & rs(0) rs.Close Set rs = Nothing Set ptq = Nothing Set cdb = Nothing End Sub 
Давайте будем гением компьютера.