Ver Mensaje Individual
  #3  
Antiguo 07-11-2025
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
También puedes ejecutar cada sql en una transacción distinta.
Yo lo hago así en Delphi:

Código Delphi [-]
// Devuelve una transacción Read Write asociada a la base de datos
function DameTransactionRW(BaseDeDatos: TFIBDatabase; Q: TComponent = nil): TFIBTransaction;
begin
  Result := TFIBTransaction.Create(Q);
  with Result do
  begin
     DefaultDatabase := BaseDeDatos;
     TRParams.Clear;
     TRParams.Add('read_committed');
     TRParams.Add('rec_version');
     TRParams.Add('nowait');
  end;
end;

// Devuelve una transacción Read Only asociada a la base de datos
function DameTransactionRO(BaseDeDatos: TFIBDatabase; Q: TComponent = nil): TFIBTransaction;
begin
  Result := TFIBTransaction.Create(Q);
  with Result do
  begin
     DefaultDatabase := BaseDeDatos;
     TRParams.Clear;
     TRParams.Add('read_committed');
     TRParams.Add('read');
  end;
end;


// Ejemplo dentro del código
function DameId(Generador : string) : integer;
begin
  with THYFIBQuery.Create(nil) do
  begin
     try
        Close;
        DataBase := DMMain.DataBase;
        Transaction := DameTransactionRW(DMMain.DataBase);
        try
           if (not Transaction.InTransaction) then
              Transaction.StartTransaction;
           SelectSQL.Add('SELECT GEN_ID(' + Generador + ', 1) FROM RDB$DATABASE');
           ExecQuery;
           Result := FieldByName('GEN_ID');
           Close;
           Transaction.Commit;
        finally
           Transaction.Free;
        end;
     finally
        Free;
     end;
  end;
end;
Responder Con Cita