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)
-   -   Invalid transaction object en DataSnap (https://www.clubdelphi.com/foros/showthread.php?t=87431)

giulichajari 05-01-2015 13:34:47

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,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;


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

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