Access - Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

   
Vista:

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Carlos linkar79@gmail.com (3 intervenciones) el 30/08/2017 13:25:28
Buenos días,

Tengo una tabla en una base de datos con esta estructura:

Nombre // Apellidos // 1er pago // 2o pago // 3er pago // 4o pago // 5o pago // Fecha Máx // Próx Pago
Ejemplo1 - Ejemp1 - 01/02/17 - 03/04/17 - 05/06/17 - - 05/06/17 - 05/07/17
Ejemplo2 - Ejemp2 - 03/02/17 - 01/08/17 - - - 01/08/17 - 01/09/17
Ejemplo3 - Ejemp3 - 02/08/17 - - - - - 02/08/17 - 02/09/07

Las dos últimas columnas son las que quiero tener (Fecha Máx y Próx Pago) en la consulta que haga de esa tabla y para eso quiero usar en la Columna Fecha Máx una fórmula de Máximo que calcule mediante fórmula / expresión desde la columna 1er pago hasta la columna 5o pago y que el resultado sea la fecha máxima que esté escrita. Y para la columna Próx Pago, la fórmula / expresión sería Fecha Máx + 31 (que el resultado de esa fecha máxima le sume 31 días).
En Excel es muy fácil de hacer pero no veo la manera de cómo hacerlo en Access07. Realmente dicha tabla tiene más columnas con otros datos y más filas de más clientes pero puse esto como ejemplo para que vean sintetizadamente lo que tengo y necesito.

Me gustaría, a poder ser, que la solución fuera solo a través de una fórmula / expresión en una Consulta en Vista Diseño y no mediante formularios, VBA ni similares.... si es posible :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pancho

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Pancho (79 intervenciones) el 30/08/2017 17:31:22
Crear la siguiente vista

1
2
3
4
5
6
7
8
9
10
CREATE VIEW QRY_FECHAS_PAGOS AS
SELECT NOMBRE, APELLIDO, [1ER PAGO] AS FECHA_PAGO FROM MI_TABLA
UNION ALL
SELECT NOMBRE, APELLIDO, [2DO PAGO] AS FECHA_PAGO FROM MI_TABLA
UNION ALL
SELECT NOMBRE, APELLIDO, [3ER PAGO] AS FECHA_PAGO FROM MI_TABLA
UNION ALL
SELECT NOMBRE, APELLIDO, [4TO PAGO] AS FECHA_PAGO FROM MI_TABLA
UNION ALL
SELECT NOMBRE, APELLIDO, [5TO PAGO] AS FECHA_PAGO FROM MI_TABLA


luego en otra vista

1
2
3
4
SELECT NOMBRE, APELLIDO, [1ER PAGO], [2DO PAGO], [3ER PAGO]. [4TO PAGO], [5TO PAGO],
DMAX("FECHA_PAGO","QRY_FECHAS_PAGOS","NOMBRE = '" & NOMBRE & "' AND APELLIDO = '" & APELLIDO & "'") AS FECHA_MAX,
DMAX("FECHA_PAGO","QRY_FECHAS_PAGOS","NOMBRE = '" & NOMBRE & "' AND APELLIDO = '" & APELLIDO & "'") + 31 AS PROXIMO_PAGO
FROM MI_TABLA

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Carlos linkar79@gmail.com (3 intervenciones) el 31/08/2017 12:58:34
Gracias Pancho por la respuesta!!
El tema es que he puesto tal y como me lo pusiste en el VBA de esa base de datos pero me da error y no me ejecuta nada...
He llamado a la tabla "MI_TABLA" como pusiste y he creado las columnas que has puesto pero no me sale informe ni me sale formulario con las columnas nuevas de "FECHA_MAX" y "PROXIMO_PAGO".
¿¿Habría la posibilidad que me mandaras el ejemplo hecho en una base y así poderla pegarla en la mía??
De nuevo, muchísimas gracias por tu respuesta!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Anonimo (683 intervenciones) el 31/08/2017 02:19:52
Ese diseño de tabla no se ajusta a un entorno de bases de datos relacionales, se asemeja a la estructura plana de Excel o Word....

Una tabla de pagos (o plazos) con el ID del registro principal (para relacionarlo) y la fecha (a mayores el importe y datos de ese plazo concreto, pues los datos comunes deberían estar en la tabla principal) seria la construcción idónea.

En esa tabla estarían TODOS los plazos (pagos) de todos los registros, se les diferenciaría por el ID que lo relaciona con su registro 'padre' y ya normalizada la tabla habría tantos pagos (un pago/plazo = registro) como se necesitasen: entre uno y .... los que se sean necesarios, no solo cinco.

La fecha indicaría el orden (primero, segundo ....) y sobre ella se puede aplicar la función de dominio DMax (entre otras cosas)

Por ejemplo:
.- La fecha máxima seria la ultima o la mayor de las de ese ID en particular (se cumple para todos los pagos de cualquier cliente, esto es del registro asociado en la tabla 'padre')

.- 'el próximo pago' (si todo es como tiene que ser) será el que cumpla la condición de ser el menor de los que tengan la fecha superior (o igual) a la fecha actual (la del sistema).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Carlos (3 intervenciones) el 31/08/2017 13:06:44
Buenos días!
Sí, perdona pero es una estructura sencilla porque tampoco es una base de datos muy elaborada. Solo para tener un fichero de clientes y controlar los pagos que realizan y algunos informes con determinados campos rellenados. No tiene nada de VBA hecho sobre ella. Solo relaciones simples, formularios y alguna que otra Macro.
El tema es que al ya tener varias cosas hechas en ella se me es complicadísimo modificarla y poner ahora los pagos en otro lado (los voy introduciendo en un formulario -sin subformulario en él- y claro, el hacerlo en otra tabla me genera más problemas).
Igualmente te agradezco mucho tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Fórmula Dmax en una consulta Access07 sobre una fila (no sobre columna)

Publicado por Anonimo (683 intervenciones) el 01/09/2017 07:21:41
Los problemas que se generan por un inadecuado diseño (si no se corrigen) 'matan' la aplicación porque le impiden crecer (para muestra lo que te esta pasando).

El que 'sea pequeña' no es una escusa para hacerlo ....(digamos que regular, porque 'mal' no deja buen eco) y normalmente tras el primer intento (ya se sabe algo mas y se tiene claro lo que se desea) se suele tomar como referencia lo bueno y lo malo de lo actual para comenzar algo nuevo desde algo mas que cero y hacerlo ... como se debería haber hecho desde su primer diseño.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar