Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2014
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Transaction is active

Hola foro:

He realizado con éxito una migración de base de datos de InterBase a Firebird.

Ahora estoy tratando de no utilizar más BDE para la conexión,

Para conectarme decidí utilizar TIBDatabase (lo nombré "DBConexion").
y un TIBTransaction enlazado (lo nombré "Administracion").

A continuación transcribo el código que utilizo "hasta ahora" para modificar datos utilizando transacciones.

Código Delphi [-]
begin
  D_Datos.Administracion.StartTransaction;
  Try
    qUpdate.ParamByName('P_ID_Operador').Value:=1;
    qUpdate.ExecSQL;
    D_Datos.Administracion.Commit;
  Except
    D_Datos.Administracion.Rollback;
    MessageDlg('Error');
    raise;
  end;
end;


en la línea D_Datos.Administracion.StartTransaction, da el error "Transaction is active"

Les recuerdo que "Administracion" es el componente TIBTransaction.

Bueno. Desde ya gracias por su atención.
Responder Con Cita
  #2  
Antiguo 05-06-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Podrias poner

Código Delphi [-]
begin
if not D_Datos.Administracion.intransaction then
  D_Datos.Administracion.StartTransaction;
  Try
    qUpdate.ParamByName('P_ID_Operador').Value:=1;
    qUpdate.ExecSQL;
    D_Datos.Administracion.Commit;
  Except
    D_Datos.Administracion.Rollback;
    MessageDlg('Error');
    raise;
  end;
end;

Espero te sea util.

Saludos
Responder Con Cita
  #3  
Antiguo 05-06-2014
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Sí.

Gracias Caminante.
Funciona bien pero no entiendo cual es la razón, ya que funciona igual que si no coloo el .StartTransaction;. ¿?

o sea, esto tambien funciona:

Código Delphi [-]
begin
  Try
    qUpdate.ParamByName('P_ID_Operador').Value:=1;
    qUpdate.ExecSQL;
    D_Datos.Administracion.Commit;
  Except
    D_Datos.Administracion.Rollback;
    MessageDlg('Error');
    raise;
  end;
end;
Responder Con Cita
  #4  
Antiguo 05-06-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Porque ya tienes abierta una transacción desde que conectas a la BD
Responder Con Cita
  #5  
Antiguo 07-06-2014
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Resuelto

Gracias Casimiro y Caminante, aclaro como fue:

Si estoy conectado con BDE esto funciona bien

Código Delphi [-]
begin
  QueryConsulta.open;                Abro una consulta y luego comienzo la transacción

  D_Datos.Administracion.StartTransaction;
  Try
    qUpdate.ParamByName('P_ID_Operador').Value:=1;
    qUpdate.ExecSQL;
    D_Datos.Administracion.Commit;
  Except
    D_Datos.Administracion.Rollback;
    MessageDlg('Error');
    raise;
  end;
end;

Si estoy conectado con TIBDatabase esto No funciona bien

Código Delphi [-]
begin
  QueryConsulta.open;                Abro una consulta y aparentemente esto ya dispara un comienzo de transacción

  D_Datos.Administracion.StartTransaction;            Entonces esto da error
  Try
    qUpdate.ParamByName('P_ID_Operador').Value:=1;
    qUpdate.ExecSQL;
    D_Datos.Administracion.Commit;
  Except
    D_Datos.Administracion.Rollback;
    MessageDlg('Error');
    raise;
  end;
end;

Por lo tanto la solución propuesta por Caminante es correcta.
Eso es todo.
Saludos
Responder Con Cita
  #6  
Antiguo 07-06-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Carmelo Cash Ver Mensaje
....
Si estoy conectado con TIBDatabase esto No funciona bien
...
Hola Carmelo Cash.

En realidad puede funcionar bién o no dependiendo de el valor que tenga asignada la propiedad AutoStopAction del TIBTransaction. Aquella puede tomar los valores: saCommit, saCommitRetaining, saNone, saRollback y saRollbackRetaining.

Si la propiedad está en: saNone, saCommitRetaining o saRollbackRetaining la transacción no es finalizada por lo que no es necesario usar el método StartTransaction para volver a ejecutar el código.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 09-06-2014
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
No funcionó

Hola Eficsa

Probé tu sugerencia de modifica la propiedad AutoStopAction del TIBTransaction, pero si no coloco

Código Delphi [-]
if not D_Datos.Administracion.intransaction then
  D_Datos.Administracion.StartTransaction;

Sigue apareciendo el error..
Responder Con Cita
  #8  
Antiguo 09-06-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Carmelo Cash.

No fuí claro en el mensaje anterior, no quise sugerir que no usaras lo que te propuso Caminante, eso es correctísimo ya que previene cualquier posibilidad de entrar al código con el estado Active en False. Es decir si el IBTransaction esta inactivo es necesario cambiar su estado para operar qualquier TDataSet vinculado a él.

Lo que quise mencionar es el comportamiento del TIBTransaction cuando no se explicita la acción mediante los métodos: Commit, CommitRetaining, Rollback o RollbackRetaining.
En ese caso el TIBTransaction usará la acción definida en la propiedad AutoStopAction cuando se cierre el último TDataSet asociado a esa transacción.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 10-06-2014
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Ok.
Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FIBPlus error :Transaction is active El_Raso Conexión con bases de datos 1 13-02-2009 12:11:21
Como cancelar una transaccion? Active Transaction = 0??? JuanErasmo Firebird e Interbase 5 07-08-2007 21:40:46
Error: Transaction is active Tauro78 Firebird e Interbase 1 09-02-2007 11:38:38
Error: "SQLConnection: there is no active transaction" jmlifi Conexión con bases de datos 3 26-06-2006 18:11:23
Transaction active cmgenny Firebird e Interbase 2 31-05-2004 16:38:16


La franja horaria es GMT +2. Ahora son las 19:44:47.


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
Copyright 1996-2007 Club Delphi