** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Problema con formularios
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Problema con formularios

 Responder Responder
Autor
Mensaje
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Problema con formularios
    Enviado: 13/Mayo/2019 a las 14:13
Buenas tardes amigos, tengo dos problemillas con formularios que no consigo hacer lo que quiero puede que sea una tontería pero estoy atascada y no le veo la punta.
Primer problema:
Tengo un formulario que contiene botones con los meses del año, cuando pulso un botón por ejemplo enero me abre otro formulario donde se muestra el mes y el año elegidos en el anterior y tiene un subformulario que he hecho a través de una consulta de access con el siguiente codigo sql:

SELECT Clientes.Cod, Clientes.Nom, REVISION.Terminado, REVISION.Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12
FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente
WHERE (((Clientes.Obs11)=True)) OR (((Clientes.Obs12)=True));

El problema es que no sé como indicarle al subformulario que me muestre todos los clientes (tengan o no tenga revisión creada) y de los que sí tengan revisión que aparezcan los del mes seleccionado.

Segundo problema:
En el subformulario que muestra todos los clientes tengan o no tengan revisión, he creado un botón para que si tiene revisión me abra el formulario para ver qué se le ha hecho a ese cliente. he puesto el siguiente código asignado al botón:

    stDocName = "Revision"
    stLinkCriteria = "[CodCliente]=" & "'" & Me![Cod] & "'" & "&" & "[Mes]=" & "'" & Me![Mes] & "'" & "&" & "[Año]=" & Me![Año]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

pero me abre el formulario en blanco no consigo que me muestre el registro que tiene el código de cliente, mes y año indicado en el criterio.

Luego ya me pelearé para que si pulso el botón sobre un cliente que todavía no tiene registro me abra el formulario creando un registro nuevo pero ahora mismo esto me está volviendo loca pues no encuentro el error, indicaros que codigo de cliente y mes es de tipo texto mientras que año es de tipo numerico.

Gracias

Eva
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5096
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 13/Mayo/2019 a las 14:40
Hola!

El primer problemas creo que se solucionaria con una consulta de unión. Mas o menos así:-

SELECT Clientes.Cod, Clientes.Nom, REVISION.Terminado, REVISION.Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12
FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente
WHERE (((Clientes.Obs11)=True));
UNION
SELECT Clientes.Cod, Clientes.Nom, REVISION.Terminado, REVISION.Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12
FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente
WHERE (((Clientes.Obs11)=True)) AND (((REVISION.Mes)=Forms![NombreFormulario]!Mes));


La segunda duda:-

stDocName = "Revision"
stLinkCriteria = "[CodCliente]= '" & Me![Cod] & "' And [Mes]= '" & Me![Mes] & "' And [Año]= " & Me![Año]
DoCmd.OpenForm stDocName, , , stLinkCriteria



Editado por mounir - 13/Mayo/2019 a las 14:42
Un Saludo.
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 11:20
Buenos días Mounir muchas gracias por tu pronta respuesta. El segundo problema me ha funcionado a la perfección, me hago un lío con lo ".
La primera no del todo. Te comento.
Al ejecutar la consulta como me has indicado me salen todos los registros que tiene la tabla REVISION  los de los clientes que no tienen registro aún. Te pongo ejemplo

