Parámetros

Parámetros.
De una serie de campos en una consulta algunos son la media de otros campos pero al ejecutar la consulta sale como si quisiera introducir parámetros. Cancelo. Y se ejecuta normalmente monstrandome correctamente las medias solicitadas. Pero después en un informe, al ejecutarlo me vuelve a pedir los parámetros y al cancelar estos datos salen en blanco y no calcula la media. El problema es que lo toma como parámetros y no lo son. No se porque no salen. O porque me pide su valor como si fuera un parámetro.

2 Respuestas

Respuesta
1
Te pide introducir el valor del parámetro porque hay algo en la sintaxos de la consulta que la interfaz no entiende. Revisa las expresiones para localizar este error y todo funcionará bien.
Respuesta
1
¿Me podrías enviar el texto SQL de la consulta?
SELECT ALUMNOS.DNIALUMNO, ALUMNOS.APELLIDOS, Avg([PRAC-CUESTIONARIOS].CALIFICACION) AS [Media cuestionarios], Avg([PRAC-INFORMES].CALIFICACION) AS [media informes], ([media informes]+[media cuestionarios])/2 AS [Media practicas], PRACTICAS.CALIFICACION AS [Practicas final], TEORIA.CALIFGLOBAL AS [Global teoria], (15*[Practicas final]+85*[califglobal])/100 AS [Media final], TEORIA.CALIFFINAL AS [CALIFICACION FINAL]
FROM (((ALUMNOS INNER JOIN [PRAC-CUESTIONARIOS] ON ALUMNOS.DNIALUMNO = [PRAC-CUESTIONARIOS].DNIALUMNO) INNER JOIN [PRAC-INFORMES] ON ALUMNOS.DNIALUMNO = [PRAC-INFORMES].DNIALUMNO) INNER JOIN PRACTICAS ON ALUMNOS.DNIALUMNO = PRACTICAS.DNIALUMNO) INNER JOIN TEORIA ON ALUMNOS.DNIALUMNO = TEORIA.DNIALUMNO
GROUP BY ALUMNOS.DNIALUMNO, ALUMNOS.APELLIDOS, ([media informes]+[media cuestionarios])/2, PRACTICAS.CALIFICACION, TEORIA.CALIFGLOBAL, (15*[Practicas final]+85*[califglobal])/100, TEORIA.CALIFFINAL, [PRAC-INFORMES].IDASIGNATURA, [PRAC-INFORMES].IDCURSO, [PRAC-CUESTIONARIOS].IDASIGNATURA, [PRAC-CUESTIONARIOS].IDCURSO, TEORIA.IDASIGNATURA, TEORIA.IDCURSO, TEORIA.IDCONVOCATORIA, PRACTICAS.IDASIGNATURA, PRACTICAS.IDCURSO
HAVING ((([PRAC-INFORMES].IDASIGNATURA)=[Formularios]![Formulario13]![Cuadro combinado3]) AND (([PRAC-INFORMES].IDCURSO)=[Formularios]![Formulario13]![Cuadro combinado1]) AND (([PRAC-CUESTIONARIOS].IDASIGNATURA)=[Formularios]![Formulario13]![Cuadro combinado3]) AND (([PRAC-CUESTIONARIOS].IDCURSO)=[Formularios]![Formulario13]![Cuadro combinado1]) AND ((TEORIA.IDASIGNATURA)=[Formularios]![Formulario13]![Cuadro combinado3]) AND ((TEORIA.IDCURSO)=[Formularios]![Formulario13]![Cuadro combinado1]) AND ((TEORIA.IDCONVOCATORIA)=[Formularios]![Formulario13]![Cuadro combinado5]) AND ((PRACTICAS.IDASIGNATURA)=[Formularios]![Formulario13]![Cuadro combinado3]) AND ((PRACTICAS.IDCURSO)=[Formularios]![Formulario13]![Cuadro combinado1]));
He comprobado que el fallo esta en el campo media de practicas. Que lo calculo usando otros dos campos de la consulta.
([media informes]+[media cuestionarios])/2 AS [Media practicas]
Los toma como parámetros en vez de campos de la misma consulta. ¿Cómo puedo solucionarlo?
Viendo la consulta se me ocurren algunas cosas:
1º Las tablas PRAC-CUESTIONARIOS y PRAC-INFORMES, ¿están bien escritas? En su defecto los campos CALIFICACIÓN ¿es correcto?
2º ¿Estás abriendo la consulta con los formularios correspondientes abiertos? Lo digo por los formularios del HAVING, si no están abiertos o los controles no son correctos no te funcionará.
Esta suele ser la razón por la que pasa esto en la mayoría de los casos. Que los formularios no están abiertos o que los controles a los que llamas en el WHERE (en este caso en el HAVING al estar agrupando) no están bien escritos o no los localiza por lo que sea. Mira esto que seguro que lo encuentras por ahí. Si no me vuelves a escribir.
[email protected]
Lo que no tengo muy claro es q
Esos controles son únicos de la consulta no están en un formulario. Cuando hago un formulario de la consulta si. Pero el fallo ya me sale al ejecutar la consulta.
Saludos
Estos campos los creo en la consulta para las operaciones que necesito. Hallar las medias. ¿Se te ocurre alguna forma de solucionar el problema?
Cuando me ha pasado lo mismo que a ti ha sido porque estaba haciendo referencia a controles de un formulario que en ese caso no estaba abierto. Intenta pasar la consulta con parámetros, defines una variable como querydef (dim q as querydefs) luego le asignas la consulta indicándole parámetros en vez de controles del formulario directamente, y le pasas los controles a los parámetros (q.parameter["parámetro"]=control_del_formulario). También puedes generar la consulta en visual basic y luego pasársela al informe a través de la propiedad sql o rowsource. Ya no se me ocurren más formas de arreglarlo. Si quieres te envío un ejemplo de ambas, pues he utilizado ambas en varias ocasiones. De querer los ejemplos dime tu email y te lo mando.
Precisamente, estos campos dependen al final de controles de un formulario.
Me parece buena idea. Mi dirección de hotmail es [email protected]
"Cuando tú cargas una consulta en el WHERE o en el HAVING con campos de un formulario el formulario en cuestión tiene que estar abierto, si no el jet no sabe qué son esas variables. "
eso lo se, pero es que no es un formulario es una consulta.
Yo pienso que el problema es que intento hacer operaciones con campos que no están en ninguna tabla.
Se me ocurre mandarte la base de datos y lo compruebes tu.
Si tienes messenger te lo mando por ahí y te explico mejor
[email protected]
en la consulta:
Calculo media de un campo
Calculo media de otro campo
Y cuando calculo la media de estos dos anteriores es cuando la consulta me pide parámetros. Como si no reconociera los campos de la consulta
([media informes]+[media cuestionarios])/2 AS [Media practicas]
Los ejemplos que me has puesto no se aquí si me pueden ser de utilidad.
Te lo puedo poner aquí:
El primer ejemplo con querydefs:
Dim q As QueryDef
' Facturas
Set q = CurrentDb.QueryDefs("Eliminar Liquidación (1/5)")
q.Parameters("pidcentro") = Idcentro
q.Parameters("pcodemb") = CodEmb
q.Parameters("pnumliqui") = NumLiqui
q.Execute dbFailOnError
q.Close
Los parámetros que van entre comillas en la consulta se ponen con corchetes, por ejemplo "pidcentro" en la consulta será [pidcentro].
La otra manera que te decía era construyendo la consulta en tiempo de ejecución y mandándosela al informe. La consulta tiene que ser una cadena de caracteres, por ejemplo cadena="SELECT * FROM CLIENTES" y luego lo asignas al informe:
dim informe as Report_nombredelinforme ' tiene que ir así con el report_ delante
informe.recordsource = cadena
Docmd. Openreport "nombredelinforme" 'para abrir el informe.
Y ahora te explico lo otro. Cuando tú cargas una consulta en el WHERE o en el HAVING con campos de un formulario el formulario en cuestión tiene que estar abierto, si no el jet no sabe qué son esas variables.
Si tienes alguna duda más aquí estoy.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas