2012-07-11 126 views
2

以下代碼返回一個硬編碼值的存儲過程。我需要允許74更改爲從組合框中選擇的任何內容。任何幫助是極大的讚賞。我在Access中使用傳遞查詢。使用參數的存儲過程

Private Sub ok_Click() 
    Dim objConnection As New ADODB.Connection  
    Dim objCom As ADODB.Command 
    Dim provStr As String 

    Set objCom = New ADODB.Command 

    objConnection.Provider = "sqloledb" 

    provStr = "Data Source=**;" & "Initial Catalog=IKB_QA;User Id=**;Password=**;" 

    objConnection.Open provStr 

    With objCom 
     .ActiveConnection = objConnection 
     .CommandText = "dbo.ix_spc_planogram_match 74" 
     .CommandType = adCmdStoredProc 

     .Execute 
    End With 

End Sub 

回答

2

以下代碼從form獲取參數並執行存儲過程。

Dim Cmd1 As ADODB.Command 
Dim lngRecordsAffected As Long 
Dim rs1 As ADODB.Recordset 
Dim intRecordCount As Integer 
'----- 
Dim cnnTemp As ADODB.Connection 
Set cnnTemp = New ADODB.Connection 
cnnTemp.ConnectionString = "DRIVER=SQL Server;SERVER=***;" & _ 
"Trusted_Connection=No;UID=***;PWD=***;" & _ 
"Initial Catalog=IKB_QA;" 
cnnTemp.ConnectionTimeout = 400 
'Open Connection 
cnnTemp.Open 
Set Cmd1 = New ADODB.Command 
Cmd1.ActiveConnection = cnnTemp 

'--- 

With Cmd1 
Dim localv As Integer 
Dim inputv 

localv = [Forms]![start]![Selection]![cat_code] 
.CommandText = "dbo.ix_spc_planogram_match " & inputv 
.CommandType = adCmdStoredProc 
Set inputv = Cmd1.CreateParameter("@catcode", 3, 1, 10000, localv) 
Cmd1.Parameters.Append inputv 
Set rs1 = Nothing 
Set rs1 = Cmd1.Execute 

localv = 0 
Do While Not rs1.EOF 

Debug.Print rs1.Fields.Item("POG_DBKEY").Value = "POG_DBKEY" 
Debug.Print rs1.Fields.Item("COMP_POG_DBKEY").Value = "COMP_POG_DBKEY" 
Debug.Print rs1.Fields.Item("CURR_SKU_CNT").Value = "CURR_SKU_CNT" 
Debug.Print rs1.Fields.Item("COMP_SKU_CNT").Value = "COMP_SKU_CNT" 
Debug.Print rs1.Fields.Item("SKU_TOTAL").Value = "SKU_TOTAL" 
Debug.Print rs1.Fields.Item("MATCHD").Value = "MATCHD" 
localv = localv + 1 

rs1.MoveNext 
Loop 
localv = localv 

rs1.Close 
Set rs1 = Nothing 
Set rs1 = Nothing 

End With 
End Sub 
0

你可以試試這個級聯:

更換您的語句:

.CommandText = "dbo.ix_spc_planogram_match 74" 

有:

.CommandText = "dbo.ix_spc_planogram_match " & yourComboBox.Text 

假設組合框的名字是yourComboBox

+2

不是.text,.text屬性僅在控件具有焦點時可用。默認屬性是.value,所以只要綁定列包含所需的值,就可以說'yourComboBox'。如果你必須的話,你可以明確地使用.value屬性,但是你不需要。 – Fionnuala 2012-07-11 18:22:17

1

你可以使用 命令對象的參數字段用於較簡潔的方法:

With objCom   
    .ActiveConnection = objConnection   
    .CommandText = "dbo.ix_spc_planogram_match"   
    .CommandType = adCmdStoredProc    

    .Parameters.Refresh 
    .Parameters(1).Value = ComboBox1.Value 

    .Execute  
End With