Trabajo con Access 2000. Voy por partes y con un poco de orden para poder explicarme bien. 1º Tengo una consulta de agrupación de registros parametrizada entre dos fechas , en la que un campo es la cuenta de la agrupación de registros. Los parámetros los coge de dos campos de texto en un formulario. (Esta consulta funciona perfectamente, por sí misma, cuando se ejecuta de la ventana base de datos). 2º Tengo otra consulta basada en todos sus campos en la primera que vuelve a hacer una agrupación de registros y tiene , entre otros, dos campos, uno de ellos es la suma del campo cuenta de la anterior consulta y otro es la cuenta de la nueva agrupación de registros. Esta consulta no está parametrizada. Sólo lo está la primera. (Esta consulta funciona perfectamente cuando se ejecuta desde la ventana base de datos) 3º Necesito usar la segunda consulta mediante código, tal como el siguiente. Dim Db As DAO.Database Dim rs As DAO.Recordset Dim qdf As DAO.QueryDef Set Db = CurrentDb Set qdf = Db.QueryDefs("1ª Consulta") 'Establezco los parametros de la 1º Consulta mediante código para normalizarlos desde VBA. qdf![Forms!frmPanelControl!txtFechaInicio] = Forms![frmPanelControl]! [txtFechaInicio] qdf![Forms!frmPanelControl!txtFechaFinal] = Forms![frmPanelControl]! [txtFechaFinal] Set rs = Db.OpenRecordset("2ª Consulta") (En esta linea anterior me da el código de error 3.061, faltan parametros, se esperaba 2) CUESTIONES: ¿Si la segunda consulta no está parametrizada , por qué me dice que faltan parámetros , cuando previamente se los he establecido a la primera y he comprobado que la querydef está bien definida y devuelve registros?. Aclaro, la segunda consulta no tiene parámetros por sí misma. ¿Como puedo expresar en lenguaje jet SQL la segunda consulta sin que existiese la primera ? Lo digo para hacerlo directamente sin tener que basarme en la primera consulta. O sea, mi problema es expresar un agrupamiento de un agrupamiento, con sus correspondientes campos calculados, mediante Jet SQL. Esta cuestión es por si no consigo solucionar la primera, ya que la primera consulta, con sus parámetros, me es necesaria para otros procesos RESPONDE JUAN M. AFAN DE RIBERA =============================== podrías probar de esta otra forma (bueno, me he saltado lo de Dim db as database -- set db=currentdb(), pero no creo que sea importante) Dim qdf As QueryDef Dim rst As Recordset Dim prm1 As Parameter Dim prm2 As Parameter Set qdf = CurrentDb.QueryDefs("2ª consulta") Set prm1 = qdf.Parameters(0) Set prm2 = qdf.Parameters(1) prm1 = Forms![frmPanelControl]![txtFechaInicio] prm2 = Forms![frmPanelControl]![txtFechaFinal] Set rst = qdf.OpenRecordset() ... ... rst.Close Set prm1 = Nothing Set prm2 = Nothing Set qdf = Nothing creo (es una suposición) que para la segunda consulta, la primera consulta se convierte en una subconsulta (joer, vaya galimatías), con lo cual los parámetros de la primera consulta pasan a formar parte de la segunda consulta (joer, este happy cada día está peor). No, en serio. He hecho una prueba creando una 1º consulta que pida 2 parámetros, y después una 2º consulta basada en la 1º, pero esta vez sin pedir parámetros. Después he ejecutado el código de arriba y no me ha dado ningún error. Naturalmente, las consultas eran poco complicadas, no como las tuyas, que parecen más complejas.