Validación en Access para controles de texto

Tengo un formulario de Access en el que he realizado validaciones de controles de caja de texto. Funcionan bien cuando ingreso por teclado los datos. Pero al cargar el formulario si salgo del control de texto con el botón Tab salta la validación y permite ingresar el dato vacío o en 0 (en un control puse por valor predeterminado ingrese en 0).

1 Respuesta

Respuesta
1

Erick quisiera decirte algo pero, honestamente, no he entendido prácticamente nada. ¿Podrías extender la pregunta o poner alguna imagen?

Gracias por tu interés. Tratare de ser más específico. Tengo un formulario que al abrirlo tiene el foco en un  cuadro de texto que en sus propiedades  lo valide para que ingrese cantidades mayores a 0. La intención es que no se permita al usuario salir de este cuadro de texto sin darle un valor numérico. Sí  yo ingreso por teclado el numero cero y trato de salir del cuadro de texto la validación funciona. Pero si abro el formulario y antes de ingresar algún dato al cuadro presiono la tecla TAB  salta del cuadro de texto al siguiente sin validar. 

No sé como andas de código VB. Primero, soy enemigo de los valores predeterminados y de poner los campos como requeridos. Si tengo la tabla

Con ella construyo el formulario, donde le voy a decir que al activar el registro el cursor vaya siempre al control CampoA. Por otro lado le digo que si el campo tiene el foco se ponga en amarillo(para que puedas comprobar, sólo para esta explicación).

Si le pongo un cero,

ya puedo pulsar el tabulador, o la tecla que quiera, incluso cerrar que me sale

Y el cursor se vuelve, sí o sí al campo A.

Si lo dejara en blanco y pulsara el tabulador, usara el ratón o lo que fuera, el cursor siempre se volverá al campo A hasta que le pongas un valor mayor que cero.

El código del formulario es

Private Sub CampoA_BeforeUpdate(Cancel As Integer)
If CampoA <= 0 Then
MsgBox "No puede ser, el valor tiene que ser mayor que cero", vbOKOnly, "Otra vez será, pero hoy no"
DoCmd.CancelEvent
End If
End Sub
Private Sub CampoB_GotFocus()
If IsNull([CampoA]) Or CampoA = "" Then
CampoA.SetFocus
End If
End Sub
Private Sub Form_Current()
CampoA.SetFocus
End Sub
Private Sub NombreCliente_GotFocus()
If IsNull([CampoA]) Or CampoA = "" Then
CampoA.SetFocus
End If
End Sub

Cada private sub corresponde a un evento de cada control

Gracias por tu interés y colaboración. Bueno si entiendo la programación y que en el código que me envías asigna la validación en los eventos. El caso es que yo usé Macros Incrustados en los eventos. 

El formulario se inicia con un Evento al cargar con un Macro  Incrustado con la acción Ir aControl de este modo cojo el foco del control de texto donde te decía lleno cantidades. En este cuadro de texto en el evento Perder Foco creo un Macro incrustado cuya acción inicial es un Si donde válido para números mayores a 0. Seguido le doy una acción de Cancelar evento.

Pero no me valida como te decía si al abrir el formulario como el foco está en el control de texto (si no ingreso información por teclado) si le doy un Tab salta al siguiente control. Entiendo el valor inicial puede ser null pero para evitar esto inicialice el control de texto para que inicie con 0.

La verdad se que con tú código Visual Basic se soluciona. Pero quisiera solucionarlo con Macros Incrustados..... la verdad ahora que me has dado la solución me gustaría por curiosidad saber si es posible hacerlo con Macros Incrustados.

Vamos a ver si me explico. Primero, una macro no deja de ser un trozo de código simple al que le han puesto un nombre en "cristiano". Puedes comprobarlo creando una macro, no valen las que por defecto crea Access como incrustadas. Luego la asignas a un control y en la misma ventana de diseño del formulario pulsa Convertir macros del formulario a Visual Basic. Luego mira en la ventana del editor de VB, lo que realmente le estás diciendo.

Por otro lado, olvídate del evento Al perder el foco, tal como te puse el código, si el cursor se moviera, sea con el tabulador, sea con lo que sea al CampoB, como en sus propiedades-eventos-Al recibir el enfoque le tengo puesto que si CampoA es nulo o vacío, se vaya a ese campo. Ya puedes hacer lo que quieras, que el cursor siempre volverá, mientras se dé esa circunstancia. Lo mismo digo para el control Nombrecliente. Además, si le tengo puesto que al activar registro se vaya siempre al CampoB, se irá allí te pongas como te pongas.

De todas formas, si quieres, repito, si quieres mándame un mensaje(sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Erick Villegas, ya que si no sé quien me escribe ni los abro.

Te garantizo, con una certeza del 100%, que si sigues en esto de Access, te olvidarás de las macros y te pasarás ineludiblemente a VB.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas