PDA

Ver la Versión Completa : Partial Load Mode --- QuantumGrid


Willo
09-09-2008, 23:31:03
Hola a todos;

pues sigo experimentando con el QuantumGrid 5... he leido que existe una forma de cargar mas rapido un gran numero de registros. Se que la propiedad se llama Partial Load Mode... pero... alguien sabe en donde esta?

la he buscado en las propiedades del Grid, en las del Nivel y en las del DBtableview... sin suerte....

Agradezco de antemano cualquier ayuda.

Willo

donald shimoda
09-09-2008, 23:40:18
Hola a todos;

pues sigo experimentando con el QuantumGrid 5... he leido que existe una forma de cargar mas rapido un gran numero de registros. Se que la propiedad se llama Partial Load Mode... pero... alguien sabe en donde esta?

la he buscado en las propiedades del Grid, en las del Nivel y en las del DBtableview... sin suerte....

Agradezco de antemano cualquier ayuda.

Willo

Uso quantumgrid y nunca use dicha propiedad, ni la encuentro tampoco. Revise los fuentes y menos. Estas seguro que ese es el nombre?

Saludos

TOPX
09-09-2008, 23:45:16
Hola,

Se llama Grid Mode, y debe tener en cuenta que en ese modo no sirven los filtros ni otras cositas...

Edit:

Grid Mode
When using Grid Mode, only a fixed number of dataset records is loaded into memory. Because only a limited set of records are retrieved from the dataset, automatic sorting, filtering and summary calculations are disabled in Grid Mode (must be controlled manually instead). By default, this mode is disabled and the ExpressDataController loads all records in a dataset.

donald shimoda
09-09-2008, 23:55:03
Hola,

Se llama Grid Mode, y debe tener en cuenta que en ese modo no sirven los filtros ni otras cositas...

Edit:

Ah, ahora si, esa la uso, pero lo dejo elegir al usuario , sabiendo que sacrifica (bueno no se si sabiendo, al menos me dicen que si con la cabeza):D

Neftali [Germán.Estévez]
10-09-2008, 09:17:00
Las Quantum son buenas, pero no hacen milagros... :D:D:D:D

Es lo que ya hemos comentado otras veces aquí. Por defecto las QuantumGrid cargan TODOS los datos en memoria; Con todos los datos cargados pueden hacer los filtros, ordenaciones, agrupaciones, totales y demás.

El problema, como tu planteas, llega cuando no se pueden cargar TODOS los datos. Para eso se usa el Grid Mode, pero entonces se pierde lo demás.

El Grid provee eventos para que si el usuario pulsa sobre el título para ordenar o intenta realizar un filtro te llegue el "aviso" y puedes rehacer la consulta (por ejemplo), pero el tema de agrupaciones y totales creo que queda definitivamente descartado.

Un saludo no milagroso. ;)

Willo
11-09-2008, 16:24:00
Debido a este problema (el manejo de grandes cantidades de registros); estamos reconsiderando el cambio a QuantumGrid; actualmente nuestra aplicacion usa el CRDBGrid de CoreLab.

Que si bien no es tan atractivo ni con tantas opciones como el Quantum, pues al menos maneja eficientemente grandes volumenes de registros.

Es una verdadera lastima, ya que nos habian gustado mucho las opciones que ofrecia el Quantum.

en fin... se comprueba una vez mas que el mundo no es perfecto

lbuelvas
11-09-2008, 17:18:54
Bueno y los componentes nativos de Delphi TDBGrid tambien carga todos los registros ?

donald shimoda
11-09-2008, 17:25:14
Bueno y los componentes nativos de Delphi TDBGrid tambien carga todos los registros ?

Claro que los carga... Cual es la pregunta?
El problema es que el amigo quiere la versatilidad de los quantum sin que demore en cargar.

Creo que el secreto esta en restingir el conjunto de datos a manejar. ;)

ninguno
11-09-2008, 17:34:29
Claro que los carga...

Eso no es del todo cierto, depende del Dataset asociado al TDBGrid. Por ejemplo, si tienes un TClientDataSet, puedes hacer que te vaya cargando en paquetes de 20 registros (por decir algo) o bien todos a la vez.

En cambio, los QuantumGrid no tienen en cuenta el Dataset, lo cargan todo (si no se toca dicha propiedad).

Creo que el secreto esta en restingir el conjunto de datos a manejar. ;)

En eso sí estamos de acuerdo. No creo que a nadie le interese tener cargados.... digamos más de 1000 registros; que ya considero demasiados, de heche, más de 100 registros no se los mira nadie. Y si es para hacer algún tipo de cálculo, pues se hace el cálculo por separado pero los datos visualizados se filtran.

donald shimoda
11-09-2008, 17:38:15
Eso no es del todo cierto, depende del Dataset asociado al TDBGrid. Por ejemplo, si tienes un TClientDataSet, puedes hacer que te vaya cargando en paquetes de 20 registros (por decir algo) o bien todos a la vez.

Pero en ese caso no decide el grid amigo, lo hace el dataset, asi que en realidad el grid esta cargando el conjunto de datos completo que brinda el dataset.:o
El grid no sabe si le pediste 20 o el conjunto de datos completos.

ninguno
11-09-2008, 17:43:09
Pero en ese caso no decide el grid amigo, lo hace el dataset, asi que en realidad el grid esta cargando el conjunto de datos completo que brinda el dataset.:o
El grid no sabe si le pediste 20 o el conjunto de datos completos.

No se si yo entendí mal o me expliqué mal :p

Entiendo que lbuelvas pregunta si el TDBGrid actua igual que el QuantumGrid, es decir, que sea cual sea el DataSet asociado y su configuración, cargue todos los registros; y eso es lo que estaba intentando explicar, es decir, que QuantumGrid es independiente del TDataSet asociado, él los carga todos esté detrás un TClientDataSet a 20 registros o a 50. En cambio, el TDBGrid sí depende del TDataSet asociado ya que sólo "cargará" los registros que le "envíe" el DataSet asociado.

Me he explicado mejor ahora? :p

donald shimoda
11-09-2008, 17:53:29
Me he explicado mejor ahora? :p

Claro amigo, clarísimo, aunque incorrecto. ;)

En ambos casos, QuantumGird o Dbgrid, o el que sea grid, cargaron los datos que le proporcione el dataset, ni mas ni menos. Si el clientdataset esta configurado para traer de a 20 registros, asi sera porque el quantumgrid no puede gobernar el conjunto de datos del clientdataset, se entiende?

Saludos.

ninguno
11-09-2008, 18:35:43
Hola

En ambos casos, QuantumGird o Dbgrid, o el que sea grid, cargaron los datos que le proporcione el dataset, ni mas ni menos. Si el clientdataset esta configurado para traer de a 20 registros, asi sera porque el quantumgrid no puede gobernar el conjunto de datos del clientdataset, se entiende?

La verdad es que no lo he probado, pero ¿estás seguro de eso? Yo creo que las QuantumGird le irán pidiendo registros al Dataset hasta llegar al Eof (de otra manera no podrían hacer ordenaciones ni filtrados ni nada), por lo que dará lo mismo cómo esté éste configurado (repito, creo ya que no lo he probado). En cambio, el DBGrid sólo le pedirá al Dataset los registros que necesite hasta llenarse de datos.

maeyanes
11-09-2008, 18:40:39
Hola...

Hola
La verdad es que no lo he probado, pero ¿estás seguro de eso? Yo creo que las QuantumGird le irán pidiendo registros al Dataset hasta llegar al Eof (de otra manera no podrían hacer ordenaciones ni filtrados ni nada), por lo que dará lo mismo cómo esté éste configurado (repito, creo ya que no lo he probado). En cambio, el DBGrid sólo le pedirá al Dataset los registros que necesite hasta llenarse de datos.

El QuantumGrid nunca va a pedir más datos que los que le devuelve el DataSet... ahora, si usas la propiedad GridMode, entonces este se comporta como un grid normal, pidiendo al DataSet solo los datos que va a mostrar, pero como bien dicen, todas las opciones extras que tiene (ordenamiento, agrupación, totales, etc...) ya no son automáticas...



Saludos...

ninguno
11-09-2008, 18:55:43
Hola

Pues mira, me ha picado la curiosidad y tenía que probarlo.

Pongo en un formulario una conexión

TDBGrid o TcxGrid -> TDataSource -> TClientDataSet -> TDataSetProvider -> TTable

El TTable configurado como:
- DataBaseName = DBDEMOS
- TableName = customer.db

El TClientDataSet como:
- PacketRecords = 10

El TDBGrid o TcxGrid lo suficientemente pequeños como para que no quepan más de 10 registros.

Pongo un TEdit (para sacar el resultado de la prueba) y un TButton con el siguiente código:

ClientDataSet1.Open;
Edit1.Text := IntToStr(ClientDataSet1.RecordCount)


Resultado de la prueba:
- con TDBGrid: me marca 10 registros
- con TcxGrid: me marca 55 registros

Como suponía, el TcxGrid va pidiendo registros al TClientDataSet hasta llegar a Eof, por lo que NO se comportan de la misma manera. Uno depende directamente del DataSet y el otro "pasa" del DataSet pidiéndole todos los datos.

donald shimoda
11-09-2008, 19:16:09
La verdad es que no lo he probado, pero ¿estás seguro de eso?


Como que me llamo Pedro Navajas. :p

donald shimoda
11-09-2008, 19:18:17
Como suponía, el TcxGrid va pidiendo registros al TClientDataSet hasta llegar a Eof, por lo que NO se comportan de la misma manera. Uno depende directamente del DataSet y el otro "pasa" del DataSet pidiéndole todos los datos.

Desactiva fetchondemand y veras que hace...;)

Willo
11-09-2008, 20:01:45
Se ha generado una buena discusion al respecto;

Pero finalmente la experiencia muestra una notable diferencia en velocidad de respuesta, entre Quantum y el grid usamos.

CRdbgrid (de DEVART -antes corelab-) "carga" hasta 20 veces mas rapido en una ventana que muestra 20 registros de un tabla en MySQL que contiene 247,000; que la misma pantalla usando Quantum.

Ahora bien, CRdbgrid usa los filtros hasta que el usuario los "confirma" y segun vi Quantum va "filtrando" la informacion conforme se teclea el filtro); las ordenaciones son mas rapidas en quantum que en CRdbgrid, pero no mucho....

ninguno
11-09-2008, 20:14:53
Hola

Desactiva fetchondemand y veras que hace...;)

Hombre, normal, pero es que entonces estás forzando a que los paquetes de registros tengas que requerirlos tú por código mediante el método GetNextPacket. Es decir, un TDBGrid tampoco podrá llegar a tener nunca todos los registros del dataset si no es explícitamente mediante código, cosa que no pasa si esta propiedad está activada.

En fin, que algunos vemos el vaso medio lleno y otros medio vacío ;)

ninguno
11-09-2008, 20:17:17
Hola

....segun vi Quantum va "filtrando" la informacion conforme se teclea el filtro)....

Bueno, esto es configurable, puedes hacer que se realice el filtrado a medida que escribes o bien al aceptar lo escrito. Lo que no recuerdo cual era la propiedad (si quieres puedo mirar de buscártela) :)

Willo
11-09-2008, 20:39:44
Bueno, esto es configurable, puedes hacer que se realice el filtrado a medida que escribes o bien al aceptar lo escrito.

Me imagino que esto soluciona la lentitud al momento del filtrado, cosa que ya de si es excelente....

Pero el problema de la carga inicial de los registros, veo que es cosa totalmente aparte.

Neftali [Germán.Estévez]
12-09-2008, 11:02:28
Bueno y los componentes nativos de Delphi TDBGrid tambien carga todos los registros?

Como ya te han dicho, depende de cómo tengas configurada la fuente de datos.

En ambos casos, QuantumGird o Dbgrid, o el que sea grid, cargaron los datos que le proporcione el dataset, ni mas ni menos.

Bueno, no siempre es así, o al menos el Grid de las Quantum no se comporta como el estandard.
En el case de ADO, que es el que más manejo, se puede configurar la fuente de datos para funcionar en modo Server-side (cursor en el lado servidor), con esto consigues que el Grid estandard de Delphi, no cargue todos los registros al abrir, sino que los vaya cargando a medida que los va necesitando. En este caso, los datos se piden bajo demanda, pero lo hace el DBGrid de forma automática.
La sorpresa es que la misma configuración la "enganchas" al Grid de las Quantum, y al abrir se recorre TODO el Dataset y carga todos los datos. :eek::eek:

Es decir, el Grid de las Quantum, hace "algo más" que el estandard.
Se puede corregir con la propiedad que hemos comentado, pero el funcionamiento es distinto.

ninguno
12-09-2008, 19:10:55
Hola Neftali

La sorpresa es que la misma configuración la "enganchas" al Grid de las Quantum, y al abrir se recorre TODO el Dataset y carga todos los datos. :eek::eek:

Es decir, el Grid de las Quantum, hace "algo más" que el estandard.

Como he dicho en un mensaje anterior (http://www.clubdelphi.com/foros/showpost.php?p=313590&postcount=15), las Quantum piden al dataset asociado todos los registros siempre (a no ser que se retoque la susodicha propiedad) sino, no es capaz de hacer lo que hace (filtrados, ordenación de datos,.....). En cambio, un Grid estándar, sólo pedirá al dataset los datos necesarios para rellenarse de ellos.