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 25-09-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
como saber transacciones pendientes

Hola amigos....

Estoy investigando acerca de como saber que transacciones tengo pendientes, para notificarle al usuario que existen transacciones pendientes que no se han confirmado.

Como hacer esto?, ....como saber si tengo transacciones pendientes?

He visto en google acerca current_transaction....sigo investigando !!!...

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #2  
Antiguo 25-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, no creo que sea práctico informar a un usuario de las transacciones pendientes, lo asustarás y no comprenderá nada.
En todo caso, si por ejemplo, el usuario está dando de alta un cliente y le da a "salir" sin haber "aceptado/guardado", sacar un aviso indicándoselo al usuario, el típico: "¿Salir sin guardar? --Sí-- --No--
Para ello sólo has de consultar la propiedad InTransaction del componente Transaction, algo así como:

Código Delphi [-]
if dataset.transaction.intrasaction then
  // preguntar aquí qué hacer
else
  close;
Responder Con Cita
  #3  
Antiguo 25-09-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola mRoman

No manejo hace mucho IB y estoy desactualizado pero entre los componentes de IB siempre hay un objeto de Transaccion (IBTransaction) con la propiedad InTransaction.

Esta propiedad te permite saber si hay una transaccion pendiente y puedas realizar la acción necesaria.

Cita:
Examine InTransaction at run-time to determine if a database transaction is currently in progress. InTransaction is true if a transaction is in progress, false otherwise.

The value of InTransaction cannot be changed directly. Calling StartTransaction sets InTransaction to true. Calling Commit or Rollback sets InTransaction to false.
Documentación de embarcadero

Edito: Ya Casimiro te dió la misma respuesta
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo 25-09-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Ok...les agradezco a ambos las respuestas que me dieron. Pondré en practica y luego les informo el resultado....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #5  
Antiguo 25-09-2012
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 mRoman.

Si tenes más de un IBTransaction que dependen de un IBDatabase y deseas trabajar con el conjunto de ellos, podes usar las propiedades TransactionCount y Transactions de este último componente.

A modo de ejemplo, este código pone inactivos a todos los IBTransactions activos relacionados con un IBDatabase:
Código Delphi [-]
...
var
  i: Integer;
begin
  with IBDatabase1 do
    for i:= 0 to TransactionCount-1 do
      if Transactions[i].InTransaction then
        Transactions[i].Active:= False;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 25-09-2012
ElMug ElMug is offline
Miembro
NULL
 
Registrado: jul 2012
Posts: 163
Poder: 12
ElMug Va por buen camino
En mi ver, lo mas prudente es que en una transaccion se compelete lo acometido o se haga roll-back.

Y con el cogigo no dar posibilidades de que haya transacciones pendientes.

Aunque si la pregunta fuese del total de transacciones pendientes de TODOS los usuarios, creo que eso no se ha abordado en las respuestas.

Y precisamente, por eso, es que cada usuario no pueda tener mas de una transaccion pendiente.

Pero me gustaria saber de casos en los cuales se requiera eso.
Responder Con Cita
  #7  
Antiguo 26-09-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Les agradezco las respuestas de ecfisa, elmug y de casimiro asi como de movorack y comentarles que ya lo solucione gracias a sus comentarios, los cuales aplique y me queda con la sugerencia de casimiro. En realidad es mas sencillo de lo que propone ElMug, lo que realmente necesitaba era solamente "avisarle" al usuario que se estaba saliendo sin grabar los movimientos realizados.

Total....asi quedo:
Código Delphi [-]
     if dsUnidadOperativa.Transaction.InTransaction then
     begin
        if Application.MessageBox('Desea GUARDAR los movimientos realizados?','Pregunta',mb_YesNo+mb_IconQuestion)=idYes then
        begin
            DataModule2.trsCasas.Commit;
        end Else
        begin
            DataModule2.trsCasas.Rollback;
            Action:=caFree;
        end;
     end;

Gracias a todos....Saludos !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #8  
Antiguo 26-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mRoman Ver Mensaje
Código Delphi [-]
if dsUnidadOperativa.Transaction.InTransaction then      
begin         
  if Application.MessageBox('Desea GUARDAR los movimientos realizados?','Pregunta',mb_YesNo+mb_IconQuestion)=idYes then         
  begin             
    DataModule2.trsCasas.Commit;         
  end 
  Else         
  begin             
    DataModule2.trsCasas.Rollback;             
    Action:=caFree;         
  end;      
end;
Y si el usuario contesta que sí, que se graben los cambios, haces commit y... ¿el Action:=caFree?
Responder Con Cita
  #9  
Antiguo 27-09-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Uppss

jajaja....tienes razon !!!.....bueno, "Al mejor cazador se le va la liebre"....
entonces quedaria asi:
Código Delphi [-]
if dsUnidadOperativa.Transaction.InTransaction then      
begin         
  if Application.MessageBox('Desea GUARDAR los movimientos realizados?','Pregunta',mb_YesNo+mb_IconQuestion)=idYes then         
  begin             
    DataModule2.trsCasas.Commit;         
  end 
  Else         
  begin             
    DataModule2.trsCasas.Rollback;             
//    Action:=caFree;         (Este no va aqui)
  end;      
  Action:=caFree;
end;
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #10  
Antiguo 27-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tampoco puede ir ahí

Supongo que si pones Action := caFree; es porque ese form lo has creado tú en tiempo de ejecución y tienes que liberarlo, en caso contrario no hace falta.
Pero de todas formas en ese código que has puesto, imagina que dsUnidadOperativa.Transaction.InTransaction es False, (que no hay ninguna transacción), ¿qué ocurriría?, que no se ejecutaría el Action := caFree;
Por lo tanto, debes sacarlo fuera de ese condicionante.

Código Delphi [-]
begin
  if dsUnidadOperativa.Transaction.InTransaction then 
  begin            
    if Application.MessageBox('Desea GUARDAR los movimientos realizados?','Pregunta',mb_YesNo+mb_IconQuestion)=idYes then            
      DataModule2.trsCasas.Commit
    else            
      DataModule2.trsCasas.Rollback;
  end;
  Action:=caFree;
end;
Responder Con Cita
  #11  
Antiguo 30-09-2012
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Ok....casimiro....tienes razón....Gracias ! por el Tip !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #12  
Antiguo 16-10-2012
Leopard2 Leopard2 is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 39
Poder: 0
Leopard2 Va por buen camino
Una consulta, que el IBTransaction tenga la propiedad DefaultAction en TACommit no es igual a un Commit automatico ?
Saludos
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
Como codifico las transacciones en delphi, y como jalo una vista desde SQL Server? Felipe Conexión con bases de datos 2 06-01-2008 03:00:04
saber si hay transacciones con un MDOTransaccion Jose Roman Conexión con bases de datos 0 12-07-2007 19:34:39
Transacciones pendientes StartKill Firebird e Interbase 1 01-03-2005 16:16:36
Microsoft pagará 1,32 millardos a Sun para resolver demandas pendientes marcoszorrilla Noticias 1 03-04-2004 23:39:53
Como usar transacciones gario SQL 3 17-12-2003 20:52:29


La franja horaria es GMT +2. Ahora son las 04:54:59.


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