¿Cómo comparo un campo fecha con la fecha del campo anterior?

Para evitar errores en las fechas de facturas necesito compara la fecha actual con la fecha de la factura anterior. Para eso saco la fecha anterior a través de una consulta SQL. El problema viene cuando intento compara este campo con el campo de fecha del formulario. Creo que no estoy comparando bien los datos. ¿Alguien tiene idea de como lo puedo hacer? Estoy intentando meteiendo este código en el botón de cerrar el formulario:

Dim SQL As String
SQL = "SELECT Max([Fecha]) AS FECHAMAXIMA FROM tblFactura WHERE tblFactura.IdFactura=" & Me.IdFactura
If Me.Fecha < SQL Then
MsgBox "CUIDADO!! LA FECHA DE FACTURA ES INFERIOR A LA FECHA ANTERIOR"
End If

Respuesta
2

Así estás comparando una fecha con una cadena de texto, que es obvio no es lo que buscas.

Si declaras una SQL, tienes que crear un recordset sobre esa SQl, pasar el valor que devuelve a otra variable y luego comparar con el campo fecha, algo así:

Dim SQL As String, rst As DAO.Recordset, ultFecha As Date
SQL = "SELECT Max([Fecha]) AS FECHAMAXIMA FROM tblFactura WHERE tblFactura.IdFactura=" &
Me.IdFactura
Set rst=CurrentDb.OpenRecordset(miSQL)
ultFecha=rst(0)
rst.close
If Me.Fecha < ultFechaThen
MsgBox "CUIDADO!! LA FECHA DE FACTURA ES INFERIOR A LA FECHA ANTERIOR"
End If

Pero tienes una forma más sencilla de hacerlo, usando una función agregada de dominio:

Dim ultFecha As Date
ultFecha = DMax([Fecha],"tblFactura","IdFactura=" & Me.IdFactura)
If Me.Fecha < ultFecha Then
MsgBox "CUIDADO!! LA FECHA DE FACTURA ES INFERIOR A LA FECHA ANTERIOR"
End If

Un saludo.


¡Gracias! 

En primer lugar, muchas gracias por la información. La primera opción funciona bien pero hay un problema

En el primer caso, en el primer registro da error de código (al no obtener la consulta sql ningún parámetro) He probado creando un If isNull (SQL) Then, pero no me valida. No sé si hay algún otra forma de controlar el string SQL

En el segundo caso el parámetro ultfecha me devuelve la hora no la fecha corta por lo que no me compara con el campo Me. Fecha.

Muchas Gracias

Para el primer caso: no tienes que validar la cadena SQL, porque nunca va a ser nula, tienes que comprobar que el recordset devuelve registros, y eso lo puedes hacer de varias formas, con un recordcount, que dará cero si no hay registros, o mirando si está a la vez en el inicio y en el fin del recordset, con BOF y EOF:

If rst.Recordcount=0 Then .... 

If rst.BOF AND rst.EOF Then ....

Con cualquiera de las dos lineas anteriores puedes controlar que el recordset devuelva o no registros y actuar en consecuencia.

Para el segundo caso: me suena raro que si en el campo Fecha tienes una fecha, te coja una hora, pero como el código te lo puse a lo "rápido", prueba a ver si así te funciona:

ultFecha = DMax("Fecha","tblFactura","IdFactura=" & Me.IdFactura)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas