Ver Mensaje Individual
  #4  
Antiguo 06-06-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
De todos modos, creo que lo mejor sería hacer Commit y no CommitRetaining.

Luego, si es la "primera", no tentiendo porqué haces un Rollback.

Yo lo haría así, siempre y cuando la transacción no sea compartida por fTexting y otros DataSets.
Código Delphi [-]
Procedure SaveTemplate;
Begin
  // Forzamos commit cada MaxTemplatesInserteds inserciones
  If TemplatesInserteds >= MaxTemplatesInserteds Then
  Begin
    // MaxTemplatesInserteds = Constante global = 10000
    TemplatesInserteds := 0;
    fTesting.IBQuery.Transaction.Commit;
  End;
  
  // Si es la primera insercion preparo sentencia SQL
  If TemplatesInserteds = 0 Then
  Begin
    // TemplatesInserteds = Variable global,inicialmente = 0
    // Preparamos Para inserción múltiple
    
    // Si la transaccion esta inactiva, la iniciamos
    If not fTesting.IBTransaction.InTransaction Then
      fTesting.IBTransaction.StartTransaction;
      
    fTesting.IBQuery.Close;
    fTesting.IBQuery.SQL.Text := 'EXECUTE PROCEDURE INSERT_NEW_CHART(: Breack, : ChartType, : xUp, : pUp, : xxUp, : ppUp, : xDown, : pDown, : xxDown, : ppDown)';
    fTesting.IBQuery.Prepare;
  End;
  
  If fTesting.IBQuery.Transaction.InTransaction Then
  Begin
    Inc(TemplatesInserteds);
    fTesting.IBQuery.Params.ParamByName('Breack').AsString := Template.Breack;
    fTesting.IBQuery.Params.ParamByName('ChartType').AsSmallInt := Template.ChartType;

    fTesting.IBQuery.Params.ParamByName('xUp').AsSmallInt := Template.xUp;
    fTesting.IBQuery.Params.ParamByName('pUp').AsSmallInt := Template.pUp;
    fTesting.IBQuery.Params.ParamByName('xxUp').AsSmallInt := Template.xxUp;
    fTesting.IBQuery.Params.ParamByName('ppUp').AsSmallInt := Template.ppUp;

    fTesting.IBQuery.Params.ParamByName('xDown').AsSmallInt := Template.xDown;
    fTesting.IBQuery.Params.ParamByName('pDown').AsSmallInt := Template.pDown;
    fTesting.IBQuery.Params.ParamByName('xxDown').AsSmallInt := Template.xxDown;
    fTesting.IBQuery.Params.ParamByName('ppDown').AsSmallInt := Template.ppDown;
    fTesting.IBQuery.ExecSQL;
  End;
End;
Responder Con Cita