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)
-   -   Transacciones Con DataSnap (https://www.clubdelphi.com/foros/showthread.php?t=87169)

Chaja 23-11-2014 20:05:07

Transacciones Con DataSnap
 
Hola Gente...:

Bueno, estoy tratando de hacer cosas con DataSnap, y tengo problemas de Transacciones. Existen tales Tx en DataSanp?,
he leido con mi poco ingles, que del lado del cliente de DataSnap no hay transacciones explicitas, con tan solo hacer ApplyUpdate de ClientDataSet es suficiente. Espero haber ledido bien, es mas en un video de Andreano Lanuse de migracion a DataSnap creo haberlo escuchado.
Pero tengo en mi aplicaciones sin esta tecnologia, abria un tx para hacer la actualizacion de varias tablas y ejecucion de algun store procedure, y si falla algo todo queda como esta. Como hago en una aplicacion cliente de dataSnap, lo mismo que hacai antes? usos ClientdataSet, uso Interbase como base de datos, estoy con Delphi xe5, y uso comp. IBX,
Código Delphi [-]
  DMMain_2.DBXt:=DMMain_2.SQLConectionMain.BeginTransaction(TDBXIsolations.ReadCommitted);
  try
    DMStoreProcedure.spGravarLog.Close;
    DMStoreProcedure.spGravarLog.ExecProc;
    DMStoreProcedure.spGravarLog.Close;
    CDSFc.ApplyUpdate(0);
    .. 
    ... 
    .... asi otro CDS como store haya...  


  DMMain_2.SQLConectionMain.CommitFreeAndNil(DMMain_2.DBXt);
  except
    DMMain_2.SQLConectionMain.RollbackFreeAndNil(DMMain_2.DBXt);
    ShowMessage('NO se gravaron los datos...!');
 end;

es decir esto como se reemplaza en el Cliente de DSanp, o como se resuelve....


Gracias

AgustinOrtu 23-11-2014 21:06:49

El cliente no inicia ni finaliza transacciones, lo tiene que hacer el server

En ves tener procedure ActualizarTabla o lo que fuera, convertilo en una function, que te devuelve true si se pudo actualizar, o false si entra en el Except. Dentro del except ademas de retornar false haces rollback de la transaccion. Luego, en tu cliente, podes hacer algo como

Código Delphi [-]
   if (Proxy.ActualizarTabla) then
     ShowMessage('Datos actualizados')
  else
   ShowMessage('Falla al actualizar')

Chaja 23-11-2014 23:12:41

mmmm.... bien, queda claro que no se puede hacer en el cliente... pero la verdad no tengo idea como hacer... como hago en el servidor para meter Store, querys y/o ClientDataSet dentro de la Tx???


La franja horaria es GMT +2. Ahora son las 03:42:54.

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