-1

Access에서 새롭고 레코드 세트에 멈추었습니다. 올바른 연결 문자열을 사용하여 Access에서 프로 시저를 실행하고 있습니다. 프로 시저가 완벽하게 잘 실행 중입니다.액세스 레코드 세트의 SQL 프로 시저에서 반환 된 값을 가져와야합니다.

Set con = New ADODB.connection 
Set rs = New ADODB.Recordset 
con.Open "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    // Connection string. 
rs.Open "Exec [stored procedure] 'parameter' ", con, adOpenDynamic, adLockOptimistic 

SQL에서이 저장 프로시 저는 실패 및 성공 (프로 시저의 상태를 알려주는)에 따라 0과 1의 두 값을 반환합니다.

이제 내 질문은 사용자에게 상태를 표시 할 수 있도록 액세스시이 값을 가져 오는 방법입니다.

답변

1

저장 프로 시저가 실제로 0 또는 1이 될 하나의 값만 반환하는 것처럼 들립니다.이 값은 스칼라 값 (집합 또는 값 모음 대신 단일 값)이라고도합니다.

매개 변수를 저장 프로 시저에 전달해야하는 것처럼 보입니다. 이를 종종 매개 변수가있는 쿼리라고합니다. 잘 알고 있듯이 매개 변수를 사용하지 않는 저장 프로 시저를 작성할 수 있습니다.

Set con = New ADODB.connection 
Set rs = New ADODB.Recordset 
rs.CursorType = adOpenForwardOnly 
rs.LockType = adLockReadOnly 
con.Open "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" '// Connection string. 

Dim cmd as New ADODb.Command 
cmd.CommandTimeout = 5 
cmd.ActiveConnection = con 
cmd.CommandText = "SQL GOES HERE" 
cmd.CommandType = acCmdStoredProc 

Dim param 
Set param = cmd.CreateParameter("@productid", adInteger, adParamInput, 0, 0) 
cmd.Parameters.Append param 
cmd.Parameters("@productid") = 15 'Return the product with ProductID = 15 

Set rs = cmd.Execute 
'or use: 
'rs.Open cmd 
Debug.Print rs(0) 

rs.close 
Set rs = Nothing 
Set cmd = Nothing 
con.close 
Set con = Nothing 

Microsoft는이에 대한 기사가있다. VBScript를 사용하여 작성되었지만 VBA에 쉽게 적용 할 수 있습니다. http://support.microsoft.com/kb/200190

또한 SO에 체크 아웃 수 있습니다
How to access SQL Server scalar functions in MS Access VB

0

저장 프로 시저를 호출, 첫 번째 매개 변수는 반환 값입니다.

' Set up a return parameter. 
Set prm = .CreateParameter("Return", adInteger, adParamReturnValue) 
.Parameters.Append prm 
' Set up an input parameter. 
Set prm = .CreateParameter("Id", adInteger, adParamInput, , lid) 
.Parameters.Append prm 
' Set up an output parameter. 
Set prm = .CreateParameter("Output", adInteger, adParamOutput) 
.Parameters.Append prm 

' Execute command, and loop through recordset, printing out rows. 
.Execute , , adExecuteNoRecords 
If .Parameters("Return") = 0 Then 
    lid = Nz(.Parameters("Output").Value, 0) 
    If lid <> 0 Then AdoSingleId = True 
Else 
    lid = .Parameters("Return") 
End If