Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Commit no se ejecuta hasta que cierro la aplicación... (https://www.clubdelphi.com/foros/showthread.php?t=92840)

MAXIUM 19-02-2018 04:20:44

Commit no se ejecuta hasta que cierro la aplicación...
 
¿Alguna razón por la que el segundo COMMIT no se aplica o no funciona hasta que le doy cerrar a la aplicación? :confused:

Componentes FireDAC sobre Delphi 7. Gracias ^\||/

Código Delphi [-]
       
      // Borra el estado financiero.
          DataModule1.ADQuery1.SQL.Clear;
          DataModule1.ADQuery1.SQL.Text:= 'Delete From FINANZAS Where ALUMNO_RUT = :RUT';
          DataModule1.ADQuery1.ParamByName('RUT').AsString:= RutParcial;

          DataModule1.ADTransaction1.StartTransaction;
          Try
             DataModule1.ADQuery1.ExecSQL;
             DataModule1.ADTransaction1.Commit;
          Except
             DataModule1.ADTransaction1.Rollback;
             Raise;
          End;

       // Borra el alumno del registro
          DataModule1.ADQuery1.SQL.Clear;
          DataModule1.ADQuery1.SQL.Text:= 'Delete From ALUMNOS Where ALUMNO_RUT = :RUT';
          DataModule1.ADQuery1.ParamByName('RUT').AsString:= RutParcial;

          DataModule1.ADTransaction1.StartTransaction;
          Try
             DataModule1.ADQuery1.ExecSQL;
             DataModule1.ADTransaction1.Commit;
          Except
             DataModule1.ADTransaction1.Rollback;
             Raise;
          End;

Casimiro Notevi 19-02-2018 09:52:05

No sé qué problema es el que tienes, pero aparte de eso, siempre debes cerrar el dataset antes de hacer cambios en él.

Código Delphi [-]
     // Borra el estado financiero.
          DataModule1.ADQuery1.SQL.Close;  // <---  !!!!!!!!!!!!!!!!!!!
          DataModule1.ADQuery1.SQL.Text:= 'Delete From FINANZAS Where ALUMNO_RUT = :RUT';
          DataModule1.ADQuery1.ParamByName('RUT').AsString:= RutParcial;

          DataModule1.ADTransaction1.StartTransaction;
          Try
             DataModule1.ADQuery1.ExecSQL;
             DataModule1.ADTransaction1.Commit;
          Except
             DataModule1.ADTransaction1.Rollback;
             Raise;
          End;

       // Borra el alumno del registro
          DataModule1.ADQuery1.SQL.Close;  // <---     !!!!!!!!!!!!!!!!!!!
          DataModule1.ADQuery1.SQL.Text:= 'Delete From ALUMNOS Where ALUMNO_RUT = :RUT';
          DataModule1.ADQuery1.ParamByName('RUT').AsString:= RutParcial;

          DataModule1.ADTransaction1.StartTransaction;
          Try
             DataModule1.ADQuery1.ExecSQL;
             DataModule1.ADTransaction1.Commit;
          Except
             DataModule1.ADTransaction1.Rollback;
             Raise;
          End;

AgustinOrtu 19-02-2018 21:26:40

No habras iniciado alguna transaccion antes de ejecutar el codigo que nos mostraste?

Evalua la propiedad Active a ver si esta a True antes de ejecutar los Start Transaction

Veo que estas usando un componente dedicado TFDTransaction. Nunca lo he utilizado y siempre he operado de manera directa con el componente TFDConnection. Como se puede ver, este componente tambien tiene los mismos metodos para trabajar con transacciones: StartTransaction, Commit y Rollback

Segun la documentacion, el componente TFDTransaction es opcional

Cita:

Note: The use of the TFDTransaction component is optional in FireDAC.
Al parecer, el uso de este componente esta justificado para Firebird o Interbase ya que soporta el concepto de multiples transacciones, que estos motores implementan

MAXIUM 24-02-2018 15:44:20

Cambie el TFDTransaction por el TFDConnection y funciono. Gracias Agustin.


La franja horaria es GMT +2. Ahora son las 01:41:27.

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