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.IbScript1.Script.Clear;
try
IbTableInfo.Active:=true;
version:=strtofloat(IbtableInfo.FieldByName('VERSIONDB').AsString);
except
version:=0;
end;
showmessage(ultimaversion());
if (version < strtofloat(UltimaVersion())) then
begin
DataModule2.IBScript1.Script.Text := LeerScript('BDS'+floattostr(version));
showmessage (DataModule2.IBScript1.Script.Text);
if (DataModule2.IbScript1.ValidateScript) then
begin
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.