Problema al validar campos vacíos en vfp

Tengo un problema estoy adaptando esta rutina sin éxito y no se a que se debe, tengo el problema que al llamarla desde el form la validación es aceptada al darle clic en el botón guardar y me muestra el mensaje y todo bien el problema es que una vez completada la forma no me guarda los datos en la tabla que corresponde: no se en que estoy fallando si me echan una manito

Utilizo esta rutina:

LOCAL lnObjecto, lcNombre, lctooltiptext, lcContenido, lcFoco

FOR lnObjecto = 1 TO THISFORM.OBJECTS.COUNT

IF THISFORM.OBJECTS(lnObjecto).COMMENT = "*"

lcNombre = THISFORM.OBJECTS(lnObjecto).NAME

lctooltiptext = THISFORM.OBJECTS(lnObjecto).TOOLTIPTEXT

lcContenido = "ThisForm." + lcNombre + ".Value"

IF EMPTY(&lcContenido)

MESSAGEBOX("Es necesario ingresar el dato: " + "-" + lctooltiptext + "-", 16, "Error - Datos pendientes por ingresar")

lcFoco = "ThisForm." + lcNombre + ".SetFocus"

&lcFoco

RETURN .F.

ENDIF

ENDIF

ENDFOR

y esto en el botón guardar, no se que estoy haciendo mal, gracias

IF thisform.validarvacios()

RETURN

ELSE 

Thisform. Grabar()

ENDIF

Y no me gurda ningún dato, pero si desactivo la rutina normal guarda

1 respuesta

Respuesta
2

La rutina que muestras al principio lo único que hace es evitar que alguno de los campos del formulario estén vacíos antes de guardar; aclaro; los campos que no deben estar vacíos son aquellos que tengan en la propiedad "comment" un asterisco (*); faltaría saber que es lo que hace el método "ValidarVacios()" y/o "Grabar()"

Muchas Gracias SysGen Argentina por tu pronta atención, la rutina esta almacenada en el método "ValidarVacios()", y en el método grabar() este el siguiente código:

codigo=VAL(m.idpersona)
estado=m.estado
SELECT tb_persona
LOCATE FOR ALLTRIM(numedoc)==ALLTRIM(m.numedoc)
IF !FOUND()
GO bottom
codigo=idpersona+1
INSERT INTO tb_persona;
(idpersona, idtipodoc,;
numedoc, apepaterno,;
apematerno, nombres,;
dirpersona,region,;
provincia,distrito,celuperson,;
escivil,fonoperson,;
mailperson, estado);
values;
(codigo,m.idtipodoc,;
m.numedoc, m.apepaterno,;
m.apematerno, m.nombres,;
m.dirpersona, m.region,;
m.provincia, m.distrito,;
m.celuperson, m.escivil,;
m.fonoperson, m.mailperson,;
estado)
*deshabilitobotones

thisform.inactiva ()

MESSAGEBOX("Se ha grabado correctamente",064,"Registro de cliente")
thisform.Refresh
ELSE
MESSAGEBOX("Ya existe el Doc. de Identidad",0,"Aviso del Sistema")
ENDIF

* a pesar de llenar primero todos los campos me ejecuta la método de grabar, pero si deshabilito el método validarvacios graba normal, gracias por tu tiempo

Ya vi el error Ronvil; esta en ésta parte del código...

IF thisform.validarvacios()
    RETURN
ELSE 
    Thisform. Grabar()
ENDIF

Solo deberías agregar un ! A la primera línea.

IF !thisform.validarvacios()
    RETURN
ELSE 
    Thisform. Grabar()
ENDIF

Te explico; al consultar la rutina validarvacios esta te devuelve .F. si encuentra unos de los campos vacíos y se posa en el mismo; pero si están todos llenos la consulta de IF ENDIF te dará .T. en la primera línea y no llegará nunca al ELSA, con lo que la siguiente línea a ejecutar será RETURN.

Otra cosa a modo comentario solamente; un GO BOTTON o GO (lo que sea) es inútil ante un INSERT ya que estés donde estés posado, siempre el INSERT ira al fondo de la tabla y se quedará posado sobre el mismo registro que agregó.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas