Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Firedac añadiendo registro ya existente al paquete actual (https://www.clubdelphi.com/foros/showthread.php?t=93183)

juniorSoft 08-06-2018 19:45:58

Firedac añadiendo registro ya existente al paquete actual
 
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 20:02:12

Y la pregunta es...

juniorSoft 08-06-2018 20: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 20:44:19

Veamos si lo he entendido. Ejemplo, tienes un select:
Código SQL [-]
select codigo, nombre from tbClientes where pais='FRANCIA';
Y luego tienes otro select:
Código SQL [-]
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 22:14:55

Cita:

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


Código SQL [-]
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

Código SQL [-]
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 02:38:00

Buscando y buscando ya lo encontre

Ahí esta por si alguno de los compañeros se le presenta algo similar.
Código Delphi [-]
FDCommand1.CommandText := 'select ... from ... where id= :id';
FDCommand1.Open;
FDCommand1.Fetch(ADQuery1.Table);
FDCommand1.Close;

Casimiro Notevi 09-06-2018 17:32:21

¿Qué es ADQuery1.Table?

juniorSoft 09-06-2018 17:58:50

Hola Casimiro

Cita:

¿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)

juniorSoft 10-06-2018 15: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

Código:

TFDMemTable(FDQuery1).AppendData(FDQuery2);

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


La franja horaria es GMT +2. Ahora son las 15:36:08.

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