Como comparar fechas Access (VBA)?

Tengo una tabla con 3 campos.Nombre_Med, Fecha_Caducidad y Cantidad.
Cómo puedo hacerle para que al momento de abrir el programa me muestre un mensaje que diga que medicamento vence comparando la fecha del sistema (Fecha Actual) y la fecha que se capturo en el formulario?

1 Respuesta

Respuesta
2

Comparar fechas es igual que comparar números, has de usar los operadores =, <, >...

Para hacer lo que pides tienes que tener un formulario que se abra automáticamente al iniciar la aplicación, y programar en su evento "al cargar" en código como éste:

Dim rst as DAO.Recordset

Dim miMensaje as String

Set rst=CurrentDb.OpenRecordset("SELECT * FROM NombreTabla WHERE Format(Fecha_Caducidad,'mm/dd/yyyy')=#" & Format(Date(),'mm/dd/yyyy") & "#")

If rst.RecordCount>0 Then

miMensaje=" Los siguientes medicamentos vencen hoy:" & vbCrLf

Do Until rst.EOF

miMensaje=miMensaje & rst("Nombre_Med") & vbCrLf

rst.MoveNext

Loop

MsgBox miMensaje,vbInformation,"¡ATENCIÓN!"

End If

rst.Close

Set rst=Nothing

Tendrás que poner el nombre de tu tabla en vez de o que está en negrita.

El código te dará un listado de todos aquellos medicamentos cuya Fecha_caducidad sea igual a la fecha actual. Si quieres tener también los caducados, cambia la igualdad por un <=:

....WHERE Format(Fecha_Caducidad,'mm/dd/yyyy')<=#"....

Un saludo.


Que tal, muchas gracias por su ayuda.

Sabe que en la búsqueda me marca un erro de sintaxis:

Set rst=CurrentDb.OpenRecordset("SELECT * FROM Fechas WHERE Format(Fecha_Caducidad,'mm/dd/yyyy')<=#" & Format(Date(),'mm/dd/yyyy") & "#")

Ya lo revise y no se que pudiera ser!

Hazlo así:

Set rst=CurrentDb.OpenRecordset("SELECT * FROM Fechas WHERE Format(Fecha_Caducidad,'mm/dd/yyyy')<=#" & Format(Date(),"mm/dd/yyyy") & "#")

Puse una comilla simple donde era una doble, después del Date()

Ya lo había hecho así y aun así sigue apareciendo el erro de sintaxis.

De Hecho también le faltan las comillas después de Fecha_Caducidad,"mm/dd/yyyy". Pero aun así sigue marcando el erro de sintaxis.

No, después de Fecha_Caducidad van comillas simples, porque van dentro de una cadena de texto ya delimitada por comillas dobles (la que sigue al primer paréntesis y la que precede al último.

Ponlo exactamente como en mi respuesta anterior, así no te tendría que dar errores de sintaxis.

Me cuentas.

Si ves que no te sale ningún aviso cuando debiera salir, prueba esta otra forma:

Set rst = CurrentDb.OpenRecordset("SELECT * FROM Fechas WHERE Fecha_Caducidad=#" & Format(Date, "mm/dd/yyyy") & "#")

Es decir, sin el Format() en la primera parte de la igualdad

Muy bien si funciona, con el ultimo código, el anterior me seguía apareciendo el error de sintaxis.

Tengo otra pregunta, después de que aparezca el mensaje y si la fecha ya paso, aun así sigue apareciendo.

Por ejemplo: tengo 3 medicamento que caducan hoy, aparece el mensaje, pero tengo 1 que caduco ayer, se supone que ya no debe de aparecer, solo los que coincida con la fecha del sistema.

Y para que aparezca la cantidad, ¿si tengo un medicamento de por nombre le pongo que caducan tal fecha y la cantidad?

Para la primera parte: si te salen fechas anteriores es porque tienes puesto <= que la fecha actual, si solo quieres que te salgan las de la fecha, pon solo = (fíjate en lo que te decía en mi primera respuesta).

Para la segunda parte:

El mensaje a mostrar se inicia en la variable "mensaje" con la línea miMensaje="Los siguientes medicamentos vencen hoy:" & vbCrLf. VbCrFl es un salto de línea.

Luego, dentro del bucle Do...Loop, que recorre todos los registros que cumplen la condición, se van encadenando los nombres (los da rst("Nombre_Med")) con la linea: miMensaje=miMensaje & rst("Nombre_Med") & vbCrLf

Sabiendo esto, puedes hacer el mensaje de muchas formas, por ejemplo (y cambiando solo la línea dentro del bucle):

miMensaje=miMensaje & rst("Nombre_Med") & " (" & rst("Cantidad") & " unidades)" & vbCrLf

ó:

miMensaje=miMensaje & rst("Cantidad") & " unidades de " & rst("Nombre_Med") & vbCrLf

Ó cualquier otra combinación que se te ocurra.

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas