Hola de nuevo experto, ya te he de tener hasta el gorro; ahora vengo con una duda que podría ser un tanto simple a comparación de las anteriores. Necesito hacer un botón de que interrumpa o cancele un envío de información a una base de datos. Espero pueda darme algún consejo experto, saludos y gracias de ante mano
1 respuesta
Respuesta de davsoft
1
1
davsoft, Desarrollador con 10 años de experiencia en el area de Visual...
Disculpa la demora, pero en que plataforma trabajar (xbase nativo fox dbf) o cliente servidor (mysql, oracle, etc), con eso vamos pensar un poco.
Hola, la aplicación esta elaborada en VFP, la acción 1: Interactúa de manera local al exportar dbf's a txt y posteriormente en la misma acción esos txt pasan a una BD en MySQL en un servidor. La acción 2 es seleccionar una base de datos, una de sus tablas y posteriormente su conversión a dbf en una carpeta ya asignada (esta acción no requiere su cancelación) Saludos
la verdad que cancelar la operacion implica muchas cosas, si de 1000 registros ya has grabado 950, cancelar significa para ti cancelar las proximas 50 y las 950 ya grabadas ya quedaron? o es volver atraz, si es volver atraz debera lidiar con una transaccion que puedas darle un roll back, de lo contrario hay formas de inventar una cancelación, ya sea mediante programacion, presionando escape etc, el fox en si trae una forma derealizar las cancelaciones a los calculos con el gerenciador de ambientes SET ESCAPE ON con esto, si el usuario presiona escape saldra un mensaje de cancelación al usuario, que podra seguir o continuar, aunque no es muy elegante funciona, pero recuerda desactivarlo de nuevo si lo activas, con SET ESCAPE OFF, tambien esta la opcion ON ESCAPE do miprograma.prg que te permite ejecutar alguna accion si se presiona escape, pero si no te gusta nada de estos la solucion es crear una forma de salida, pero recuerda que no se ataja facilmente un proceso, por ejemplo un do while ..., no lo vas a atajar facilemente, por ejemplo si pruebas c=0 do while c<1000 c=c+1 if lastkey()=27 exit Endif Enddo Tal vez este ejemplo no te haga tanto caso, o sea la velocidad con la que se procesa la operación hace que las pulsaciones de teclado sea pasados en segundo plano, inclusive una instalación de windows no se cancela tan rápidamente, cualquier aplicativo que algunas vez probaste y tiene un botón cancelar no hace caso al momento, pero se puede realizar varias formas, por ejemplo si tienes un botón cancelar, lo único que le pones en el evento click es cambiar el valor de algún objeto o variable que tu preguntas su estado siempre dentro del ciclo, así en vez del if lastkey()=27 pones if x=1 entonces en el evento click del botón tendrás x=1 La variable por es publica y se inicializa siempre con 0 (cero), esa es la idea, tu sabrás cual te conviene más.