PDA

Ver la Versión Completa : Firedac añadiendo registro ya existente al paquete actual


juniorSoft
08-06-2018, 18:45:58
Hola de nuevo Amigos,

Les planteo mi inquietud:

Utilizando Firedac con Delphi Berlin tengo lo siguiente

un Formulario con un DBGrid en el cual realizo busquedas conectado a un FDQuery, en dicho formulario un toolbar para realizar distintas tareas(insertar, modificar, etc) un (CRUD), estas tareas la realizo en un formulario modal conectado a otro FDQuery, la idea es que si realizo busquedas en el primer FDQuery y dicho FDQuery tiene ya un conjunto de resultados al yo añadir un registro en el formulario Modal con el otro FDQuery ver el nuevo registro sin perder el conjunto de resultados anterior del primer FDQuery.

Saludos,

Casimiro Notevi
08-06-2018, 19:02:12
Y la pregunta es...

juniorSoft
08-06-2018, 19:27:31
Hola Casimiro, disculpas

La Pregunta es ¿Como puedo incluir un registro insertado en un dataset A en el paquete de registros ya consultados de otro dataset B? Ojo con el metodo Refresh de los FDQuery se puede refrescar la consulta y obtener el registro siempre y cuando este coincida con las condiciones de los filtros actuales. Pero la idea es que aunque no coincidan los filtros actuales aparezca el registro insertado y que el usuario se percate de que este se inserto.

Casimiro Notevi
08-06-2018, 19:44:19
Veamos si lo he entendido. Ejemplo, tienes un select:
select codigo, nombre from tbClientes where pais='FRANCIA';
Y luego tienes otro select:
select codigo, nombre from tbClientes where pais='RUSIA';
Y quieres que el registro del segundo select se añada al primer select.

Obviamente eso no es posible.


La verdad es que no se me ocurre el motivo de querer complicarte la vida con eso.

juniorSoft
08-06-2018, 21:14:55
La verdad es que no se me ocurre el motivo de querer complicarte la vida con eso.


Quizas no me he dado a entender muy bien

Tomando como ejemplo la misma consulta


select codigo, nombre from tbClientes where pais='FRANCIA';

si tengo un FDQuery que tiene esta consulta y me las muestra en un grid a lo mejor trae muchos registros y las actualizaciones las estoy realizando en un FDQuery que se limita a un registro

select codigo, nombre from tbClientes where idCliente=:idCliente;


Cuando inserto dicho registro utilizando este segundo FDQuery lo que deseo es que aparezca en el resultado del primero aunque el primero tenga una condición distinta al que estoy insertando para que el usuario se percate de que se inserto. Con los DatasetProvider y ClientDataset esto se realiza fácilmente por lo que en Firedac debe ser igual de fácil. En una aplicación en 3 capas en el afterApplyUpdate del Provider puedo realizar una consulta condicionándola por el registro insertado y añadiendola al paquete que registros que tiene cargado el primero y luego en el afterApplyUpdate del ClientDataset con el metodo AppendData() en la capa de presentación puedo visualizar el registro junto con los que tiene cargado.

Estoy evita tener que consultar de nuevo el paquete de registros completo ademas de que las actualizaciones se realizan utilizando un dataset configurado exclusivamente para actualizaciones mientras que el otro que esta orientado exclusivamente a consultas

juniorSoft
09-06-2018, 01:38:00
Buscando y buscando ya lo encontre

Ahí esta por si alguno de los compañeros se le presenta algo similar.

FDCommand1.CommandText := 'select ... from ... where id= :id';
FDCommand1.Open;
FDCommand1.Fetch(ADQuery1.Table);
FDCommand1.Close;

Casimiro Notevi
09-06-2018, 16:32:21
¿Qué es ADQuery1.Table?

juniorSoft
09-06-2018, 16:58:50
Hola Casimiro

¿Qué es ADQuery1.Table?

Ahora que me fijo hay un error ahí, podriamos llamarlo FDQuery1 (A) el cual corresponde al fdquery al que le deseo agregar los datos del otro FDQuery(B), pero aun sigo teniendo inconvenientes porque me esta quitando los datos anteriores y me esta mostrando los del ultimo FDQuery(B) que es lo no deseo.

El link de donde busque la informacion esta aquí, si alguien lo ha podido mejorar, agradezco su colaboración.

Fetching and Populating Questions (FireDAC) (http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Fetching_and_Populating_Questions_(FireDAC))

juniorSoft
10-06-2018, 14:32:42
La programación se trata de prueba y error, al fin di con el cometido

Si se trata el FDQuery como un FDMemTable, con una sola linea esta resuelto

TFDMemTable(FDQuery1).AppendData(FDQuery2);


Con ello se incluye el registro insertado en el FDQuery2 al paquete de registros abiertos de FDQuery1