Ver Mensaje Individual
  #8  
Antiguo Hace 2 Semanas
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Reputación: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo trabajo con TFDQuery contra una base de datos Firebird, pero supongo que es más o menos lo mismo...

Código Delphi [-]
// ------------------------------------------------------------
// UNIDAD UUTILES.PAS

function DameTransactionRO(BaseDeDatos: TFDConnection; Iniciar: Boolean = False): TFDTransaction;
begin
  Result := TFDTransaction.Create(BaseDeDatos);
  with Result do
  begin
    Connection := BaseDeDatos;
    Options.AutoCommit := True;
    Options.DisconnectAction := xdCommit;
    Options.Isolation := xiReadCommitted;
    Options.ReadOnly := True;
    {
      Options.Params.Clear;
      Options.Params.Add('read_committed'); // do not localize
      Options.Params.Add('read'); // do not localize
    }

    if Iniciar and (not Result.Active) then
      StartTransaction;
  end;
end;

function DameTransactionRW(BaseDeDatos: TFDConnection; Iniciar: Boolean = False): TFDTransaction;
begin
  Result := TFDTransaction.Create(BaseDeDatos);
  with Result do
  begin
    Connection := BaseDeDatos;
    Options.AutoCommit := True;
    Options.DisconnectAction := xdRollback;
    Options.Isolation := xiSnapshot;
    Options.ReadOnly := False;
    {
      Options.Params.Clear;
      Options.Params.Add('read_committed'); // do not localize
      Options.Params.Add('rec_version'); // do not localize
      Options.Params.Add('nowait'); // do not localize
    }

    if Iniciar and (not Result.Active) then
      StartTransaction;
  end;
end;

function DameQueryRO(AOwner: TComponent; BaseDeDatos: TFDConnection): TFDQuery;
begin
  Result := TFDQuery.Create(AOwner);
  with Result do
  begin
    Connection := BaseDeDatos;
    Transaction := DameTransactionRO(BaseDeDatos, True);
  end;
end;

function DameQueryRW(AOwner: TComponent; BaseDeDatos: TFDConnection): TFDQuery;
begin
  Result := TFDQuery.Create(AOwner);
  with Result do
  begin
    Connection := BaseDeDatos;
    Transaction := DameTransactionRW(BaseDeDatos, True);
  end;
end;

// ------------------------------------------------------------
// UTILIZACION EN UN DATAMODULE

TDM = class(TDataModule)
    DB: TFDConnection;
[...]

procedure TDM.RegistraEntrada;
begin
  with DameQueryRW(Self, DB) do
  begin
    try
      SQL.Text := 'EXECUTE PROCEDURE LOG_ENTRADAS (:ID_USUARIO)';
      ParamByName('ID_USUARIO').AsInteger := Entorno.IdUsuario;
      ExecSQL;

      Close;
      Transaction.Commit;
    finally
      Free;
    end;
  end;
end;
Responder Con Cita