Se cierra programa cuando cambio de sesión

Tengo una aplicación en pb 7.0, cuando ingreso por primera vez (ingreso rut y contraseña) todo esta ok, pero cuando hago click en el botón salir, tengo una opción de cerrar sesión y volverá entrar. Pero acá viene el problema, cierro todas la ventanas y hago aparecer la ventana de ingreso al sistema, ingreso un rut registrado, y me muestra el usuario que le corresponde ese rut, hasta aquí todo bien. Ingreso la contraseña, hago click en el botón aceptar, se abre el menu principal, pero solo aparece unos segundos y se cae la aplicación, no así el programa power builder.
Estoy trabajando en win xp, ya revise la propiedad del icono de acceso directo de power, y en compatibilidad no sale este sistema operativo.
Estaré agradecida con la respuesta.

1 respuesta

Respuesta
1
Por lo que me cuentas tu problema reside en algo muy sencillo, personalmente le llamo PONERSE EN EL LUGAR DEL MANEJADOR INTERNO DE LA APLICACIÓN.
Permite explicarme.
Me da la impresión que lo que haces es, abres una ventana donde solicitas el ingreso a la aplicación.
Tienes 2 botones esenciales, entrar o salir, si es entrar, entonces haces un OPEN dentro de ese botón, y abres tu aplicación., esta despliega el menu, las pantallas, etc.
El problema es que aunque no lo veas, la ventana inicial es la que utilizas como entrada de usuario, y hasta es posible que en algún momento le des CLOSE a esa ventana y si aun esta es de tipo MDI, pues resulta que todo lo demás será cerrado también.
Mi consejo es.
Cambia tu concepto de ver el flujo del sistema.
Antiguamente yo tenia el mismo concepto, pero descubrí que power builder EN CUALQUIERA DE LAS VERSIONES hasta la 8.x que es la que utilizo, tiene GRAVES PROBLEMAS PARA MANEJAR, algo que algunos programadores nos gusta utilizar, "RECURSIVIDAD", la recursividad es simplemente la acción de auto-ejecución de una función, proceso, etc.
Por ejemplo, esta es muy útil para leer el contenido de un disco.
Este tipo de técnica es aplicable a lo que tu estas haciendo, pues desde una pantalla abres otra y dentro de este posiblemente otra y otra y otra. Llega un momento en que lo que conocemos como pila, se desborda y la aplicación EXPLOTA.
Como te decía, cambia el concepto, en lugar de abrir ventana sobre ventana, simplemente encierra tu aplicación en un BUCLE, el cual esta limitado por una condición de salida.
Por ejemplo.
Digamos que tu aplicación inicia desplegando una ventana de acceso, luego esta si el acceso es correcto, abre una pantalla la cual contiene las demás ventanas de la aplicación o en otras palabras una aplicación tipo MDI.
Para empezar, tendrás que separa la ventana de acceso con la principal, puesto que estas no tienen nada que ver la una con la otra.
Para poder conocer el resultado de la ventana de acceso puedes utilizar en la ventana de acceso la instrucción CLOSEWITHRETURN, esta incluye un valor en la clase MESSAGE, (depende del tipo), y puedes evaluar el resultado de dicha acción.
Por ejemplo.
Tu ventana de acceso acepta el login y el password, adicionalmente contiene 2 botones, entrar o salir, en estos botones simplemente efectúas un cierre de la ventana, la diferencia es que en el botón entrar cierras con un CLOSEWITHRETURN(THIS, 1), y en el de salir, CLOSEWITHRETURN(THIS, 0)
Cuando la ventana cierre, el apuntador del programa regresa al origen, y es aquí donde evalúas el resultado de la ventana, por medio de la clase MESSAGE, dependiendo del valor recibido, la acción será entrar o finalizar.
Ej.
INTEGER li_result
BOOLEAN lb_loop
DO
OPEN(w_acceso)
li_result = MESSAGE.DOUBLEPARM
CHOOSE CASE li_result
CASE 0
lb_loop = FALSE
CASE 1
lb_loop = TRUE
OPEN(w_ventana_mdi)
...
...
...
..
// --> En esta área puedes incluso evaluar una segunda opción devuelta por la misma ventana MDI, por ejemplo si tienes que re-iniciar la aplicación, re-ingresar el usuario, cambio de base de datos, etc. la filosofía es la misma
END CHOOSE
LOOP WHILE lb_loop
Lo anterior es un simple ejemplo, pero la idea es muy básica, claro seguramente tendrás que evaluar la existencia del usuario, la posible conexión a la base de datos, el password correcto, y una infinidad de etc. todo esto lo puedes evaluar modulado para que tu código no sea muy grande.
Finalizando:
Como te digo yo personalmente cambie la técnica, y ahora evalúo las acciones inmediatamente después de haber cerrado cualquier ventana, puesto que el problema ESENCIAL, es simplemente la limitación de ventana que puedes abrir una sobre la otra, ( principalmente para las ventanas tipo RESPONSE), las ventajas de esta técnica es que siempre tienes libre la mayoría de memoria, (lo cual es esencial para PB), y evitas la saturación de la pila.
Ademas el control de la aplicación se hace más fácil, pues incluso puedes hasta re-utilizar varias veces una misma ventana, permitiendo esto minimizar el esfuerzo de desarrollo, el control de ventanas, y por ende, el minimizar el numero de ventanas en tu aplicación. Esto por supuesto influye en el rendimiento de la aplicación, y el tamaño de esta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas