¿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.

Author: Gord Thompson, 2013-05-15

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
 55
Author: Gord Thompson,
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
 18
Author: Jessica,
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.

 4
Author: Nigel,
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 También puede utilizar TempVars - nota '!'la sintaxis es esencial

 1
Author: Dougie,
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