Estados preparados de MS Access

¿Es posible ejecutar una instrucción preparada en MS Access en una tabla local en VBA de esta manera?

UPDATE part SET part_description=? WHERE part_id=? 

¿Si es así, Cómo se hace?

 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 

Ese ejemplo usó un QueryDef nuevo, sin guardar. Si tiene una consulta de parámetro guardada, puede usarla sustituyendo esta línea por la línea CreateQueryDef :

 Set qdf = db.QueryDefs("YourQueryName") 

De cualquier manera, puede referirse a parámetros individuales por sus nombres como yo lo hice, o por sus posiciones en la statement de SQL … así que esto funcionará igual que arriba:

 .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 lo anota Gord a continuación, puede usar la “notación de Bang” con el nombre del parámetro como !which_id , que es más conciso que .Parameters("which_id")