Bloquear Registros en blanco Visual Fox Pro

Estimado Experto Unysoft, estoy muy agradecido por sus respuestas anteriores. Esta es mi tercera consulta. Espero pueda echarme una mano. Pasa esto: en el botón "guardar" de mi form, para evitar que el usuario deje registros en blanco en los textboxs, utilice lo siguiente, en click:
Local lcModificado,  lcRespuesta
lcModificado = GetFldState(-1)
IF  EMPTY("1" $ lcmodificado OR "4" $ lcModificado)
    =TABLEREVERT(.F.)      
        lcRespuesta=MESSAGEBOX("Debe ingresar un registro.", 48, "Error")
  ENDIF
De esta manera, si alguien da click en nuevo registro y pretende dejarlo o guardarlo en blanco, sin introducir "ningun" dato, haciendo click en "guardar", el programa revierte la acción y envía el mensaje de error, el registro no se guarda y todo funciona al 100% bien! No obstante, me surge una duda: ¿Cómo puedo hacer para "validar" que el usuario no deje ningún textbox en blanco? Me explico: con el código anterior, solo puedo evitar que se guarden registros en blanco siempre y cuando no se introduzca absolutamente "NADA" en los text. ¿Pero y si el usuario completa solo la mitad de la información? Por ejemplo: de los 5 textbox que tiene el form, si el usuario escribe datos solo en 3 y pretende dejar 2 vacíos, como puedo hacer para que al intentar guardar, el registro no se guarde y le envíe el mensaje "Debe completar el registro" y que no revierta el registro, ¿si no más bien que lo envíe de nuevo a completar el registro? Se me ocurrió "validar" por cada text, así:
If Empty(Thisform.Text1.Value)
   =Messagebox("Debe completar registro.", 48, "Error")
   Return .F.
Endif
Esto funciona, pero es como que muy complicado estar validando text por text... Y pues más si son muchos textos y formularios...! Espero me comprenda! De antemano, gracias por la atención prestada! Saludos.

1 respuesta

