我試圖從Access 2013 VBA執行過程後從SQL Server 2008中的存儲過程獲取輸出變量(新標識列)。我不完全理解所有adodb的東西,並且我嘗試了很多來自不同文章的東西,但都無濟於事。下面是我與它現在在哪裏?從Access中的SQL Server存儲過程使用輸出參數
存儲過程:
PROCEDURE [proc_NewClient]
@Type INT,
@PhoneIntakeID INT,
@ClientID INT = NULL,
@NewPSID INT = null OUTPUT (2 possible ways to call the proc, one does not produce an output variable)
INSERT INTO tblClientDetails (ClientID, PhoneIntakeID, Client_Status)
VALUES (@ClientID, @PhoneIntakeID, 'Applicant')
DECLARE @NewClientDetailID int
SELECT @NewClientDetailID = SCOPE_IDENTITY()
INSERT INTO tblPS_Psychosocial (ClientDetailID, Client)
VALUES (@NewClientDetailID, @ClientID)
SELECT @NewPSID = SCOPE_IDENTITY()
INSERT INTO tblPS_AbuseHistory (PsychosocialID)
VALUES (@NewPSID)
INSERT INTO tblPS_FamilyHistory(PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_FinancialHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_LegalHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_MedicalHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_PsychiatricHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_SocialHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_SpiritualHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_SubstanceHistory (PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblVocAssessment(ClientDetailID) VALUES (@NewClientDetailID)
而且從形式我有:
Dim cnn As ADODB.Connection
Dim cmd As New ADODB.Command, rs As New ADODB.Recordset, param1 As New ADODB.Parameter, param2 As New ADODB.Parameter, param3 As New ADODB.Parameter, param4 As New ADODB.Parameter
Set cnn = New ADODB.Connection
cnn.ConnectionString = "DRIVER=SQL Server;SERVER=SRV-DB01;DATABASE=TWHClientMgmt;Trusted_Connection=Yes"
cnn.Open cnn.ConnectionString
Set cmd = New ADODB.Command
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "[THEWOMENSHOME\jboyd].proc_NewClient"
Set param1 = cmd.CreateParameter("@Type", adinteger, adparamInput, , 2)
cmd.Parameters.Append param1
Set param2 = cmd.CreateParameter("@PhoneIntakeID", adinteger, adparamInput, , Me.PhoneIntakeID)
cmd.Parameters.Append param2
Set param3 = cmd.CreateParameter("@ClientID", adinteger, adparamInput, , intNewID)
cmd.Parameters.Append param3
Set param4 = cmd.CreateParameter("@NewPSID", adinteger, adParamOutput)
cmd.Parameters.Append param4
rs.open cmd
至此代碼工作的新記錄生成等等。當我從SQL Server運行存儲過程時,它會返回正確的標識列號,但我嘗試了多種方法來引用VBA中的輸出,並始終以null結尾。我如何正確引用它?
而不是'rs.Open'嘗試'cmd.Execute',然後查看是否可以使用'cmd.Parameters(「@ NewPSID」)。Value'檢索輸出參數的值。 –
您還可以使用新的ID數據使SP返回記錄集,並使用新的ID數據在一行/一列中讀取此數據,並在傳遞查詢中使用select子句讀取此數據 –
@GordThompson謝謝!我曾嘗試過這種組合,但沒有參數上的.value,那就是票!它現在完美運行! –