2010-07-26 7 views
2

이 작동이있는 테이블 반환 함수에서 ADODB 레코드를 만들려면 다음어떻게 명명 된 매개 변수

Dim rst As New ADODB.Recordset 
rst.Open "SELECT * FROM dbo.ftblTest(1,2,3)", CP.Connection, adOpenKeyset, adLockReadOnly 

그러나이 수행하는 더 좋은 것 : 나는 두 번째 방법 I을하려고하면

rst.Open "SELECT * FROM dbo.ftblTest(@Param1=1,@Param2=2,@Param3=3)", CP.Connection, adOpenKeyset, adLockReadOnly 

을 "ftblTest 함수에 매개 변수가 제공되지 않았습니다."

다중 문 테이블 반환 함수에 명명 된 매개 변수를 사용할 수 있습니까?

편집 1 : 예 올바른 SQL에 연결, 명령 개체

먼저 SQL

create function ftblTest (@Input int) 
RETURNS @Results TABLE (
    OutputField int 
) 
AS 
BEGIN 
INSERT INTO @Results SELECT @Input 
Return 
End 

가 (액세스 2003 ADP 내부에서 실행되는 일부 코드를 사용하여 추가 DB)

Public Sub test() 
    Dim rst As New ADODB.Recordset 
    Dim cmd As New ADODB.Command 

    'method 1 works 
    rst.Open "SELECT * FROM dbo.ftblTest(2)", CurrentProject.Connection, adOpenKeyset, adLockReadOnly 
    Debug.Print rst.Fields(0) 
    rst.Close 

    With cmd 
    .ActiveConnection = CurrentProject.Connection 
    .CommandType = adCmdTable 

    'method 2 works 
    .CommandText = "dbo.ftblTest(3)" 
    Set rst = cmd.Execute 
    Debug.Print rst.Fields(0) 

    'method 3 fails 
    .CreateParameter "@Input", adInteger, adParamInput, , 4 
    .CommandText = "dbo.ftblTest(@Input)" 
    Set rst = cmd.Execute 'error here:-2147217900 Must declare the scalar variable "@Input". 
    Debug.Print rst.Fields(0) 

    End With 
End Sub 

메서드 3에서 작동하도록 명명 된 매개 변수를 가져 옵니까?

편집 2 :이 여전히 작동하지 Parameters.Append

Public Sub test() 
    Dim rst As New ADODB.Recordset 
    Dim cmd As New ADODB.Command 
    Dim p As New ADODB.Parameter 

    With cmd 
    .ActiveConnection = CurrentProject.Connection 
    .CommandType = adCmdTable 

    'Parameter Append method fails 
    p = .CreateParameter("@Input", adInteger, adParamInput, , 4) 
    Debug.Print p.Name, p.Type = adInteger, p.Direction = adParamInput, p.SIZE, p.Value 'note that name not set! 
    With p 
     .Name = "@Input" 
     .Type = adInteger 
     .Direction = adParamInput 
     .SIZE = 4 'this shouldn't be needed 
     .Value = 4 
    End With 
    Debug.Print p.Name, p.Type = adInteger, p.Direction = adParamInput, p.SIZE, p.Value 'properties now set 
    .Parameters.Append p 
    .CommandText = "dbo.ftblTest(@Input)" 
    Set rst = cmd.Execute 'error here:-2147217900 Must declare the scalar variable "@Input". 
    Debug.Print rst.Fields(0) 

    End With 
End Sub 

를 사용하도록 수정 테스트 코드.

3 편집 : 나는 제안 매개 변수

을 만들에서 @를 제거하고 CommandText에 3 가지 방법을 시도하고 3 가지 오류가있어 :

.CommandText = "dbo.ftblTest" 

오류 : 매개 변수가 함수에 제공되지 않은를 'dbo.ftblTest'.

.CommandText = "dbo.ftblTest()" 

오류 : 프로 시저 또는 함수 dbo.ftblTest에 대한 인수가 충분하지 않습니다.

.CommandText = "dbo.ftblTest(Input)" 

오류 : "입력"은 인식 된 테이블 힌트 옵션이 아닙니다. 테이블 반환 함수 또는 CHANGETABLE 함수의 매개 변수로 사용하려는 경우 데이터베이스 호환성 모드가 90으로 설정되어 있는지 확인하십시오.

+0

http://www.w3schools.com/ado/met_comm_createparameter.asp – Fionnuala

답변

0

예, 테이블 함수에 매개 변수를 사용할 수 있습니다.

rst.Open "SELECT * FROM dbo.ftblTest(@Param1,@Param2,@Param3)", CP.Connection, adOpenKeyset, adLockReadOnly 

당신은 데이터베이스 연결 매개 변수를 추가하고 값을 설정 열기 전에.

+0

정확히 어떻게해야하는지 잘 모르겠습니다. 나는 나의 질문에 예제를 추가 할 것이다. –

+0

@Remou가 추가 한 링크를 확인하십시오. 매개 변수를 추가하는 방법에 대한 구문을 보여줍니다. – mrdenny

+0

그걸보고 있었는데 Parameters.Append 비트를 추가했지만 여전히 작동하지 않습니다. 위의 새로운 예제 코드를 참조하십시오. –

0

매개 변수의 이름에 @를 사용하지 말고 명령 텍스트에 이름별로 매개 변수를 나열하지 마십시오. 필자는 항상 저장 프로 시저를 사용하여이 작업을 수행 했으므로 paranethesis가 명령 텍스트의 처리 방법을 정확하게 모르겠습니다.

시도 :

.CreateParameter "입력", adInteger, adParamInput, 4

그리고 :

.CommandText = "dbo.ftblTest()"

또는 :

.CommandText = "dbo.ftblTest"

+0

@ from create 매개 변수를 제거하고 CommandText를 3 가지 방법으로 시도하여 3 가지 오류가 발생했습니다. .CommandText = "dbo.ftblTest" 오류 : 'dbo.ftblTest'함수에 대해 매개 변수가 제공되지 않았습니다. .CommandText = "dbo.ftblTest()" 오류 : 프로 시저 또는 함수 dbo.ftblTest에 제공된 인수 수가 충분하지 않습니다. .CommandText = "dbo.ftblTest (입력)" 오류 : "입력"이 인식 된 테이블 힌트 옵션이 아닙니다. 테이블 반환 함수 또는 CHANGETABLE 함수의 매개 변수로 사용하려는 경우 데이터베이스 호환성 모드가 90으로 설정되어 있는지 확인하십시오. –

관련 문제