Respuesta
1
Respecto de tu consulta estás muy bien orientado.
Dependiendo de la complejidad e integridad que quieras otorgarle a tu sistema, no sólo resulta necesario hacer lo que tú ya hiciste, sino que además es necesario controlar que algunos campos no queden vacíos, y en otras ocasiones es necesario verificar que los datos ingresados cumplan con ciertos requerimientos.
Tu sabes que en la rutina de operar un sistema, y descartando la mala intencionalidad, los usuarios no siempre tienen todos los datos que los formularios requieren. Entonces se plantea el dilema de permitir campos en blanco o no.
Si permites campos en blanco lo más probable es que los usuarios, por comodidad no llenen todos los campos.
Si decides, en cambio, no permitir campos en blanco, es probable que los usuarios introduzcan en el sistema información basura o errónea a fin de poder salir del aprieto del momento.
Tu pregunta conlleva TODO UN TEMA que es bastante complicado de resolver, no desde el punto de vista técnico, sino desde el punto de vista humano.
He aquí nuestro desafío como programadores el de encontrar un punto intermedio, que otorgue fortaleza e integridad a los datos del sistema, y por otra parte que no sea una tortura para el usuario.
En este tema, como en la mayoría de las cosas de la vida, siempre es mejor prevenir que curar. No sirve de nada encontrarse con que algunos de los datos ingresados son falsos o inservibles y luego reclamar a los operadores o usuarios del sistema, es mejor evitar la posibilidad de que ello suceda, pero sin hacer inoperable el sistema.
En mi experiencia personal este tema me ha llevado un largo tiempo de análisis que me permitió llegar a una serie de conclusiones que hasta el momento me han dado excelentes resultados.
En primer lugar he creado en mi sistema una tabla de registro de eventos en la cual se graban todos los eventos del sistema. Desde el ingreso y egreso al sistema hasta las altas, bajas y modificaciones que los usuarios realizan rn cada tabla. Ademas, los usuarios del sistema están conscientes de que todo lo que hacen queda registrado y eso es un inhibidor sumamente efectivo para que ellos sean precavidos a la hora de operar el sistema. Lógicamente he tenido que crear unas breves rutinas que hacen el trabajo de registrar todos los eventos, pero no es nada del otro mundo.
Perdón por apartarme de tu pregunta, pero creo que vale la pena.
Ahora en cuanto a tu consulta:
Una solución general sería que utilices los parámetros adicionales de la función getfieldstate() y evalúes campo por campo, para ello te sugiero que leas en la ayuda de Visual FoxPro: help getfieldstate()
Esto puede ser solución en algunos casos, pero a la larga no te quedará otra alternativa que programar en el evento click de cada uno de tus forms las particularidades de la verificación de datos que necesites para cada caso. En este caso programarás en la clase el comportamiento general del evento click, y en cada botón en particular la verificación de algunos datos específicos.
Por ejemplo: Si tu tienes una tabla clientes con los siguientes campos:
Tipo de Matrícula
Nº de Matrícula
Apellidos y Nombres
Fecha de Nacimiento
Dirección
Teléfono
Y quieres controlar que algunos de estos campos no sean dejados en blanco o llenados con información basura deberás hacer algunas verificaciones que son propias de cada campo. Aunque siempre habrá una forma de burlar los controles, es importante impedir las más comunes
Así por ej: si tu sabes que el Nº de matrícula de las personas de tu país es de 8 dígitos, mínimamente deberás controlar que el campo no esté vacío y que los caracteres introducidos tengan 8 dígitos. Además quizás quieras verificar que los números introducidos no sean una secuencia predecible: 99999999, o 12345678, o 87654321. Son sólo ejemplos que quiero utilizar para mostarte que siempre se puede ir un paso más allá en la verificación de datos, y cuanto más quieras verificar más específica del campo y de la tabla es la verificación que debes realizar.
Por todo esto es que en mi caso he programado en un evento de la clase form el comportamiento standard del botón guardar, y un llamado a ese evento en la clase del botón guardar. Luego, en cada instancia del botón guardar, si no hay que verificar nada llamo al procedimiento con dodefault(); o si tengo que verificar campos realizo la verificación tal como tú lo has puesto en tu pregunta y luego llamo a dodefault()
Estimado Lucas: Espero no haberte ocasionado más problemas de los que ya tenías al hacer la pregunta, pero creo que es mi deber anticiparme a lo que te puede suceder en el futuro y que puedes resolver desde ahora.
Si en mi larga respuesta te ha quedado alguna duda o inquietud no dudes en avisarme.
Hola Sr. Carlos. Antes que nada, deseo mucho agradecer toda la explicación que me ha dado sobre el tema de los registros en blanco. Personalmente le cuento que tenia una idea o dilema bastante parecido sobre si dejar al usuario la libertad de registrar datos en blanco o no. Lo que pasa es que en mi corta experiencia, he visto que usuarios hacen uso indebido de algunas aplicaciones. Graban un registro nuevo en la tabla y a veces por comodidad o pereza dicen.."lo termino mannana, o lo hago después" y zas! Le dan guardar y lo dejan en blanco ... y tal y como dice mi profesora, "NUNCA TERMINAN LOS PROCESOS y por eso ocasionan problemas en el futuro". Cosas así, aunque yo sea un mero principiante y las aplicaciones no sean mías, pues como que molesta un poco porque yo creo que por muy sencilla que sea una aplicación, debe manejarse con mucho respeto e integridad... ademas, por muy pequeña que sea, hacer una aplicación en programación es un trabajo duro... si supiera cuantas noches de desvelo he tenido para programar la clase "general" de los botones de manipulación de registro! Por eso agradezco mucho sus comentarios, como siempre son muy enriquecedores e ilustrativos.
Volviendo a la consulta: Me han aconsejado que utilice la regla de validación de los campos de la tabla. Así podre controlar los registros que entra a cada campo en cada registro. No obstante, me dicen que mejor utilice programacionn en los objetos, así por ejemplo como la validación que le mostré de cada textbox que hice! Esto me confunde un poco! ¿Qué ES MEJOR? Usted, con su experiencia, ¿qué me aconsejaría? El problema que surge es que no he profundizado sobre el uso de reglas de validación y utilizar el generador de expresiones es un tema que no he tocado mucho y pues me resulta un poco complicado. En los manuales que baje del uso de VFP no explican como usar el generador y no dan ejemplos (apenas pude ver uno "idcliente>o" para aceptar solo valores positivos y pues otros que por deducción y lógica he podido realizar). En la mayoría de ejemplos de forms y tablas que he bajado, no encuentro común el uso de la regla de validación con expresiones en las tablas! Por eso le consulto! Gracias por la atención!
Tu comentario respecto de la forma en que suelen utilizarse los sistemas es muy acertada.
En cuanto a tu consulta, el uso de las reglas de validación de campos puede ser una opción, pero sin excepciones !
Yo prefiero, como te dije ayer dejar la complejidad de las particularidades para el evento click de cada botón guardar.
Como regla general he optado por NUNCA GRABAR UN REGISTRO si no ha cumplido con la verificación de datos. Por lo tanto en mis programas no encontrarás nunca una instrucción append blank, ya que aún con la verificación que tú estas programando, siempre existe un lapso de tiempo (desde que se crea hasta que dan click en guardar) en el que el registro se crea y permanece en blanco.
Esto te va a generar otro inconveniente más adelante. Cuando quieras comenzar a utilizar los GRANDES BENEFICIOS de la INTEGRIDAD REFERENCIAL de la Base de Datos, descubrirás que debes utilizar índices estructurales (cdx) que te permitirán crear relaciones persistentes entre las tablas. Allí surgirá que si tu tabla tiene al menos 1 índice principal o candidato no admitirá valores repetidos para estos campos, ni siquiera cuando el valor del campo clave es 0 o está en blanco.
Es por ello que te sugiero que comiences a utilizar el comando insert into () en lugar de append blank. Ademas de ser mucho más seguro, realiza todo en un solo paso y te aseguras que ningún corte de energía eléctrica o apagadado incorrecto de la pc te deje colgado ningún registro.
Para responder a tu pregunta te digo que prefiero hacer la verificación por programación en el evento click del botón guardar de cada formulario, en lugar de utilizar las reglas de validación. El motivo es que, como te dije más arriba, que las reglas de validación no admiten excepciones.
Hace poco guié a un usuario para que creara un Maestro ABM completo, partiendo desde la definición de las clases. Imagino que te será de mucha utilidad echarle un vistazo.
Te paso los enlaces para que sigas la secuencia, y allí encontrarás la respuesta que buscas en un ejemplo práctico. Si te tomas unos minutos seguro te será de utilidad
1) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2492099/solicitud-codigo-para-botones-vfp
2) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2492875/crear-clase-para-boton-nuevo
3) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2493598/asignar-codigo-a-botones-de-clase
4) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2494762/codigo-para-la-clase-boton-editar-vfp
5) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2495332/crear-un-formulario-maestro-de-abm
6) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2495591/crear-un-formulario-de-alta-de-registros
7) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2497589/formulario-de-edicion-de-registros
8) http://www.todoexpertos.com/mitodoexpertos/expert/questions/view/2498675/formulario-para-eliminacion-de-registros
Estimado Experto Carlos, quedo muy agradecido por su ayuda com siempre! Ahora tengo una perspectiva más clara sobre el asunto. Leeré los pasos para crear el maestro ABM completo. Ha sido de gran utilidad toda su explicación sobre el tema. Muchas Gracias! Saludos y buen día!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas