2011-07-04 13 views
10

¿Es posible ejecutar una declaración preparada en MS Access en una tabla local en VBA así:MS Access prepara declaraciones

UPDATE part SET part_description=? WHERE part_id=? 

Si es así ¿cómo se hace?

Respuesta

15
Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim strSql As String 
Set db = CurrentDb 
strSql = "UPDATE Month_Totals Set item_date = [which_date]" & _ 
    " WHERE id = [which_id];" 
Debug.Print strSql 
Set qdf = db.CreateQueryDef(vbNullString, strSql) 
With qdf 
    .Parameters("which_date").Value = Date() 
    .Parameters("which_id").Value = 1 
    .Execute dbFailOnError 
End With 

Este ejemplo utiliza un nuevo y sin guardar QueryDef. Si usted tiene una consulta de parámetros guardado, puede utilizarlo en su lugar mediante la sustitución de esta línea para la línea CreateQueryDef:

Set qdf = db.QueryDefs("YourQueryName") 

De cualquier manera, a continuación, puede hacer referencia a los parámetros individuales por sus nombres como yo, o por sus posiciones en la instrucción SQL ... así que esto va a funcionar igual que el anterior:

.Parameters(0).Value = Date() 
.Parameters(1).Value = 1 

notas adicionales:

  1. .Value es la propiedad predeterminada para un Parameter, por lo que incluirlo aquí no es estrictamente obligatorio. Por otro lado, no está de más ser explícito.
  2. Como Gord se señala más adelante, puede utilizar "Explosión notación" con el nombre del parámetro como !which_id, que es más conciso que .Parameters("which_id")
+3

"notación de la explosión" también trabaja para establecer los valores de los parámetros, por ejemplo, 'QDF! which_id = 1' –