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.055
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
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 17:42:40.


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