Visual Basic - operar mientras se abre un recordset

Life is soft - evento anual de software empresarial
 
Vista:

operar mientras se abre un recordset

Publicado por jesus (15 intervenciones) el 10/07/2006 10:52:25
Buenas, en primer lugar gracias de antemano.
Tengo una aplicación en la que utilizo varios recordset. Uno de ellos realiza consultas muy pesadas, lo que hace que aumente excesivamente el tiempo que tarda en contestar la base de datos. Tengo optimizado esto al máximo y no puedo reducir el tiempo de respuesta. Para que el usuario pueda comprobar que la aplicación no se ha quedado colgada he creado una barra de progreso que debería ir representando como se van ejecutando las diferentes instrucciones necesarias para visualizar los datos. Tengo controlado todos los puntos de este progreso, pero el que más tiempo suele llevar es la consulta y no logró que durante este tiempo la barra de progreso vaya aumentando gradualmente. Para ello he pensado utilizar un timer basandome en el tiempo máximo de respuesta de la conexión creada. Mi problema es que mientras se ejecuta el open del recordset no soy capaz de responder a más eventos, o por lo menos al que me interesa que es el del timer. He utilizado el DoEvents y no obtengo ningún resultado.
Estoy utilizando ADO 2.8, sobre una base de datos ORACLE a través de ODBC y la aplicación está realizada en Visual Basic 6.0
¿Qué puedo hacer para lograr responder a eventos mientras espero la respuesta de la base de datos?
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

RE:operar mientras se abre un recordset

Publicado por Pablo (31 intervenciones) el 11/07/2006 01:42:40
Entiendo que al ejecutar el "open", la ejecución continúa con la siguiente instrucción, aunque aún no se haya completado totalmente la consulta. ¿Cómo lo controlas?.Tienes los recordsets declarado con "WithEvents" ?.
Estoy interesado proque tengo un problema más o menos similar. . Sldos.
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

RE:operar mientras se abre un recordset

Publicado por jesus (15 intervenciones) el 11/07/2006 10:51:21
La ejecución continua, solo cuando acaba la instrucción del open, en esos segundos que a veces se queda esperando respuesta no tengo ninguna manera de poder hacer nada, se queda como colgado esperando la respuesta, no responde a ningún evento.
No tengo declarado el recordoset con withevents, intenté seguir esa línea, pero no conseguía crear la función que respondiera al evento. ¿Cómo debo operar utilizando esta opción?
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

RE:operar mientras se abre un recordset

Publicado por Pablo (31 intervenciones) el 12/07/2006 01:57:35
Pues a mi me ocurre un comportamiento del recordset, al hacer el select, que me hace llegar a la conclusión que el programa una vez manda la instruccion al motor de la base de datos y continua ejecutando las siguientes instrucciones aunque el recordset aún no se ha llenado o creado. ¿Sabes de algún caso que por la carga de usuarios con solicitudes a la base de datos simultáneamente o por ser una tabla grande ocurra esto?. O siempre el programa espera a que finalice el "open" de recordset.

Respecto a tu caso, intenta probar con lo siguiente:

Declara el recordset con eventos:

Dim WithEvents rsRecordset as ADODB.Recordset

De este modo te aparece la variable rsRecordset como un control mas (cuando ves el código) y puedes acceder por código a sus métodos y eventos.

..Hay un evento llamado FetchProgress que tiene varios parámetros, uno de ellos es un dato long que te da el nº de registros actualmente recuperados.

(Esto es lo que pone la documentación que dispongo de este método).
Este método se invoca periódicamente durante las operaciones asíncronas (!?)
para informar de cuántas filas han sido recuperada actualmente en el recordset.

P.e:
Private Sub rsRecordset_FetchProgress( ByVal Progress as Long, ByVal
Maxprogress as Long, adStatus as ADODB.EventStatusEnum, ByVal
pRecordset)
....
... Aqui utilizas el parámetro Progress para mostrar la barra de progresso
....
End Sub

Fijate en el contenido de esta página de microsoft, donde lo describe y pone un ejemplo.

http://support.microsoft.com/default.aspx?scid=kb%3Bes%3B262311

Espero que te sea útil. Sldos.
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