La Web del Programador: Comunidad de Programadores
 
    Pregunta:  5887 - 400.000 REGISTROS!!!
Autor:  Luis
Hola, programo en Visual C++.

Problema : Necesito mostrar en un control 'CListCtrl' 400.000 registros. No quiero utilizar los ActiveX ADO (DBGrid) puesto que accedo a los datos de la tabla directamente (no mediante ODBC). Lo que quiero es derivar la clase MFC 'CListCtrl' (p.e. 'CMiGrid').

A resolver : El problema es que obviamente no puedo cargar los 400.000 registros de golpe (lento y memoria), pero el control debería visualizar al menos los que quepan en el área del cliente y, esto es lo importante, MOSTRAR LA SCROLLBAR VERTICAL COMO SI REALMENTE EXISTIERAN LOS 400.000 E INTERACTUAR CON ELLA, ES DECIR, SI PULSO UNO DE LOS BOTONES DE DESPLAZAMIENTO ME DESPLAZO UN REGISTRO (ARRIBA O ABAJO) EN LA TABLA Y LO CARGO EN LISTA, SI ARRASTRO EL CURSOR DE LA BARRA AVANZO X REGISTROS EN LA TABLA Y CARGO A PARTIR DE AHÍ EN LA LISTA, ETC... ES "SIMULAR" QUE ESTAN TODOS LOS REGISTROS CARGADOS AUNQUE REALMENTE NO ES ASÍ.

¿Cómo lo hago? Gracias de antemano.

  Respuesta:  Carlos Christian Molina Vega
Hola, lo que debes hacer es lo siguiente......
declarar una lista, no la vamos a llenar toda, solo unos cuantos registros.
Declarar una funcion que se encargue de borrar la lista y volverla a llenar cada vez, con la cantidad de registros que se necesitan desplegar, 3 o cuatro.... por ejemplo, ademas debe de llevar un parametro con la posicion inicial de la base de datos.
Dibujar un scroll vertical, al lado de la lista.
Crear una variable en la clase, que mantendra el numero de registros de la tabla.
Otra variable que lleva la posicion actual en el registro de base de datos.
Al scroll se le inicializa la propieda min con 0, y max con la cantidad de registros -1
Al cambiar el scroll,se genera un evento, desde el cual se va a llamar la funcion con la posicion actuual del scroll.
De esta forma se da la impresion de que tiene todos los datos en memoria.
Para que trabaje con las teclas, solo hay que programar que cuando llegue al inicio de la lista, a la pposicion actual, le reste uno y viceversa. Si se presiona PAGE UP, se le resta la cantidad de registros que caben en la lista, etc......
Cualquier duda enviame un correo.