¿Cómo liberar pantallas?

Tengo una aplicación VB que invoca un procedimiento almacenado bien sea en ORACLE o en SQLSERVER, o una DTS. Estos procedimientos se demoran mucho tiempo en su ejecución por lo que la pantalla se queda en espera y no permite al usuario trabajar más en la aplicación. Estoy trabajando con controles ADO; ¿Cómo hago para que al realizar la instrucción (.execute) del ado.command libere la pantalla mientras internamente continúa ejecutándose el proceso?

1 respuesta

Respuesta
1
Para esperar a ver si el comando funciona o no, podrías poner un control timer, habilitado al lanzar el comando y que te sirviera de tiempo de espera.
cmd_ejecucion.Execute , , adAsyncExecute
Form1.Timer1.Enabled = True
Do
DoEvents
Loop While cmd_ejecucion.State =
AdStateExecuting And Form1. Timer1. Enabled
En el evento Timer poner el Timer1. Enabled a False.
De esta manera al cumplirse un tiempo, continuaras con la ejecución normal habiéndose o no cumplido el procedimiento almacenado. El manejo del error ya lo tienes que mirar tu.
Si un procedimiento almacenado se realiza correctamente sin ser asíncrono, se tiene que hacer también de forma asíncrona salvo que tu gestor de BBDD no lo admita (un poco difícil, pero creo que hay formas de comprobarlo). Ponte algún mensaje en el evento ExecuteComplete del Command para ver si termina aunque no se produzcan cambios en las tablas (puede deberse a varias cosas, ¿tienes el command dentro de una transaccion?).
Si no quieres esperar respuesta, utiliza la opción adAsyncExecute cuando ejecutes el comando, de tal manera que se realizara de forma asíncrona y te devolverá el control a tu aplicación normal. Si la respuesta la necesitas para continuar la "futura" ejecución de tu app, después de lanzar el comando asíncrono pon un bucle con un DoEvents hasta que se haya finalizado el comando.
Oye, muchísimas gracias por tú ayuda; pero lo intento y mando el proceso a ejecutar con la instrucción así :
cmd_ejecucion.Execute , , adAsyncExecute.
Y el pasa y continúa con la siguiente; pero cuando veo las tablas que me debe actualizar el proceso no las ha actualizado, como si no estuviera ejecutando el proceso. Por otro lado yo si necesito la respuesta para continuar con la siguiente instrucción, intenté con un ciclo (no sé si sea igual a DoEvents) mientras reviso la tabla actualizada, pero en este ciclo igual no me suelta la pantalla... Muchas gracias por tú ayuda...
Please, si encuentras un tiempo finaliza la pregunta, que esta pendiente desde finales de Julio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas