¿Es posible pasar parámetros programáticamente en una consulta de actualización de Microsoft Access?

Tengo una consulta que es bastante grande, que une más de una docena de tablas, y quiero retirar los registros basados ​​en un campo de identificación ( por ejemplo : between nStartID and nEndID ).

Creé dos parámetros y los probé como criterios y funcionan bien.

El problema es que necesito ejecutar una consulta de inserción desde esta consulta principal, y necesito los parámetros donde están, en la consulta principal. Entonces, necesito pasar parámetros programáticamente.

¿Alguien tiene una pista sobre cómo se puede hacer esto?

Gracias.

Acabo de probar esto y funciona en Access 2010.

Supongamos que tiene una consulta SELECT con parámetros:

 PARAMETERS startID Long, endID Long; SELECT Members.* FROM Members WHERE (((Members.memberID) Between [startID] And [endID])); 

Ejecuta esa consulta de forma interactiva y le solicita [ID inicial] y [ID terminal]. Eso funciona, por lo que guarda esa consulta como [MemberSubset].

Ahora crea una consulta UPDATE basada en esa consulta:

 UPDATE Members SET Members.age = [age]+1 WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset]))); 

Ejecuta esa consulta de forma interactiva y nuevamente se le solicita [ID de inicio] y [ID de destino] y funciona bien, por lo que la guarda como [Actualización de Miembro de Subida].

Puede ejecutar [MemberSubsetUpdate] desde el código VBA especificando los valores [startID] y [endID] como parámetros en [MemberSubsetUpdate], aunque en realidad sean parámetros de [MemberSubset]. Esos valores de parámetro “se filtran” hacia donde se necesitan, y la consulta funciona sin intervención humana:

 Sub paramTest() Dim qdf As DAO.QueryDef Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate") qdf!startID = 1 ' specify qdf!endID = 2 ' parameters qdf.Execute Set qdf = Nothing End Sub 

Intenta usar QueryDefs. Crea la consulta con parámetros. Luego usa algo como esto:

 Dim dbs As DAO.Database Dim qdf As DAO.QueryDef Set dbs = CurrentDb Set qdf = dbs.QueryDefs("Your Query Name") qdf.Parameters("Parameter 1").Value = "Parameter Value" qdf.Parameters("Parameter 2").Value = "Parameter Value" qdf.Execute qdf.Close Set qdf = Nothing Set dbs = Nothing 

¡Muchas gracias por la información sobre el uso de la colección QueryDefs! Me he estado preguntando sobre esto por un tiempo.

Lo hice de otra manera, sin usar VBA, usando una tabla que contiene los parámetros de consulta.

Ejemplo: SELECCIONE a_table.a_field FROM QueryParameters, a_table WHERE a_table.a_field BETWEEN QueryParameters.a_field_min AND QueryParameters.a_field_max

Donde QueryParameters es una tabla con dos campos, a_field_min y a_field_max

Incluso se puede usar con GROUP BY, si incluye los campos de parámetros de consulta en la cláusula GROUP BY, y el operador FIRST en los campos de parámetros en la cláusula HAVING.

También puedes usar TempVars – nota ‘!’ la syntax es esencial También puedes usar TempVars - nota '!' la sintaxis es esencial