Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
Smile Cargar tabla Access en un TListView

Como se podría hacer para cargar una tabla de Access de tres campos (entero largo, char(120), doble) en un TLisView con la mayor rapidez posible.

Yo lo hacía registro por registro pero el listview cambia al hacer click y ralentiza un poco.

Por lo menos, ¿cómo puedo hacer que no se vea nada hasta que esten realmente cargados?.

Gracias por vuestro tiempo.
Hasta otra.
Responder Con Cita
  #2  
Antiguo 19-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Posteado originalmente por dabas
Como se podría hacer para cargar una tabla de Access de tres campos (entero largo, char(120), doble) en un TLisView con la mayor rapidez posible.

Yo lo hacía registro por registro pero el listview cambia al hacer click y ralentiza un poco.

Por lo menos, ¿cómo puedo hacer que no se vea nada hasta que esten realmente cargados?.
La segunda pregunta es muy sencilla:

Código:
ListView.Items.BeginUpdate;

{ código para cargar el listview }

ListView.Items.EndUpdate;
Pero no te recomiendo para nada este método. El listview es particularmente lento para cargar muchos registros. Con tablas de 100 o 200 registros funciona pero tablas mayores, 500 o más registros, es muy lento.

Sin embargo esto no quiere decir que no se pueda usar el listview. Lo que tienes que hacer es ponerlo en modo virtual.

Un listview virtual carga los datos conforme los va necesitando, esto es, conforme el usuario se desplaza por los items de manera que la visualización de los datos es inmediata. De hecho este modo virtual es lo que utiliza un DBGrid a final de cuentas.

Hice una pequeña prueba abriendo una tabla de Access con 74000 registros y el despliegue comienza en 2 segundos pero en realidad es el tiempo que tarde la conexión ADO en abrir. Tanto el listview como el dbgrid que usé en la prueba desplegaron los datos al mismo tiempo.

Una vez abierta la conexión el despliegue y desplazamiento por el listview son inmediatos.

Para usar el listview en modo virtual tienes que poner en true su propiedad OwnerData e indicarle cuántos items va a tener (o sea, el número de registros en la tabla). Los datos se los proporcionas en el evento OnData que pasa un parámetro Item que debes llenar según el registro que le toque (que será el marcado por la propiedad Index de Item):

Código:
procedure TForm1.AbrirTabla;
begin
  AdoTable.Open;
  ListView.Items.Count := AdoTable.RecordCount;
end;

procedure TForm1.ListViewData(Sender: TObject; Item: TListItem);
begin
  // Colar el cursor de la tabla al índice requerido
  // Se suma 1 porque RecNo comienza en 1 e Item.Index en 0
  AdoTable.RecNo := Item.Index + 1;
  with Item do
  begin
    Caption := AdoTable.FieldByName('campo1').AsString;
    SubItems.Add(AdoTable.FieldByName('campo2').AsString);
    SubItems.Add(AdoTable.FieldByName('campo3').AsString);
  end;
end;
Yo utilicé ADO pero será similar si usas BDE u otra cosa.

// Saludos
Responder Con Cita
  #3  
Antiguo 23-10-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
Gracias, me ha ayudado mucho
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:34:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi