Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Actualizar TFDMemTable (https://www.clubdelphi.com/foros/showthread.php?t=87299)

doctorhd 10-12-2014 16:23:44

Actualizar TFDMemTable
 
Hola a todos, tengo la siguiente situación y me gustaría me ayudaran. Necesito leer los datos de una tabla en una base Firebird y que el usuario refresque los datos mostrados a gusto. Para tal efecto utilizo un TFDStoredProc que arroja los datos que necesito mostrar a el enlazo un TFDMemTable, que guardara los datos en memoria y finalmente un TDataSource que enlaza los datos a una grilla de datos, hasta aqui todo bien, los datos se muestran en forma correcta, el problema ocurre cuando intento refrescar los datos mostrados utilizando la siguiente instrucción:
Código Delphi [-]
FDMemTable1.Refresh;
No refresca los datos, existiendo cambios que visualizar (los modifique directamente en la tabla).

Ahora, probé esto mismo utilizando TFDStoredProc -> TDataSetProvider -> TClientDataSet -> TDataSource y
Código Delphi [-]
ClientDataSet.Refresh;
Y funciona....Ustedes me podrán decir porque no utilizo un ClientDataSet en vez de un FDMemTable, pero la idea es ir migrando mis aplicaciones a FireDac...
Espero me puedan ayudar, les recuerdo que solo necesito leer datos.

Gracias

orodriguezca 10-12-2014 17:30:34

Si estamos usando Firedac para accesar los datos no hay razón de peso para usar TFDMemTable como un componente indiviudal, ya que cada dataset de Firedac implementa un TFDMemTable interno.

Con esto quiero decir que puedes realizar directamente las actualizaciones y refresco sobre el componente TFDStoredProc sin necesidad de "trucos" adicionales ya que siempre hay internamente un TFDMemtable para cachear los datos.. Esto es, puedes conectar directamente el datasource a tu FDStoredproc y en el código realizar FDStoredProc.Refresh. Debería funcionar.

Saludos,

doctorhd 10-12-2014 17:47:02

Gracias orodriguezca, por tu respuesta, podrias profundizar mas referente a:
Cita:

...ya que cada dataset de Firedac implementa un TFDMemTable interno.
Y si esto es cierto en que casos debería usar un TFDMemTable...

Entendido lo anterior, la instrucción:
Código Delphi [-]
FDMemTable1.Refresh;
debería funcionar, ya que el comportamiento base de este componente es similar a un ClientDataSet

Gracias

orodriguezca 10-12-2014 18:11:35

No soy un experto pero, basado en algunos desarrollos que he realizado y en la documentación consultada, puedo decirte que componentes como TFDQuery, TFDStoredProc y TFDTable hacen uso internamente de TFDMenTable para almacenar los datos de las consultas. En el caso del TFDStoredProc es como si tuvieramos un TStoredProc+TDataSetProvider+ClientDataSet en un solo componente.

Entonces, cuando utilizar un TFDMemtable?, Cuando no estamos usando Firedac para accesar los datos y deseamos utilizar la potencia del TFDMemTable o cuando necesitamos utilizar datos tabulares que no provienen de una base de datos relacional, por ejemplo, cargar datos de un archivo cvs.

Puedes consultar esta información: http://docwiki.embarcadero.com/RADSt...able_Questions


La franja horaria es GMT +2. Ahora son las 09:41:38.

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