Ver Mensaje Individual
  #1  
Antiguo 19-11-2007
Mfi Mfi is offline
Miembro
 
Registrado: may 2007
Posts: 16
Reputación: 0
Mfi Va por buen camino
Error "Transaction is not Active"

Bueno, estoy haciendo un procedimiento que verifica la versión de la base de datos (almacenada en un registro de la tabla IbTableInfo) y que si no es la versión mas reciente la actualiza mediante scripts. El caso es que todo funciona bien hasta que voy a cambiar el registro de la base de datos para decirle que ya es la nueva version, al hacer el post me salta una excepcion de "Transaction is not active" y si hago un Transaction.StartTransaction me salta "Transaction is active" ...
Código Delphi [-]
 begin
    //DataModule2.IBMgDB.CloseDataSets;
    DataModule2.IbScript1.Script.Clear;
    //sacamos la versión actual de la Base de DAtos
    try
    IbTableInfo.Active:=true;
    version:=strtofloat(IbtableInfo.FieldByName('VERSIONDB').AsString);
    except
      version:=0;
    end;
    //Si hace falta actualizar se procede.
    showmessage(ultimaversion());
    if (version < strtofloat(UltimaVersion())) then
    begin
      //Cargamos el script para actualizar la BD
      DataModule2.IBScript1.Script.Text := LeerScript('BDS'+floattostr(version));
      showmessage (DataModule2.IBScript1.Script.Text);
      if (DataModule2.IbScript1.ValidateScript) then
        begin
        //DataModule2.IbScript1.ExecuteScript;
        showmessage ('Script Ejecutado');
        IBMgDB.Close;
        IBMgDB.Open;
        IBTableInfo.open;
        IBTableInfo.Transaction.CommitRetaining;
        IBTableInfo.Edit;
        IBTableInfo.FieldByName('VERSIONDB').value:=sigVersion(floattostr(version));
        IBTableInfo.Post;
        IBTableInfo.Transaction.commitretaining;
        showmessage(IBTableInfo.FieldByName('VERSIONDB').AsString);
        end else ShowMessage ('El escript no es válido, se cancela la Actualización.');
    end;
    end;

como podeis ver en el código cierro la base de datos y la abro, he puesto algunos showmessage para ir controlando lo que se ejecutay he desactivado la linea que hace la actualización propiamente dicha solo para intentar localizar este error, pero nada.. al hacer el post me salta la excepcion.

La transaccion la tengo configurada con la base de datos y puesta como transaccion por defecto en la IbTableInfo, esa transaccion no se usa para nada mas. EStá como saCommitRetaining y como TACommit y el autostart a true, en propiedades read commited...

Gracias por anticipado.
Responder Con Cita