Impedir modificación de registros de una tabla

Tengo una tabla facturas donde voy introduciendo datos de movimientos de cuentas bancarias, entre ellos cuenta_bancaria, fcargo, fprevista, previsión. La fecha cargo la relleno cuando recibo el extracto bancario y veo lo que me han cargado, la fprevista es para la previsión de tesorería a futuro. Previsión es un campo si/no que me dice si se trata de una previsión o de si ya se ha cargado en el banco. Los registros con previsión "si" únicamente tienen rellenado el campo fprevista, cuando previsión es "no" también tienen rellenado el campo fcargo
Otra tabla es Saldos_comprobados, donde figuran los campos cuenta_bancaria y fsaldo. Esta tabla recoge los saldos comprobados del banco.
Quiero tener un formulario de entrada de datos a la tabla facturas, pero que:
a) No me deje introducir un nuevo registro con fecha anterior al campo fsaldo de la tabla Saldos_comprobados
b) Cuando intente modificar un registro con fecha fcargo o fprevista anterior a fsaldo, me lo permita pero me muestre antes un mensaje de aviso
¿Es eso posible en un formulario?

1 Respuesta

Respuesta
1
Con access si que es posible, con el generador de formularios te generas el formulario.
Una vez creado, en el evento antes de grabar de la fecha, puedes insertar código de visual basic para que mire si la fecha es correcta, si no lo es puedes cancelar la grabación.
Varias preguntas, ya que no estoy muy puesta:
Cuando dices en el evento "antes de grabar de", ¿es el mismo que "antes de actualizar"?
El evento ¿lo creo con el generador de expresiones? ¿Y qué texto tengo que escribir, teniendo en cuenta que debe escoger para comparar la misma cuenta bancaria de la misma empresa, y comparar las fechas de introducción con la de la fecha de saldo?
Por último, cómo expreso la acción a realizar: ¿Rechazar inserción o simplemente mostrar un aviso?
Si, es antes de actuaizar
Pulsas generador de código
Te abrirá una pantalla en la función before update
si sabes visual basic, aquí puedes hacer las comprobaciones y si no aceptas la fecha, pues pones
cancel = true
le avisas y te sitúas en el campo que este mal.
Te contesto ahora para que no creas que no valoro el tiempo que me has y estás dedicando, estoy a punto de irme a casa.
Claramente y sin rodeos, no sé crear la función de visual basic.He escrito en el generador de expresiones
=(Select consultas![confirmados]![ccuentabancaria];consultas![confirmados]![fsaldo]; consultas![confirmados]![nempresa];SiInm (fprevista>fsaldo; fprevista; cancel=true))
Consultas![confirmados]! Es la consulta que me selecciona el saldo más reciente comprobado.
No sé como indicarle en el generador de expresiones que compare la fsaldo con fprevista, para una misma cuenta y empresa
No quiero agobiarte y ser pesada, si te has hartado de mis consultas lo entenderá. Si no, agradecería pudieras contestarme en algún momento de la semana que viene.
Perdona la tardanza pero ahora estoy hasta el cuello de trabajo.
Tienes dos campos de fecha (fprevista y fsaldo)
Borra la expresión que has generado en el evento antes de actualizar
lo que te pongo ahora lo haces en cada uno de los campos
te pones en el campo y botón derecho /propiedades
en la pestaña de eventos hay uno de antes de actualizar, pulsas el botoncito de la derecha ... y le das a generar código
te abrirá una pantalla en una función de visual basic
la función debe quedar así:
Private Sub fprevista_BeforeUpdate(Cancel As Integer) 
If me.fprevista>me.fsaldo then
If msgbox("La fecha prevista es mayor que la fecha saldo. ¿desea continuar?",vbQuestion+vbYesNo) = vbyes then cancel = true
end if
End Sub
Luego tendrás que hacer lo mismo para fsaldo.
Gracias, vamos avanzando, pero sigo sin saber cómo relacionar fprevista, que está en una tabla, con fcargo, que procede de otra. Y además tiene que comprobarse que ambas fechas corresponden a la misma cuenta bancaria.
Dentro de la función que te he puesto puedes hacer una búsqueda de la fecha de saldo en la otra tabla:
Dim rs As New Recordset
Dim fsalfo As Date
Set rs = CurrentDb.OpenRecordset("Select FSaldo From [Tabla] where numerocuenta= " & Me.numerocuenta)
If Not rs.EOF Then
    Fsaldo = rs!Fsaldo
End If
Rs. Close
Así buscas la fecha saldo de la otra tabla.
Perdón por la tardanza, he estado de viaje y he tenido que aparcar esto temporalmente.
Creo que no he hecho bien lo que me indicabas, pues cuando entro en el formulario me sale: "la expresión `al cargar' que introdujo como valor de la propiedad de evento produjo un error: se ha detectado un nombre ambiguo: fcargo_BeforeUpdate.
Yo he puesto como función (seguramente no he colocado en el orden debido):
Private Sub fcargo_BeforeUpdate(Cancel As Integer)
Dim rs As New Recordset
Dim fsaldo As Date
Set rs = CurrentDb.OpenRecordset("Select FSaldo From [confirmados] where ncuentabancaria= " & Me.ncuentabancaria)
If Not rs.EOF Then
fsaldo = rs!fsaldo
End If
rs.Close
If Me.fcargo > Me.fsaldo Then
If MsgBox("La fecha prevista es mayor que la fecha saldo. ¿desea continuar?", vbQuestion + vbYesNo) = vbYes Then Cancel = True
End If
End Sub
¿Puedes seguir ayudándome? Gracias
No hagas caso del correo anterior, había duplicado una linea. Sigo en ello, porque cuando corrijo una cosa, me sale otro mensaje de error. Me gustaría agradecerte mucho tu ayuda, así que creo que voy a cerrar la cuestión valorándote. Si no consigo resolverlo del todo, volveré a pedirte ayuda (siempre que no estés harto de mí, claro).
Muchísimas gracias por estar ahí y ayudar de esa forma tan desinteresada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas