DataSet en memoria - Lazarus
#1
Escrito 23 enero 2011 - 08:39
Link: https://sites.google...nts/tbufdataset
En el ejemplo se muestra el llenado de datos, filtros, reset y ordenación al dar click sobre la columna.
Pretendo usar este método para filtrar y ordenar datos en una aplicación con datos sql una vez cargados en el objeto TBufSataSet que se crea en memoria, para minimizar consultas en el servidor sql para ciertos datos y acelerar el proceso de ordenación y filtro.
Si conocen una mejor manera para lo anterior agradecería el dato.
Un saludo.
#2
Escrito 23 abril 2011 - 05:14
el enlace al código fuente no es correcto. ¿podrías actualizarlo? me interesaría ver el ejemplo
Muchas gracias, saludos
#3
Escrito 23 abril 2011 - 05:54
Saludos
#4
Escrito 23 abril 2011 - 06:28
#5
Escrito 23 abril 2011 - 08:09
Q tal delphinianos, un saludos, quiero compartir un pequeño ejemplo del uso de TBufDataset en Lazarus, similar al ClientDaSet en Delphi según leí pues este último nunca lo he usado en Delphi. En el siguiente link comparto un poco de información al respecto, al mismo tiempo del código fuente de un ejemplo que he estado preparando con ayuda del wiki de lazarus, soy nuevo en el tema y necesito de su ayuda para mostrar el numero de elementos totales despues de aplicar el filtro.
Link: https://sites.google...nts/tbufdataset
En el ejemplo se muestra el llenado de datos, filtros, reset y ordenación al dar click sobre la columna.
Pretendo usar este método para filtrar y ordenar datos en una aplicación con datos sql una vez cargados en el objeto TBufSataSet que se crea en memoria, para minimizar consultas en el servidor sql para ciertos datos y acelerar el proceso de ordenación y filtro.
Si conocen una mejor manera para lo anterior agradecería el dato.
Un saludo.
Hola Freddy Gracias por el ejemplo. ¿se puede conectar el tbufdataset a un MdoQuery, por ejemplo?
#6
Escrito 24 abril 2011 - 09:00
Q tal delphinianos, un saludos, quiero compartir un pequeño ejemplo del uso de TBufDataset en Lazarus, similar al ClientDaSet en Delphi según leí pues este último nunca lo he usado en Delphi. En el siguiente link comparto un poco de información al respecto, al mismo tiempo del código fuente de un ejemplo que he estado preparando con ayuda del wiki de lazarus, soy nuevo en el tema y necesito de su ayuda para mostrar el numero de elementos totales despues de aplicar el filtro.
Link: https://sites.google...nts/tbufdataset
En el ejemplo se muestra el llenado de datos, filtros, reset y ordenación al dar click sobre la columna.
Pretendo usar este método para filtrar y ordenar datos en una aplicación con datos sql una vez cargados en el objeto TBufSataSet que se crea en memoria, para minimizar consultas en el servidor sql para ciertos datos y acelerar el proceso de ordenación y filtro.
Si conocen una mejor manera para lo anterior agradecería el dato.
Un saludo.
Hola Freddy Gracias por el ejemplo. ¿se puede conectar el tbufdataset a un MdoQuery, por ejemplo?
Si no estoy muy equivocado, el componente por defecto para acceder a Firebird, que viene integrado en Lazarus, ya es un descendiente del BufDataset, por lo que si los utilizas no te sería necesario hacer esa conexión.
NOTA: Personalmente lo único que me molesta en las pruebas que he hecho, es que tengo que mantener una transacción abierta para mantener abierto el BufDataset (a diferencia de los ClientDatasets de Delphi, donde no dejas abiertas transacciones en el servidor mientras trabaja el usuario).
Saludos.
#7
Escrito 24 abril 2011 - 09:20
Lo que apunta Marc es muy cierto, en el caso del ejemplo convendría vaciar tu query directamente en el objeto tal como lo he colocado en el boton "llenar Grid"Personalmente lo único que me molesta en las pruebas que he hecho, es que tengo que mantener una transacción abierta para mantener abierto el BufDataset
Creas y abres el TBufDataSet
if BufDataset1 = nil then begin //Se crea TBufDataSet. BufDataset1 := TBufDataset.Create(Application); //Se asigna el tamaña máximo para el índice. BufDataset1.MaxIndexesCount := 10000; //Creamos la estructura de BufDataset. BufDataset1.FieldDefs.Add('ID', ftInteger, 0, False); BufDataset1.FieldDefs.Add('DESCRIPCION', ftString, 20, False); BufDataset1.FieldDefs.Add('NUMERO', ftInteger, 0, False); BufDataset1.CreateDataset; //Asignamos al DataSource. DataSource1.DataSet := BufDataset1; end else BufDataset1.Close; BufDataset1.Open;
y posteriormente lo llenas, depende de los datos y tipo de datos especificados anteriormente, en lugar de un for, puedes utilizas un TQuery y su propiedad EOF, donde en Query1 hayas efectuado tu consulta.
While not Query1.EOF do begin BufDataset1.Append; BufDataset1.FieldByName('ID').AsInteger := Query1.FieldbyName('ID').AsInteger; BufDataset1.FieldByName('DESCRIPCION').AsString := Query1.FieldbyName('DESCRIPCION').AsString; BufDataset1.FieldByName('NUMERO').AsInteger := Query1.FieldbyName('NUMERO').AsInteger; BufDataset1.Post; BufDataset1.Next end;
Espero sea de tu ayuda, saludos.