2012-04-20 52 views
4

我在Excel 2007中有一個用戶表單,它使用存儲過程將數據寫入SQL Server 2008的表中。如何將VBA中的值傳遞給SQL Server 2008中的表變量?

插入的行然後獲得我報告給VBA的標識。然後,我使用這個數字將多行數據填充到另一個表中。

但是,而不是存儲過程先執行,然後寫入另一個表中,我希望有存儲過程執行這兩件事情。

問題是,其他表的條目大於一行,並且從VBA發送到SQL的參數只能包含一個值。

所以,我相信我需要在SQL中創建一個表變量。但是,如何將VBA中的值傳遞給SQL中的表變量?請記住,一切都應該在一個存儲過程中完成。這是我迄今爲止所擁有的。

感謝您的幫助!

--SQL Stored Procedure 
ALTER procedure [dbo].[Audit_InsertAuditFinding] 

@AuditRID as int 
,@EnteredBy as varchar(10) 
,@AuditItemNumber as int 
,@AuditFindingShort as varchar(50) 
,@AuditFindingLong as varchar(500) 
,@AuditDocsSaved as bit 
,@AuditIncident as int output 

as 
BEGIN 
SET NOCOUNT ON 
Insert Into Audit_Findings 
Values (@AuditRID,@EnteredBy,GETDATE(),@AuditItemNumber,@AuditFindingShort,@AuditFindingLong,@AuditDocsSaved) 

declare @AuditFindingNumber as int 
select @AuditFindingNumber = MAX(@@IDENTITY) 

select @AuditIncident = @AuditFindingNumber 
END 

這是我的VBA代碼到目前爲止。

--VBA Code 
cnn.CursorLocation = adUseClient 
cmd.ActiveConnection = cnn 
cmd.CommandType = adCmdStoredProc 
cmd.CommandText = "InternalReporting.dbo.Audit_InsertAuditFinding" 
cmd.NamedParameters = True 
Set prm = cmd.CreateParameter("@AuditRID", adInteger, adParamInput, 50, Audit_Topic.Value * 1) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@EnteredBy", adVarWChar, adParamInput, 10, Environ("UserName")) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@AuditItemNumber", adInteger, adParamInput, 10, Audit_ItemNumber.Value * 1) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@AuditFindingShort", adVarWChar, adParamInput, 50, Audit_ShortDescr.Value) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@AuditFindingLong", adVarWChar, adParamInput, 500, Audit_LongDescr.Value) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@AuditDocsSaved", adVarWChar, adParamInput, 500, Doc_Saved) 
cmd.Parameters.Append prm 
Set prm = cmd.CreateParameter("@AuditIncident", adVarWChar, adParamOutput, 10, Incident_Number.Value) 
cmd.Parameters.Append prm 

cmd.Execute 

Incident_Number.Value = cmd.Parameters("@AuditIncident") * 1 
SQL_String = "Delete from InternalReporting.dbo.Audit_Findings_Notifications where Audit_Incident = " & Incident_Number.Value * 1 

rst.Open SQL_String, cnn, adOpenStatic 
    Set rst = Nothing 

    With AUD_02_Item_Mgmt.Notify_Overview 
    For I = 1 To .ListCount 
     SQL_String = "Insert Into InternalReporting.dbo.Audit_Findings_Notifications " & _ 
        "Values (" & Incident_Number.Value & ",'" & .List(I - 1, 0) & _ 
        "','" & .List(I - 1, 2) & "')" 
     rst.Open SQL_String, cnn, adOpenStatic 
     Set rst = Nothing 
    Next I 
End With` 
+0

不知道你在做什麼,但我注意到你的ADO參數中定義的數據類型與Stored Proc參數不同。我在過去遇到過這樣的問題,所以要注意一些事情(如果它不是已經導致你的問題)。這可能有所幫助:http://www.w3schools.com/ado/ado_datatypes.asp – markblandford 2012-04-24 10:44:06

+0

嘿,是的,那可能是。我會協調它們,但我怎樣才能將vba中的多個值傳遞給SQL中的表變量。我不知道從哪裏開始。 – Daniel 2012-04-27 00:41:29

回答

1

我不認爲這是可能的正常/經典ADO,因爲沒有表變量數據類型。

另一種方法是構建XML數據字符串,然後將其解析到存儲過程中。

相關問題