PDA

Ver la Versión Completa : Datasnap no puedo actualizar con deltas


Elias011267
23-05-2023, 17:31:13
Hola que tal. He comenzado en el camino de datasnap rest, Ya comence mi aplicacion, decidi trabajar en la modalidad firedac en server y client (solo app delphi) uso el componente Data.FireDACJSONReflect, para tal fin. La conexion remota lo hace correctamente y relleno mis objetos (list box y Dbgrid) perfectamente. El problema es que aun no agarro el tino cuando voy a actualizar las tablas ya que lo hago con los deltas, se supone que con unas cuantas lineas de codigo debería funcionar, pero aun no lo consigo. lo he hecho de manera automatica y de manera manual pero en ambas no funciona. Abajo les muestro el codigo para ver si alguien me dice donde esta mi falla
***********************

//Servidor modo manual
procedure TServerMethods1.act_movilizar(listadelta: tfdjsondeltas);
var
LAct: IFDJSONDeltasApplyUpdates;
taux: tfdmemtable;
tsql: string;
begin
lact:= tfdjsondeltasapplyupdates.Create(listadelta);
taux:= lact.Values[0];
taux.Filterchanges:= [rtmodified, rtinserted, rtdeleted];
taux.First;
try
while not taux.Eof do
begin
if taux.UpdateStatus= usmodified then
begin
tsql:= 'update movilizador set mov_telefono= '+
taux.FieldByName('mov_telefono').Text +'where mov_cedula= ' +
taux.FieldByName('mov_cedula').Text ;
conexion.ExecSQL(tsql);
end;
taux.Next;
end;
conexion.Commit;
except on e:exception do
begin
conexion.Rollback;
raise Exception.Create(LAct.Errors.Strings.Text);
end;
end;
end;

//Metodo Servidor Modo Automatico
procedure TServerMethods1.act_movilizador(const ADeltaList: TFDJSONDeltas);
var
LAct: IFDJSONDeltasApplyUpdates;
begin
LAct := TFDJSONDeltasApplyUpdates.Create(ADeltaList);
conexion.StartTransaction;
LAct.ApplyUpdates(0,qmovilizador.Command);
if LAct.Errors.Count > 0 then
begin
raise Exception.Create(LAct.Errors.Strings.Text);
conexion.Rollback
end else conexion.Commit;
end;

//Metodo en cliente
uses ClientModuleUnit2;
procedure TForm1.act_movilizadores;
var
lisdelta: tfdjsondeltas;
begin
if tmoviliza.State in dseditmodes then tmoviliza.Post;
lisdelta:= tfdjsondeltas.Create;
tfdjsondeltaswriter.ListAdd(lisdelta, tmoviliza);
ClientModule2.ServerMethods1Client.act_movilizador(lisdelta);
end;/



***** Gracias

Casimiro Notevi
23-05-2023, 21:48:15
Me parece que no has dicho qué problema tienes.

Elias011267
23-05-2023, 21:52:34
Gracias Casimiro por responder pronto. Mi problema es que no puedo modificar, ni insertar registros en las tablas, solo consulta. No me arroja ningun error pero no actualiza las tablas

Casimiro Notevi
23-05-2023, 22:00:19
Así de primeras, yo pondría un espacio antes del where
taux.FieldByName('mov_telefono').Text +'where mov_cedula= ' +
taux.FieldByName('mov_telefono').Text +' where mov_cedula= ' +

Elias011267
24-05-2023, 09:49:34
Casimiro, realicé tu corrección pero no funciona. De hecho, cree otro servidor y lo usé de manera local y tampoco funciona. Es mi primera aplicación con datasnap y ya me estoy frustrando

Casimiro Notevi
24-05-2023, 13:36:11
Te paso un video de un ejemplo simple, creo que te servirá.


JFONiqdj0t4

egostar
24-05-2023, 19:18:29
Si sigues este tutorial te funcionará perfectamente el asunto de los Deltas.

Using a REST DataSnap Server with an Application and FireDAC (https://docwiki.embarcadero.com/RADStudio/Sydney/en/Tutorial:_Using_a_REST_DataSnap_Server_with_an_Application_and_FireDAC)

Saludos

egostar
24-05-2023, 19:24:25
Yo seguí el tutorial y funciona a la perfección.

Modifiqué LAST_NAME en el detalle del empleado utilizando la función ApplyUpdates del servidor DataSnap.

https://www.delphienmovimiento.mx/wp/wp-content/uploads/2023/05/imagen_2023-05-24_112314658.png

Saludos

Elias011267
24-05-2023, 20:15:44
Hola Casimiro. Te cuento mi falla (Novato al fin) era que la memtable (tmoviliza) en mi aplicacion cliente tenía la propiedad cacheupdate= False, solo la cambie y funcionó. Disculpa la molestia.

Elias011267
24-05-2023, 20:16:41
De todas maneras voy a estudiar el video y el tutorial para pulirme mas... Gracias