¿Es posible pasar parámetros mediante programación en una consulta de actualización de Microsoft Access?
Tengo una consulta que es bastante grande, uniendo más de una docena de tablas, y quiero extraer registros basados en un campo id ( e. g.: between nStartID and nEndID
).
Creé dos parámetros y los probé como criterios y funcionan bien.
El problema es que necesito ejecutar una consulta insert desde esta consulta principal, y necesito los parámetros donde están, en la consulta principal. Por lo tanto, necesito pasar parámetros a ella programáticamente.
Cualquiera tiene una pista de cómo esto puede ser hecho?
Gracias.
4 answers
Acabo de probar esto y funciona en Access 2010.
Digamos 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 pide [startId] y [endID]. Eso funciona, por lo que guarda esa consulta como [MemberSubset].
Ahora se crea una consulta de ACTUALIZACIÓN basada en esa consulta:
UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
Ejecuta esa consulta interactivamente y nuevamente se le solicita [startId] y [endID] y funciona bien, por lo que la guarda como [MemberSubsetUpdate].
Puede ejecutar [MemberSubsetUpdate] desde el código VBA especificando los valores [startId] y [endID] como parámetros de [MemberSubsetUpdate], aunque en realidad sean parámetros de [MemberSubset]. Esos valores de parámetro "se filtran" hasta 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-18 10:26:22
Intente usar QueryDefs. Cree la consulta con parámetros. Entonces 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-02 15:21:50
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 una manera diferente, sin usar VBA, mediante el uso de una tabla que contiene los parámetros de consulta.
E. g: SELECCIONE a_table.a_field DE QueryParameters, a_table DONDE a_table.a_field ENTRE QueryParameters.a_field_min Y QueryParameters.a_field_max
Donde QueryParameters es una tabla con dos campos, a_field_min y a_field_max
Puede incluso se puede usar con GROUP BY, si incluye los campos de parámetros de consulta en la cláusula GROUP BY, y el PRIMER operador en los campos de parámetros en la cláusula HAVING.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 00:08:02
También puedes usar TempVars-note'!'la sintaxis es esencial
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-30 12:33:19