Parámetros del objeto Command
Se aplica a: Access 2013, Office 2013
En el siguiente ejemplo se muestra un uso más interesante para el objeto Command , en el que se ha modificado el texto del comando SQL para que sea parametrizado. Esto permite reutilizar el comando, pasando un valor diferente para el parámetro cada vez. Dado que la propiedad Prepared del objeto Command se establece en True, ADO requerirá que el proveedor compile el comando especificado en CommandText antes de ejecutarlo por primera vez. También conservará el comando compilado en memoria. Esto ralentiza ligeramente la ejecución del comando la primera vez que se ejecuta debido a la sobrecarga necesaria para prepararlo, pero da como resultado una ganancia de rendimiento cada vez que se llama al comando a partir de entonces. Por lo tanto, los comandos solo se deben preparar si se usarán más de una vez.
'BeginManualParamCmd
On Error GoTo ErrHandler:
Dim objConn As New ADODB.Connection
Dim objCmd As New ADODB.Command
Dim objParm1 As New ADODB.Parameter
Dim objRs As New ADODB.Recordset
' Set the CommandText as a parameterized SQL query.
objCmd.CommandText = "SELECT OrderID, OrderDate, " & _
"RequiredDate, ShippedDate " & _
"FROM Orders " & _
"WHERE CustomerID = ? " & _
"ORDER BY OrderID"
objCmd.CommandType = adCmdText
' Prepare command since we will be executing it more than once.
objCmd.Prepared = True
' Create new parameter for CustomerID. Initial value is ALFKI.
Set objParm1 = objCmd.CreateParameter("CustId", adChar, _
adParamInput, 5, "ALFKI")
objCmd.Parameters.Append objParm1
' Connect to the data source.
Set objConn = GetNewConnection
objCmd.ActiveConnection = objConn
' Execute once and display...
Set objRs = objCmd.Execute
Debug.Print objParm1.Value
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
' ...then set new param value, re-execute command, and display.
objCmd("CustId") = "CACTU"
Set objRs = objCmd.Execute
Debug.Print objParm1.Value
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
'clean up
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing
Set objCmd = Nothing
Set objParm1 = Nothing
Exit Sub
ErrHandler:
'clean up
If objRs.State = adStateOpen Then
objRs.Close
End If
If objConn.State = adStateOpen Then
objConn.Close
End If
Set objRs = Nothing
Set objConn = Nothing
Set objCmd = Nothing
Set objParm1 = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
'EndManualParamCmd
No todos los proveedores admiten comandos preparados. Si el proveedor no admite la preparación de comandos, podría devolver un error en cuanto esta propiedad se estableciese en True. Si no devuelve un error, omite la solicitud de preparar el comando y establece la propiedad Prepared en False.