PDA

Ver la Versión Completa : Invalid transaction object en DataSnap


giulichajari
05-01-2015, 13:34:47
Hola amigos, tengo una transaccion para insertar clientes en DataSnap, y accedo con la aplicacion cliente.
El caso es que inicio la aplicacion e inserto correctamente el primer cliente, pero si quiero volver a insertar me dice: REmote error:Invalid transaction object.

Osea los procedimientos estan bien, se me hace que faltaria destruir el objeto de transaccion, y crearlo cuando se llama al procedure, la verdad no se.

function TServerMethods1.insertarcliente(idlocalidad,DNI,cuit,cuil,cupodias:integer;
descuento,cupocheques,cupopesos,cupochequestro:Double;domicilio,nombreyape,direccion,email:string):b oolean;

var
uubicacion,upersona,ucliente:integer;
tr:tdbxTransaction;
exito:boolean;
begin

SUCURSAL.Open;
tr:=SUCURSAL.BeginTransaction();


try

begin
with qipersona do
begin
Close;
ParamByName('DNI').AsInteger:=DNI;
ParamByName('nombreyape').AsString:=nombreyape;
ParamByName('direccion').AsString:=direccion;
ParamByName('email').AsString:=email;
ExecSQL();
Free;

end
end
except
SUCURSAL.RollbackFreeAndNil(tr);

end;
try
begin
with qicliente do
begin
Close;
ParamByName('idpersona').AsInteger:=qucli.ExecSQL();
ParamByName('cuit').AsInteger:=cuit;
ParamByName('cuil').AsInteger:=cuil;
ParamByName('deuda').AsFloat:=0.00;
ParamByName('cupodias').AsInteger:=cupodias;
ParamByName('cupocheques').AsFloat:=cupocheques;
ParamByName('cupopesos').AsFloat:=cupopesos;
ParamByName('cupochequestro').AsFloat:=cupochequestro;
ParamByName('descuento').AsFloat:=descuento;
ExecSQL();
Free;
SUCURSAL.CommitFreeAndNil(tr);

exito:=True;
end
end
except

SUCURSAL.RollbackFreeAndNil(tr);
end;
Result:=exito;

end;

function TServerMethods1.insertartelefonoscliente(numero,idtipotel:integer;descripciontel:string):boolean;
var
tr:TDBXTransaction;
exito:boolean;
begin
SUCURSAL.Open;
if (SUCURSAL.InTransaction=False) then
tr:=SUCURSAL.BeginTransaction()
else
begin
try
begin
with qtelefono do
begin

Close;
ParamByName('numero').AsInteger:=numero;
ParamByName('idtipotel').AsInteger:=idtipotel;
ParamByName('descripcion').AsString:=descripciontel;
ExecSQL();

Free;
end;
end;
// si no se pudo
except
begin
SUCURSAL.RollbackFreeAndNil(tr);
exito:=false;
end;
try
with telcli do
begin
Close;
ParamByName('idc').AsInteger:=qucliente.ExecSQL();
ParamByName('idt').AsInteger:=qut.ExecSQL();
ExecSQL();

Free;
end;
except
SUCURSAL.RollbackFreeAndNil(tr);
exito:=false;

end;
SUCURSAL.CommitFreeAndNil(tr);

end;
Result:=exito;
end;

end;

function TServerMethods1.insertarubicacionescliente(idlocalidad:Integer;domicilio,descripcion:string):boolean ;

var
tr:TDBXTransaction;
exito:boolean;
begin
SUCURSAL.Open;
if (SUCURSAL.InTransaction=False) then

tr:=SUCURSAL.BeginTransaction()
else
begin
try
with qiubicacion do
begin

Close;
ParamByName('idlocalidad').AsInteger:=idlocalidad;
ParamByName('domicilio').AsString:=domicilio;
ParamByName('descripcion').AsString:=descripcion;
ExecSQL();

Free;

end;
// si no se pudo
except


SUCURSAL.RollbackFreeAndNil(tr);
exito:=false;

end;
try

with quper do
begin
Close;
ParamByName('idp').AsInteger:=qup.ExecSQL();
ParamByName('idu').AsInteger:=quu.ExecSQL();
//ParamByName('descripcion').AsString:=descripcion;
ExecSQL();
Free;
end;
SUCURSAL.CommitFreeAndNil(tr);

except


SUCURSAL.RollbackFreeAndNil(tr);
exito:=false;

end;
Result:=exito;
end;
end;