2012-07-11 3 views
2

Le code suivant renvoie une procédure stockée avec une valeur fixe codée. Je dois permettre à 74 de passer à ce qui est sélectionné dans une liste déroulante. Toute aide est grandement appréciée. J'utilise une requête de passage dans Access.Procédure stockée à l'aide des paramètres

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 

Répondre

2

Le code suivant prend le paramètre de la forme et exécute la procédure stockée.

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

Vous pouvez essayer cette concaténation:

remplacer votre déclaration:

.CommandText = "dbo.ix_spc_planogram_match 74" 

avec:

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

En supposant que le nom de zone de liste déroulante est yourComboBox

+2

Not .text, la propriété .text n'est disponible que lorsque le contrôle a le focus. La propriété par défaut est .value, donc vous pouvez simplement dire 'yourComboBox', tant que la colonne liée contient la valeur requise. Si vous le devez, vous pouvez utiliser explicitement la propriété .value, mais vous n'êtes pas obligé de le faire. – Fionnuala

1

Vous pouvez utilisation les champs de paramètres de l'objet de commande pour une approche plus propre:

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

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

    .Execute  
End With 
Questions connexes