FoxPro/Visual FoxPro - GUARDADO AUTOMATICO

 
Vista:
sin imagen de perfil

GUARDADO AUTOMATICO

Publicado por Julian (12 intervenciones) el 21/08/2015 01:34:50
El asunto consiste en los siguiente: tengo un programa, en el cual utilizo un botón que confirma y guarda los datos mediante TABLEUPDATE(.T.), pero quisiera que si salgo del programa, por error o sin guardar este me indique: que se han realizado algunos cambios y me pregunte si deseo guardarlos antes de salir, cabe destacar que no es para un solo campo son 48 y debe hacerlo para todos ya que los cambios los puedo hacer en todos, varios, uno o ninguno, espero se entienda la propuesta del programa.

ACOTACION: sin ánimos de ofender, si saben o tienen idea, bienvenido sea de lo contrario, les pido por favor no colocar cosas ofensivas directas o indirectas pues ya pasé por una experiencia aca de ese tipo y no estoy dispuesto a pasarla de nuevo, pues me uní a este foro ya que la programación es para PROFESIONALES estudiados o no (gracias).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 309
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GUARDADO AUTOMATICO

Publicado por santiago (551 intervenciones) el 21/08/2015 16:35:01
Hola, puedes manejar el tema en la siguiente forma (se use o no el tableupdate):

1.- cada vez que el usuario desea ver información de un registro en particular, capturo la data en variables.
Ej:
campo1A = codigo
campo2A = descripcion
campo3A = direccion
campo1B = codigo
campo2B = descripcion
campo3B = direccion

etc

2.- haga lo que haga el usuario con los valores tipo A, al salir del formulario o al salir del sistema, haya o no presionado el botón grabar, comparas el valor de las variables A con las B .
IF campo1A=campo1B
** no hubo cambios, no graba nada
ELSE
** hubo por lo menos este cambio, entonces grabo la data (tableupdate)
ENDIF
IF campo2A=campo2B
** no hubo cambios, no graba nada
ELSE
** hubo por lo menos este cambio, entonces grabo la data (tableupdate)
ENDIF

3.- como veras por cada variable comparada tendrías que hacer un tableupdate, por ende no seria lo mas recomendable
4.- lo mas recomendable es que lo hagas a la antigua

replace codigo with campo1A
replace descripcion with campo2A
replace direccion with campo3A

cada replace para cada IF, de esa forma solo actualizas los valores cambiados por el usuario en las variables tipo A

5.- Solo si salen del sistema abruptamente (corte de energía, etc.), entonces se perderá la posibilidad de actualización, ya que esta se produce al salir del sistema, aunque el usuario haya cerrado los formularios con la X de la parte superior derecha y no haya presionado el botón grabar.

6.- Manejar este concepto es mas complicado de lo mencionado en las 5 consideraciones anteriores, pero ya tienes algunas ideas al respecto.
Por ejemplo: que pasa si quieres controlar esto aunque haya corte de energía (asumiendo que estas grabando en tablas .dbf), entonces debes usar un emulador Cliente Servidor llamado ADVANTAGE.

7.- Creo que lo mejor (es lo que yo hago), es quitar las X de la parte superior derecha, para que el usuario no pueda salir sin pasar por uno de dos botones: GRABAR y SALIR SIN GRABAR, de esa forma aunque el usuario se haya equivocado en asignar valores, se le da la posibilidad de decidir si graba o no graba; por ende la actualización de la data se da en ese momento y no hay necesidad de consistenciar al salir del programa.


Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fernando D. Bozzo
Val: 13
Ha disminuido su posición en 8 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GUARDADO AUTOMATICO

Publicado por Fernando D. Bozzo (15 intervenciones) el 23/08/2015 09:31:24
Hola Julián:

Cuando cerrás un formulario, normalmente lo podés hacer desde un botón "Cerrar", donde hacés ThisForm.Release(), o desde la "X" de la ventana, lo que ejecuta el evento QueryUnload.
Además de esto, cuando trabajás con buffering, normalmente es de tablas (tipo 5), por lo que en este caso tu solución puede hacerse en 2 pasos:

1) Condicionar el evento Release del form así:
IF NOT ThisForm.QueryUnload()
NODEFAULT
ENDIF

2) En el evento QueryUnload usar las funciones GetFldState, OldVal y NewVal para saber si hubo cambios en los campos (lo hacés en un FOR..ENDFOR), y dependiendo de eso podés hacer el TableUpdate() o TableRevert()


Saludos.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar