Guardar cambios a registros en tabla VFP

Buen día Sr Alonso. Esta es mi consulta: en un formulario tengo un textbox y 2 botones: nuevo y guardar ( y salir también). En el botón Nuevo (agregar registro) utilice, en el evento click:
SELECT mitabla1
APPEND BLANK
THISFORM.Text1.SetFocus
THISFORM.Refresh
y para guardar los registros en la tabla, en eevento click del botón guardar:
IF THISFORM.Text1.value = 0 then
Messagebox('falta ingresar el código')
thisform.Text1.setfocus
ELSE
ncodigoaux=thisform.Text1.value
INSERT INTO mitabla1(codigocliente) values(ncodigoaux)
Endif
En el botón guardar, si yo doy click y tengo en blanco el textbox donde guardo mis datos, aparece el aviso "falta ingresar código" y me regresa al text el puntero... No obstante, el registro se guarda en blanco en la tabla al dar click. Cuando regreso a corregir y coloco el dato correcto y doy click en guardar, el dato se almacena... Pero me quedan 2 registros en la tabla: uno en blanco, resultante del primer intento y otro con el dato correcto. Como puedo hacer para que, al dar click en guardar, si el text esta en blanco, no permita la grabación de registros en la tabla, ¿sino hasta que corrija el valor? Gracias de antemano! XD
Respuesta
1
Eso se debe a que estás utilizando Append Blank e Insert SQL juntos ambas cláusulas agregan registros en la tabla solo que la diferencia es que Append Blank deja registros en Blanco e Insert SQL te reemplaza con valores, por eso es que en tu tabla aparecen registros en blanco la solución es una de las siguientes:
1. Establece las propiedades Datasession y BufferMode del formulario a valor 2.
2. En el evento Init del formulario escribes el siguiente código:
Set Multilocks On
Set Deleted On
Establece la propiedad ControlSource de los Controles que llenan los campos de la tabla al nombre respectivo de los mismos ejemplo:
Al control Text1 estableces su propiedad ControlSource a MiTabla1.codigocliente 
En el evento Click del botón nuevo puedes escribir el siguiente código:
Local lcModificado, lcRespuesta
lcModificado = GetFldState(-1)
If IsNull(lcModificado)
   lcModificado = "1111"
Endif
If "2" $ lcModificado Or "4" $ lcModificado
   lcRespuesta = Messagebox("¿Desea guardar los cambios realizados?", 32 + 3)
   Do Case
       Case lcRespuesta = 6
           =TableUpdate(.T.)
       Case lcRespuesta = 7
           =TableRevert(.F.)
       Otherwise
           Return
   EndCase
Endif
Append Blank
Thisform. Refresh()
Y en el evento Click del botón guardar escribes el siguiente código:
If Empty(Thisform.Text1.Value)
   =Messagebox("Debe ingresar el código.", 48, "Error")
   Return .F.
Endif
=TableUpdate(.T.)
Thisform. Refresh()
Esa es una posible solución al problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas