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)
-   -   Error: Transaction is active (https://www.clubdelphi.com/foros/showthread.php?t=40192)

Tauro78 09-02-2007 03:42:33

Error: Transaction is active
 
hola estoy usando D7, FB2, MDO; el problema es que cuando lo doy click en Aceptar me sale el error del titulo. No sé si estoy usando mal el componente
de transaccion o que puede ser?
MDOTCategoriaAlta es el componente de transaccion y lo tengo ligado a
MDOSPExistCatDesc y a MDOSPCategoriaAlta, estos son procedimientos almacenados, en el primero verifico si existe la categoria y en el segundo realizo el alta de los datos.
No se si debo tener desactivado el componente de transaccion al inicio y activarlo cuando lo uso y desactivarlo cuando termina de usarlo.
La idea es tratar de controlar más las cosas, si no pongo dmTablas.MDOTCategoriaAlta.StartTransaction; ni dmTablas.MDOTCategoriaAlta.Commit; no me da error pero no se si eso es
mejor. Gracias.


Código Delphi [-]
procedure TfrmCategoriasAltas.BitBtn1Click(Sender: TObject);
begin
if (Edit1.Text = '') then
  begin
    MessageDlg('Se deben completar todos los campos.', MtInformation, [MbOK], 0);
    Exit;
  end
    else
      begin
        dmTablas.MDOSPExistCatDesc.Close;
        dmTablas.MDOTCategoriaAlta.StartTransaction;
        dmTablas.MDOSPExistCatDesc.ParamByName('SP_DESCRIPCION').AsString := Edit1.Text;
        dmTablas.MDOSPExistCatDesc.Prepare;
        dmTablas.MDOSPExistCatDesc.ExecProc;
        dmTablas.MDOTCategoriaAlta.Commit;
        if (not dmTablas.MDOSPExistCatDesc.ParamByName('descripcion').IsNull) then
          begin
            MessageDlg('Ya existe una categoría con esta descripción.', MtInformation, [MbOK], 0);
            Exit;
          end
            else
              begin
                try
                  dmTablas.MDOTCategoriaAlta.StartTransaction;
                  dmTablas.MDOSPCategoriaAlta.ParamByName('SP_DESCRIPCION').AsString := UpperCase(Edit1.Text);
                  dmTablas.MDOSPCategoriaAlta.Prepare;
                  dmTablas.MDOSPCategoriaAlta.ExecProc;
                  dmTablas.MDOTCategoriaAlta.Commit;
                finally
                  dmTablas.MDOSPCategoriaAlta.UnPrepare;
                  dmTablas.MDOSPCategoriaAlta.Close;
                  Edit1.Text := '';
                end;
              end;
      end;
end;

kalimero 09-02-2007 11:38:38

Hola.
Antes de iniciar la transaccion con "startransaction" debes comprobar si esta actia ó no. No conozco esos componente pero en los que yo he usado era al go como
Código Delphi [-]
if not(transaccion.InTransaction) then
begin
 transaccion.startransaction;
end;

Saludos


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

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