PDA

Ver la Versión Completa : Error: Transaction is active


Tauro78
09-02-2007, 03:42:33
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.



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

if not(transaccion.InTransaction) then
begin
transaccion.startransaction;
end;


Saludos