Access - Acces saber si he salido con la x de cerrar

   
Vista:

Acces saber si he salido con la x de cerrar

Publicado por Adolfo Asencio Velasco (9 intervenciones) el 29/01/2009 23:03:32
Hola buenas noches:
Tengo un formulario con varios campos, tengo activa la cruz de cerrar, tengo tambien visibles las teclas de access de desplazamientos entre registros y tengo 4 comandos para grabar, cancelar, borrar y cerrar.
De todos los campos, tengo tres, 2 de texto y uno numerico que son indispensables para grabar el registro. Estos campos en la tabla no tienen la propiedad requerido. Para grabar un registro necesito que los campos de textos no sean nulos, ni vacios y que el numerico sea mayor de 0. He controlado la pulsacion de teclas del campo numerico, de tal forma que solo admite numeros. Tambien he controlado si es nulo o cero. Utilizo los eventos al salir, al perder el foco y despues de actualizar. Creo que complico el codigo. Pienso que con uno solo seria suficiente. ¿Cúal debo utilizar?
Pretendo que si entro, por ejemplo, en el campo numerico y lo suprimo o pongo cero me de el mensaje en la ventana de errores que he hecho. Esto tambien lo he conseguido. Ahora bien, quiero que cuando pulse el boton de registro anterior, me impida desplazarme y me de el mensaje de que el campo numerico es nulo. Ahora bien, cuando pulse el comando cerrar, necesito que cierre todo sin mensajes, aun cuando el campo numerico sea nulo o 0. De la misma forma que cuando pulse la x de cerrar del formulario.
Los mensajes de validacion los he creado. No quiero ninguno de Access.
¿Como podría hacerlo?, ¿hay alguna funcion que me permita saber si he pulsado la x de cerrar formulario o las teclas para desplazarme entre los registros?
Cuando modifico el campo numerico y le pongo a nulo, por ejemplo, he puesto un aviso en el evento antes de actualizar del formulario. Esto me sirrve para que me de el mensaje cuando quiero desplazarme entre los registros, pero tambien me lo da cuando pulso la x de cerrar formulario. Se que cuando se modifica un campo de un registros se cargan los eventos antes de actualizar, despues de actualizar, al descargar, al desactivar y al cerrar.
Al boton de comando cerrar le que puesto una variable antes de docmd.close , de nombre pulsado_cerrar=true para saber si he pulsado esta tecla. Esta variable la tengo tambien en el evento antes de actualizar de tal forma que cuando cierro mediante el comando los mensajes no aparecen, pero si cuando cierro con la x del formulario.
¿Me podeis ayudar?. ¿qué eventos de los campos de texto son los que utilizais para validar?. ¿Cómo pulso el boton x de cerrar formulario sin que me de los mensajes que he creado, y que quiero que me los muestre cuando no me puedo desplazar entre los registros?.
Perdonar por el rollo. No se si me he explicado. UN SALUDO.
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

RE:Acces saber si he salido con la x de cerrar

Publicado por mi menda (1111 intervenciones) el 30/01/2009 04:15:01
Hola:
Sí no quieres poner los campos como requeridos en la tabla, o reglas de validación, puedes hacer un procedimiento en un módulo.
Primero: a los controles que quieras que sean obligatorios, por ejemplo, les pones que terminen en Q (clienteQ, FechaDesdeQ).Solo en el Formulario.

Public Sub camposRequeridos(frm As String)
Dim ctl As Control
Dim nombreCampo As String

For Each ctl In Forms(frm).Controls
If Right(ctl.Name, 1) = "Q" And IsNull(ctl) Then
nombreCampo = Left(ctl.Name, Len(ctl.Name) - 1)
MsgBox "El campo " & nombreCampo & " es obligatorio", _
vbCritical, "Validación"
ctl.SetFocus
Exit Sub
End If
Next ctl

End Sub

Te servirá para cualquier formulario. Para llamar al procedimiento desde el evento que quieras:

camposRequeridos Me.Name

Al campo numérico no le pongas valor predeterminado, lo validas en el evento al salir del campo

Private Sub CampoNumeroQ_Exit(Cancel As Integer)
if CampoNumeroQ < 1 Then
MsgBox "El campo no puede ser Nulo ni menor que 1",,"Validación"
Cancel = True
End If
End Sub

Ahora no podrá salir del campo hasta que no tome un valor valido.
Sí tienes un botón de comando para salir del formulario, desactiva el botón X del formulario.

Un saludo
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

RE:Acces saber si he salido con la x de cerrar

Publicado por Adolfo Asencio Velasco (9 intervenciones) el 30/01/2009 20:32:24
Hola:
Gracias por contestar.
Te cuento. Estoy haciendo una base de datos para llevar el control de la peliculas de casa. Tengo un formulario llamado peliculas que consta de dos paginas con un monton de campos. Los campos obligatorios para dar de alta una pelicula son el titulo, el año, y el formato. Para controlar las teclas de los campos numericos utilizo esta funcion:

Private Sub Año_KeyPress(KeyAscii As Integer)
If ValorNumerico(KeyAscii) = False Then KeyAscii = 0
End Sub

Function ValorNumerico(CodigoTecla As Integer) As Boolean
If CodigoTecla = 8 Then 'backspace
ValorNumerico = True
Exit Function
End If
If CodigoTecla > 47 And CodigoTecla < 58 Then
ValorNumerico = True
Else
ValorNumerico = False
texto_mensajes = "INTRODUZCA UN VALOR NUMERICO"
Call ventana_mensajes
End If
End Function

Dentro de la primera pagina tengo dos subformularios:uno para los generos y otros para los actores. Con doble clik en el subformulario abro el formulario de actores para introducir registros nuevos. Los actores de cada pelicula los elijo mediante cuadros combinados, asi voy llenando el subformulario. Tengo un boton para borrar los registros del subformulario.
Tengo un monton de tablas aunque no relacionadas. No entiendo bien lo de borrar en cascada y lo de la integridad diferencial. Yo lo que hago que tengo una tabla llamada unionpeliculaactor donde voy añadiendo los actores de cada pelicula. Tengo un campo comun llamado idpelicula. Mediante el boton borrar que tengo en el formulario borro la pelicula y los registrros del subformulario actores a los que hace referencia esa pelicula. Ya te puedes hacer una idea de lo que pretendo. Si me permites me gustaria comentarte algunas cosas:

1.- Tengo un boton cancelar que quiero que se active cuando se produzca algún cambio en el formulario. Utilizo dirty, pero el problema es que no quiero pasar por todos los controles para saber si ha producido algun cambio. Ahora lo tengo controlado en los tres campos obligatorios que te comento. ¿Cómo puedo hacerlo?

2.- No utilizo campos requeridos, porque acces me empieza a dar sus mensajes. No se como evitarlos. Tampoco utilizo la mucho msgbox ".......", tengo creado una variable globlal y un formulario llamada ventana_mensajes con un boton aceptar que sirve para cerrarlo, donde voy poniendo todos los mensajes que necesito.

3.- Tengo un control llamado nacionalidad que es un campo combinado que toma el valor de una tabla llamada banderas con tres campos idbandera, nacionalidad y bandera. El campo bandera es una imagen bmp. Pretendo que estando en mi formulario, cuando seleccione una pais me salga su bandera. He creado un campo con un objeto oledependiente, pero no me sale nada. En mi tabla principal peliculas tengo un campo llamado idbandera que tengo relacionado con la tabla banderas. El control source del formulario es la tabla peliculas.
Tengo algun problemilla más. Si te parece ya te ire comentando. Gracias de nuevo. Mi correo adolfoasencio@terra.es. SALUDOS.
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