Access - Bloquear Registro al pasar 1 Día.

 
Vista:
sin imagen de perfil

Bloquear Registro al pasar 1 Día.

Publicado por Grandalf (4 intervenciones) el 04/05/2017 11:00:46
Buenos días.

Estoy intentando bloquear un registro para que no se pueda escribir en el si la fecha no es la del día, de manera que se protejan los campos contra escritura y solo se puedan modificar en el día de "Hoy".

este es el código:

1
2
3
4
5
6
7
8
9
10
11
Private Sub FK_VALOR_VENTA_Enter()
Dim xFecha As Date
 
xFecha = Date
If xFecha = Date Then
    FK_VALOR_VENTA = VALOR_VENTA
    FK_VALOR_COMPRA = VALOR_COMPRA
Else
    FK_VALOR_VENTA.Locked = True
    FK_VALOR_COMPRA.Locked = True
End If

Pero no me bloquea el campo en registros pasados. Sigue activo.

¿Que error estoy cometiendo?

Saludos y Gracias.
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

Bloquear Registro al pasar 1 Día.

Publicado por Anonimo (3316 intervenciones) el 04/05/2017 11:53:45
Los dos términos de la igualdad son iguales:

xFecha = Date
If xFecha = Date Then

Se tendría que comparar con el dato (fecha) del registro, suponiendo que este campo con la fecha se llamase 'FechaVenta' la opción ideal seria utilizar el evento CURRENT del formulario y en el esto:

FK_VALOR_VENTA.Locked = Me.FechaVenta <> Date
FK_VALOR_COMPRA.Locked = Me.FechaVenta <> Date


Esto es:
Si la fecha que hay en el registro es diferente a la actual (sea anterior o posterior si es una previsión)
la igualdad: Me.FechaVenta <> Date, devolvería un TRUE
si ambas son la misma un FALSE.

Si la necesidad lo solicita, se puede utilizar el mayor que ...... etc.
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
sin imagen de perfil

Bloquear Registro al pasar 1 Día.

Publicado por Grandalf (4 intervenciones) el 04/05/2017 12:24:43
Hola.

Gracias por las Rápidas Respuesta:

Te comento:
El caso es que Tanto FK_VALOR_VENTA, como FK_VALOR_COMPRA, hacen una lectura de los datos introducidos en otro campo. (varían diariamente). de manera que cuando accedo a la casilla FK_VALOR_VENTA (Eventos, al Entrar) lea los datos y se puedan modificar si coincide con la fecha "FECHA". Si no coinciden con la "FECHA", no lean datos, ni se puedan modificar.

1
2
3
4
5
6
7
8
9
10
Private Sub FK_VALOR_VENTA_Enter()
 
If FECHA <> Date Then
    FK_VALOR_VENTA.Locked = Me.FECHA <> Date
    FK_VALOR_COMPRA.Locked = Me.FECHA <> Date
Else
    FK_VALOR_VENTA = VALOR_VENTA
    FK_VALOR_COMPRA = VALOR_COMPRA
End If
End Sub

No funciona correctamente.
¿Como lo diseñaríais vosotros?

Saludos y Gracias
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

Bloquear Registro al pasar 1 Día.

Publicado por Anonimo (3316 intervenciones) el 04/05/2017 14:27:00
Que funcione de forma correcta o no, dependerá del valor real que hubiere en el objeto 'Fecha'.

Utilizar ese nombre (Fecha) de esa forma, puede dar lugar a complicarle la vida al motor de Access, porque le costara trabajo definir si 'Fecha' es una de las palabras reservadas o un campo del formulario (se debería representar también como 'Me.Fecha') o una variable o .....

Si los datos no se pueden leer ni modificar cuando se cumple la condición, quizás (y no deja de ser una forma de enfocar la solución) deberían abortarse las acciones posteriores (al no leer los datos, poco sentido tendría evitar su modificación).

El 'como' se plantearía una solución ... una solución (que se adapte a un entorno determinado) solo se puede analizar si se conoce bien el entorno en que se aplicara.

La solución que he propuesto no se esta aplicando de forma correcta: introducirla dentro del IF carece de sentido (en si mismo está condicionada)
Que se muestre un dato que no es modificable poco daño puede hacer (a no ser que esa información sea comprometida) ... pero si fuera comprometida ¿Por qué se muestra y manipula cuando fechas coinciden?.

Hay un detalle a tener en cuenta:
Si el objeto llamado FECHA (y tratado posteriormente como 'Me.Fecha') es un cuadro de texto independiente en el que se introducen datos que 'representan' a una fecha (que tienen el formato de una fecha), ese dato NO ES una fecha para Access, es un texto que podría incluso tratarse como una operación aritmética.
Para Access solo son fechas aquellas que se convierten a ese tipo de dato (por ejemplo mediante la función CDATE), ya convertida podrá utilizarse en la igualdad propuesta antes.

En la respuesta original se suponía que ese dato a comparar (la fecha) era un campo de tipo DATE del origen de datos del formulario
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
sin imagen de perfil

Bloquear Registro al pasar 1 Día.

Publicado por Grandalf (4 intervenciones) el 04/05/2017 18:23:37
wAUUU...

Me ha costado leer el texto! jeje

Pero mil Gracias por la explicación. lo tendré en cuenta.

Mi FECHA es en formato FECHA, ya que a la hora de introducirla, sale el desplegable con el "mes y Dias" en formato calendario.

Pensaré como modificarlo.

Gracias por la Explicación.
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