이 작동이있는 테이블 반환 함수에서 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으로 설정되어 있는지 확인하십시오.
http://www.w3schools.com/ado/met_comm_createparameter.asp – Fionnuala