La Web del Programador: Comunidad de Programadores
 
    Pregunta:  2791 - CONSULTAS ASINCRONAS CON VB 6.0
Autor:  Mario Urbano
Hola,
Tengo un problema con las consultas que devuelven demasiados registros. Al ejecutar por ejemplo : rsVoucher1.Open "SELECT VOUCHER1.*, TIPO_ANA.TAnDsc, CUENTAS_.CCtNmb FROM (CUENTAS_ INNER JOIN VOUCHER1 ON CUENTAS_.CCtCdg = VOUCHER1.CCtCdg) INNER JOIN TIPO_ANA ON CUENTAS_.TAnCdg = TIPO_ANA.TAnCdg Where (((VOUCHER1.EmpCdg) = 1) And ((VOUCHER1.TVcCdg) = 1) And ((VOUCHER1.VcrMes) = 5) And ((VOUCHER1.VcrAno) = 2000) And ((VOUCHER1.VcrCrr) = 5))", Connec.conn
La conección se encuentra asincrona, por lo tanto aunque la query extrae muchos registros, igual la ejecución funciona rápido. El problema es cuando quiero mostrar ese tremendo recorset en una grilla. La carga de la grilla, la hago con un While hasta el EOF del recorset, pero esto es demaciado lento y la aplicación me queda colgada hasta que la grilla se encuentra totalmente llena. Si alguien sabe como hacer esta carga de otra manera y me puede ayudar a mejorar el performance de mi aplicación se lo agradecería mucho.

  Respuesta:  lala amigo
dentro del ciclo do while escrivi la instruccion "doevents" en la ultima linea de codigo antes del loop, va a tardar lo mismo, pero no se va a colgar la aplicacion

  Respuesta:  Joseba Tellería Miguel
Igual esto te ayuda un poco a agilizar la lectura.
Si en vez de hacer un While not x.EOF...Wend, haces algo tal que así:
X.MoveLast
variable=X.RecordCount (RowCount o lo que sea)
X.MoveFirst
For variable2=1 to variable
....
....
X.MoveNext

Next variable2

Con esta forma de leer ganas más o menos un 33% en velocidad, ya que cada vez que nos movemos por los registros no necesita checkear si se ha llegado al final del Recordset (esto lleva bastante tiempo).

Espero haberte servido de alguna ayuda.