codRev Cliente mes año Terminado
1 00000 mayo 2019
2 00001 (este cliente aún no tiene registros en revision

Cuando pulso el botón del mes de Enero me tendría que salir

codRev Cliente mes año Terminado
1 00000 (este cliente aunque tiene en mayo un registro no lo tiene en el mes de enero)
2 00001

Y me sale lo anterior y el registro que el cliente 000000 tiene en mayo junto con todos los clientes que no tengan registro en mayo me tendría que salir al pulsar el botón de Mayo 

pero pulse el botón del mes que sea me sale mayo en todos los meses.

Quizás es que no puede hacerse?.
Gracias

Eva
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5096
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 13:04
Hola!

Prueba así:

SELECT Cliente.Cod, Cliente.Nom, REVISION.Terminado, REVISION.Mes, REVISION.Año, Cliente.Obs11, Cliente.Obs12
FROM Cliente LEFT JOIN REVISION ON Cliente.Cod = REVISION.CodCliente
WHERE (((REVISION.Mes)<>"Mayo") AND ((Cliente.Obs11)=True)) OR (((Cliente.Obs12)=True));
UNION
SELECT Cliente.Cod, Cliente.Nom, REVISION.Terminado, REVISION.Mes, REVISION.Año, Cliente.Obs11, Cliente.Obs12
FROM Cliente LEFT JOIN REVISION ON Cliente.Cod = REVISION.CodCliente
WHERE (((REVISION.Mes)="Mayo") AND ((Cliente.Obs11)=True)) OR (((Cliente.Obs12)=True));
Un Saludo.
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 14:02
Hola de nuevo, gracias por tus esfuerzos pero no consigo que funcione. 
Estos son los registros de clientes que tengo

Cod Obs11 Obs12
000000 -1 0
000001 -1 0
000022 -1 0
000029 -1 0
000035 -1 0
000037 -1 0
000038 -1 0
000059 -1 0
000061 -1 0
000068 -1 0
000072 -1 0
000073 -1 0
000094 -1 0
000098 0 -1

Estos son los clientes que tienen partes de revisión creados

CodRevision CodCliente Obs11 Obs12 Mes Año FREVISION Terminado
1 000072 -1 0 mayo 2019 07/05/2019
2 000000 -1 0 mayo 2019 07/05/2019 No

He modificado la consulta que me has puesto para que coja el mes del formulario. Quedaría así:

SELECT REVISION.CodRevision,Clientes.Cod, REVISION.Terminado, REVISION.Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12
FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente
WHERE (((REVISION.Mes)<>Forms!ResultadoBusquedaRevision!MesBuscado) AND ((Clientes.Obs11)=True)) OR (((Clientes.Obs12)=True));
UNION 
SELECT REVISION.CodRevision,Clientes.Cod, REVISION.Terminado, REVISION.Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12
FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente
WHERE (((REVISION.Mes)=Forms!ResultadoBusquedaRevision!MesBuscado) AND ((Clientes.Obs11)=True)) OR (((Clientes.Obs12)=True));

Y esto es lo que sale cuando pulso el botón de Enero o cualquier otro (incluido mayo)

CodRevision Cod Nom Terminado Mes Año Obs11 Obs12

000098 xxxxx 0

0 -1


y si pongo el texto "Mayo" en lugar del campo del formulario que muestra el mes me sale en cualquier mes

CodRevision Cod Nom Terminado Mes Año Obs11 Obs12

000098 xxxx 0

0 -1
1 000072 zzzz -1 mayo 2019 -1 0
2 000000 yyyyy 0 mayo 2019 -1 0

¿qué puedo hacer?. No hay manera?
Eva
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5096
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita mounir Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 15:51
Publicado originalmente por Momoe Momoe escribió:

El problema es que no sé como indicarle al subformulario que me muestre todos los clientes (tengan o no tenga revisión creada) y de los que sí tengan revisión que aparezcan los del mes seleccionado.



Explícame esto para poder ayudar.
Un Saludo.
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 16:24
hola Mounir a ver si consigo explicarme bien.
La tabla de clientes tiene 14 clientes y estos a lo largo del año tendrán un registro de revisión por mes por lo tanto cada cliente cuando finalice el año tendrá 12 registros (uno por mes)
En enero si no se le ha hecho ninguna revisión a ningún cliente en el subformulario deberán salir los 14 clientes (no tendrá Codigo de revisión puesto que todavía no tiene ningun registro creado

Ej. CodRevision CodCliente ........ (mes enero sin registros en tabla Revision)
       ___ 000000
       ___ 000072
.... y así hasta los 14 clientes que hay de momento

Ahora si en el mes de enero alguno tuviera ya registro de revision en el subformulario saldría

CodRevision CoCliente .......
     1 000000
   _____ 000072
y así sucesivamente.

Mis jefes quieren un formulario con botones con los meses del año y que cuando pulsen un mes puedan saber viéndolo en ese formulario a qué clientes ya les han hecho la revisión y cuales quedan por revisar.

Espero haberme explicado
Eva
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3326
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 18:41
A ver si he entendido lo último

Quieres que aparezcan TODOS los clientes y en aquellos que han tenido una revisión en el mes indicado, debe aparecer además el código de revisión.

Es decir, si el cliente ha tenido una revisión, pero en un mes distinto al seleccionado, NO de be aparecer el código de revisión.

¿Es eso?

Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 14/Mayo/2019 a las 19:01
Si eso es.
al final en la tabla de revisión habrá 12 registros por cada cliente pero claro cuando llegue su mes de revisión podrá hacerse a lo largo de todo el mes por ello tengo si pulso enero veré los que ya tengan en enero revisión y todos los demas que no la tenga. pero si un cliente tiene una revisión en febrero no me tiene que aparecer en enero con codigo de revisión puesto que en enero ese cliente aún no la tiene.

Creo que lo lío más que lo aclaro pero no sé como expresarlo para que se entienda.

Muchas gracias
Eva
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3326
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Mayo/2019 a las 15:22
Hecho a ojo y sin probar.

SELECT Cliente.Cod, Cliente.Nom, REVISION.Terminado, 
switch (REVISION.Mes = "Mayo", "Mayo",
TRUE, "")
REVISION.Año, Cliente.Obs11, Cliente.Obs12
FROM Cliente, REVISION 
where Cliente.Cod = REVISION.CodCliente;


Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Mayo/2019 a las 14:28
Hola Luis me funciona pero con reservas. me explico.

He modificado la consulta que me has puesto para buscar por todos los meses quedando así:

SELECT REVISION.CodRevision, Clientes.Cod, Clientes.Nom, REVISION.Terminado, Switch([REVISION].[Mes]="Enero","Enero",[REVISION].[Mes]="Febrero","Febrero",[REVISION].[Mes]="Marzo","Marzo",[REVISION].[Mes]="Abril","Abril",[REVISION].[Mes]="Mayo","Mayo",[REVISION].[Mes]="Junio","Junio",[REVISION].[Mes]="Julio","Julio",[REVISION].[Mes]="Agosto","Agosto",[REVISION].[Mes]="Septiembre","Septiembre",[REVISION].[Mes]="Octubre","Octubre",[REVISION].[Mes]="Noviembre","Noviembre",[REVISION].[Mes]="Diciembre","Diciembre",Isnull([REVISION].[Mes])," ") AS Mes, REVISION.Año, Clientes.Obs11, Clientes.Obs12 FROM Clientes LEFT JOIN REVISION ON Clientes.Cod = REVISION.CodCliente WHERE (((Clientes.Obs11)=True)) OR (((Clientes.Obs12)=True));

 Cuando abro el formulario que tiene los botones de los meses y pulso "Enero" me sale tanto los que tienen parte de revision (sea del mes que sea) como los que aún no tiene revision. Te pongo ejemplo para ver si queda más claro, si quieres que te envíe copia de la base de datos para poder verlo más concreto me dices como hacerlo y te la envío.

Mi tabla de clientes:

Clientes

Cod

nom

ema

obs11

obs12

000000

cliente de contado

1@1.es

No

000001

Carlos Ballesta

2@2.es

No

000022

Santiago Puerta

3@3.es

No

000029

Rosa Benito

4@4.es

No

000035

Amadeo López

5@5.es

No

000037

Marta Garrido

6@6.es

No

000038

Maria Eugenia Santos

7@7.es

No

000061

Eva Moreno

8@8.es

No

000068

Marta Serrano

9@9.es

No

000073

Eusebio Gómez

10@10.es

No

000075

Pedro Perez

11@11.es

No

000078

Alfonso Guerra

12@12.es

No

000094

Jose Requena

13@13.es

No

000098

Jose Carlos Puentes

14@14.es

No

 Mi tabla de revisiones (que muestra los registros de los clientes que ya tienen alguna revisión (tiene más datos pero ocupa mucho y he dejado sólo los que debería mostrar el formulario cuando pulso el botón del mes que quiero

CodRevision

CodCliente

Mes

Año

Terminado

1

000072

mayo

2019

2

000000

mayo

2019

No

3

000001

Enero

2019

No

4

000022

Enero

2019

Eva
Arriba
Momoe Ver desplegable
Nuevo
Nuevo


Unido: 05/Diciembre/2012
Localización: España
Estado: Sin conexión
Puntos: 20
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Momoe Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Mayo/2019 a las 14:29

Si pulso el botón "mayo" me tendría que salir lo siguiente:

 CodRevision

CodCliente

Mes

Año

Terminado

1

000072

mayo

2019

2

000000

mayo

2019

No

000001

 

 

 

 

000022

 

 

 

 

000029

 

 

 

 

000035

 

 

 

 

000037

 

 

 

 

000038

 

 

 

 

000059

 

 

 

 Los dos primeros como tienen hecha revisión en mayo tienen que salir pero el resto de clientes que no tiene revisión para mayo debería de salir sin Código de Revisión, ni mes, ni año, ni terminado pues no existe registro de revisión para el mes de mayo.

En cambio me sale

CodRevision

CodCliente

Mes

Año

Terminado

1

000072

mayo

2019

2

000000

mayo

2019

No

3

000001

Enero

2019

No

4

000022

Enero

2019

No

5

000029

Enero

2019

No

6

000035

Enero

2019

No

7

000037

Enero

2019

No

8

000038

Enero

2019

No

9

000059

enero

2019

No

 Por lo que en mayo me salen registros de enero que no tendrían que salir puesto que esos registros son de enero

Espero haberme explicado. Muchas gracias


(lo he puesto en 2 mensajes puesto que me daba error al mandarlo todo en uno)

Eva
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3326
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Mayo/2019 a las 22:46
prueba lo que te he puesto, pero cuando pulsan mayo, pones
switch (REVISION.Mes = "Mayo", "Mayo",  TRUE, "")

Si pulsan junio pones
switch (REVISION.Mes = "Junio", "Junio",  TRUE, "")

Es decir, creas la query de forma dinámica

Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable