Ver Mensaje Individual
  #1  
Antiguo 05-01-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Reputación: 12
giulichajari Va por buen camino
Invalid transaction object en DataSnap

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.

Código Delphi [-]
function TServerMethods1.insertarcliente(idlocalidad,DNI,cuit,cuil,cupodias:integer;
descuento,cupocheques,cupopesos,cupochequestroouble;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;
Responder Con Cita