Ir al contenido


Foto

DataSet en memoria - Lazarus


  • Por favor identifícate para responder
6 respuestas en este tema

#1 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 23 enero 2011 - 08:39

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.  (y)

Un saludo.
  • 0

#2 pbruccoleri

pbruccoleri

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 23 abril 2011 - 05:14

Hola Fredy..
el enlace al código fuente no es correcto. ¿podrías actualizarlo? me interesaría ver el ejemplo
Muchas gracias, saludos
  • 0

#3 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 23 abril 2011 - 05:54

Un disculpa pbruccoleri, es correcto, el link no lo habia colocado correctamente pero ya esta solucionado, espero te ayude en tu propósito.

Saludos

  • 0

#4 pbruccoleri

pbruccoleri

    Newbie

  • Miembros
  • Pip
  • 3 mensajes

Escrito 23 abril 2011 - 06:28

Hola Fredy.. muchas gracias! ya lo estoy bajando para ver su funcionamiento.

  • 0

#5 robert01

robert01

    Advanced Member

  • Miembros
  • PipPipPip
  • 162 mensajes
  • LocationArgentina

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.  (y)

Un saludo.


Hola Freddy Gracias por el ejemplo. ¿se puede conectar el tbufdataset a un MdoQuery, por ejemplo?
  • 0

#6 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

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.
  • 0

#7 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 24 abril 2011 - 09:20

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

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"
Creas y abres el TBufDataSet


delphi
  1.   if BufDataset1 = nil then begin
  2.     //Se crea TBufDataSet.
  3.     BufDataset1 := TBufDataset.Create(Application);
  4.     //Se asigna el tamaña máximo para el índice.
  5.     BufDataset1.MaxIndexesCount := 10000;
  6.     //Creamos la estructura de BufDataset.
  7.     BufDataset1.FieldDefs.Add('ID', ftInteger, 0, False);
  8.     BufDataset1.FieldDefs.Add('DESCRIPCION', ftString, 20, False);
  9.     BufDataset1.FieldDefs.Add('NUMERO', ftInteger, 0, False);
  10.     BufDataset1.CreateDataset;
  11.     //Asignamos al DataSource.
  12.     DataSource1.DataSet := BufDataset1;
  13.   end
  14.   else
  15.     BufDataset1.Close;
  16.   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.


delphi
  1. While not Query1.EOF do begin 
  2.     BufDataset1.Append;
  3.     BufDataset1.FieldByName('ID').AsInteger := Query1.FieldbyName('ID').AsInteger;
  4.     BufDataset1.FieldByName('DESCRIPCION').AsString := Query1.FieldbyName('DESCRIPCION').AsString;
  5.     BufDataset1.FieldByName('NUMERO').AsInteger := Query1.FieldbyName('NUMERO').AsInteger;
  6.     BufDataset1.Post; 
  7.     BufDataset1.Next
  8. end;



Espero sea de tu ayuda, saludos.
  • 0




IP.Board spam blocked by CleanTalk.