2017-09-07 6 views
1

ADP를 ACCDB (SQL Server에 연결된 테이블/뷰)로 변환하고 DAO 통과 쿼리에 매우 도움이되었습니다. 내가 갇혀있는 한 영역은 저장 프로 시저에서 OUTPUT 매개 변수를 검색하는 것입니다.DAO 통과 쿼리를 통해 저장 프로 시저에서 출력 값을 검색하는 방법

SP에서 단순히

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

레코드가 반환되는 다음 처리 로직 말하기 다음 파라미터

(@IType int, @RetVal bit OUTPUT) 

및을 갖는다. Access VBA 프로 시저에서 필요한 것은 모두 RetVal입니다.

나는 웹을 검색했으며 솔루션은 테이블에 값을 쓰거나 ADODB를 사용하는 경향이있다.

변경 사항이 여러 데이터베이스에 전파되어야하므로 저장된 proc 파일을 수정하지 않으려합니다.

또한 이미 경로를 시작한 이후로 DAO 패스 스루를 사용하는 것이 좋습니다.

이것을 달성 할 수있는 방법이 있습니까?

답변

2

예, 익명 코드 블록을 사용하여 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 
+0

이 절대적으로 속임수를 썼는지! 나는 레코드 세트를 리턴 한 솔루션에 눈을 감았을 것이라고 생각한다. 이제 우리는 SP를 건드리지 않고 요청시 레코드 세트를 생성 할 것입니다. 매우 영리한. 저는 빠른 응답과 간결한 예를 매우 감사드립니다. – UhClem

+1

나는 DAO로 할 수 없다고 주장한 웹 사이트를 적어도 두 곳 이상 발견했다는 것을 인정할 것이다. 사실이 아닙니다. 여러분! – UhClem