viernes, 9 de mayo de 2014

Cómo evitar CONTROLES VACÍOS (TextBox, ComboBox, EditBox) en un formulario cuando son Obligatorios

Hola a todos. A veces necesitamos validar que, al momento de guardar un registro, algun control como un textbox, editbox, combobox no esten vacios porque es obligatorio que tengan al menos un dato. Por ejemplo: en una factura es incorrecto que el registro se guarde (al facturar un producto) sin el numero de factura. En un catalogo de productos... es incorrecto que se guarde un dato en blanco en la tabla para el campo nombreproducto.

Las validaciones son importantes para asegurar la integridad de los datos que se van a guardar en la base de datos, sea ésta la nativa de foxpro (.dbc) o si usamos otro motor de dase de datos compatible (FIREBIRD, SQL, etc..). Dichas validaciones deben realizarse SIEMPRE en la aplicacion, en el formulario desde el cual se originan. Es incorrecto que un dato de un campo vaya sin validar a la base de datos. ES INCORRECTO Y UNA MALA PRÁCTICA Y FILOSOFIA DE PROGRAMACIÓN.

Por tanto, requerimos en ocasiones... identificar aquellos controles por medio de los cuales ingresamos los datos para guardarlos en las tablas. Lo mas conveniente es colocar un codigo de validación que dispare un STOP o detenimiento del proceso de guardado antes que éste se consuma, es decir, se deben verificar que los datos que consideremos como OBLIGATORIOS o los mas IMPORTANTES sean cargados (digitados) correctamente en los controles antes del correr un proceso de insertado en las tablas.

Para tal fin, he aqui un pequeño código que ha resultado muy satisfactorio. Aclaro que éste no es de mi autoria. Recuerdo que alguien mas lo publico hace años en un foro, cuando yo recien aprendia. Lo tome, lo analice y lo usé. Ahora es un metodo de los mas comunes y usados en mis aplicaciones. Todo el crédito para el autor original, en dado caso si algún dia esa persona lee este post.

1 - Creamos un nuevo metodo en nuestro formulario en modo de diseño(Click en el menu de foxpro, click en el menu form, click en new method) con el nombre validarvacios. Luego, vamos a la pestaña methods de las propiedades del form y buscamos el metodo nuevo. Debe aparecer al final, en letras rojitas. Damos doble click y en el escribimos este codigo:

LOCAL lnObjecto, lcNombre, lctooltiptext, lcContenido, lcFoco


**--Evitar vacios
FOR lnObjecto = 1 TO THISFORM.OBJECTS.COUNT
 
  **--Si el objeto esta marcado con * en comment
  IF THISFORM.OBJECTS(lnObjecto).COMMENT = "*"
 
       **Obtenemos el nombre
    lcNombre = THISFORM.OBJECTS(lnObjecto).NAME
    **Obtenemos el tooltiptext
    lctooltiptext =  THISFORM.OBJECTS(lnObjecto).TOOLTIPTEXT
    **Obtenemos el valor para saber si esta vacio o no
    lcContenido = "ThisForm." + lcNombre + ".Value"
       
        **--Si el valor del objeto es vacio
        IF EMPTY(&lcContenido)
       
              **--
              MESSAGEBOX("Es necesario ingresar el dato " + "-" + lctooltiptext + "-", 16, "Error - Datos pendientes por ingresar")
           
             **--Regresamso el foco al objeto
             lcFoco = "ThisForm." + lcNombre + ".SetFocus"
              &lcFoco
              
        **--||
        RETURN
        **--||
           

        ENDIF
  ENDIF
ENDFOR
**--//


Luego, solo vamos a cada control que deseamos validar para que no tenga datos en blanco y escribimos un * en la propiedad comment. En la propiedad tooltiptext escribimos algun nombre que deseamos ver del dato para el mensaje que aparecerá si se dispara la validacion.

Prueben y me avisan.


Cualquier duda o comentario para mejorar es siempre bienvenido.

Pueden encontrarme en todoexpertos.com en la subcategoria de visualfoxpro, como el experto ravenn


Un abrazo!
Desde Managua, Nicaragua!
Ravenn :D :D :D

1 comentario:

  1. Buenas Tardes, donde hago el llamado del metodo validarvacios..?

    ResponderEliminar