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 13-11-2008
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Cuantos TIBDataSet estan abiertos

Buenas noches, de que manera se podria chequear cuantos tibdataset estan activos. EL problema radica en que estoy utilizando un transaction y cada vez que hago un post o un delete ejecuto un dm.ibtransaction.commintretaing, pero resulta que en una aplicacion cliente/servidorta que no se cierra dicha transaction no podra ser vizualizada por los demas usuarios. Y lo que he leido es que se debe utilizar un commit, pero al realizar el commit me va a cerrar todos los tibdataset que estaban abiertos y eso me podria traer problemas. O de que manera se puede resolver que cuando se modifica en un pc se pueda visualizar de una vez en los demas pc. Tulizo ibx, delphi 7 y firebird 1.5. Gracias por su atencion....
Responder Con Cita
  #2  
Antiguo 13-11-2008
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
Suelo trabajar con ibTransaction y commitretaining y no tengo ese problema (creo). ¿Qué parameters usas para la transacción? yo uso estos:
Código:
read_committed
rec_version
nowait
Puede también que sea un problema de uso. Yo suelo tener una transacción para cada formulario, no una común para todos, de manera que después de dar de alta o modificar un registro la transacción termina.

Saludos.
Responder Con Cita
  #3  
Antiguo 13-11-2008
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola, el componente IBDataBase tiene dos propiedades heredadas de TCustomConnection, que son DataSetCount y DataSets[x].

Asi que para saber los datasets asociados a un IBDatabase, podría servir esto:

Código Delphi [-]
...
var i: Integer;
...
  for i := 0 to DataSetCount - 1 do
    if (DataSets[i] <> nil) and (DataSets[i].Active) then
    begin
       // Pon tu codigo aqui
    end;
...

NOTA: Si compilas con la directiva "Complete boolean eval" {$B} activada, usa mejor este codigo para prevenir errores:

Código Delphi [-]
...
var i: Integer;
...
  for i := 0 to DataSetCount - 1 do
    if (DataSets[i] <> nil) then 
      if (DataSets[i].Active) then
      begin
         // Pon tu codigo aqui
      end;
...
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 13-11-2008 a las 12:54:57.
Responder Con Cita
  #4  
Antiguo 13-11-2008
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Ok, gracias defcon1_es es justo lo que necesito, esto servira para solucionar el uso del commitretaing, pero el caso es que un usuario modifica un registro en un pc, otro usuario en otra pc vea los cambios realizados sin ningun problema, o de que manera se podria hacer esto o como seria el deber ser del commitretaing para evitar el lock dead de un registro.

Gracias afxe, me podrias dar mas detalles para tratar de solucionar mi caso segun tu aplicacion, ya que tengo commitretaing despues de un post y un delete y quisira plainificar esos cambios o evaluar cual es la mejor opcion para soucionar esta situacion.

Gracias por su valioso tiempo...
Responder Con Cita
  #5  
Antiguo 14-11-2008
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
No hay mucho más que decir... Por ejemplo, creo un form para dar de alta un cliente, pongo un TIBTransaction asociándolo con el TIBDatabase correspondienet (normalmente solo uno en un TDataModule compartido por todos los forms) y el TIBDataSet correspondiente con la propiedad transaction apuntando al TIBTransaction del propio form, no el que tenga el TIBDatabase por defecto. Solicito todos los campos y cuando pulsa el botón grabar haces un commit al TIBTransaction creado en el form. Se comiteará y cerraran todas las tablas del form asociadas a esa transacción, insisto, sólo las tablas de ese formulario, pero si hay más dataset abiertos en otros forms activos no se verán afectados. En síntesis: cada formulario abre y cierra su propia transacción.
Saludos.
Responder Con Cita
  #6  
Antiguo 14-11-2008
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Gracias por tu valioso tiempo. Es decir, tendria que modificar cada formulario para agregar una TIBTransaction y asociarla con el TIBdatabase del TDataModule y al momento de hacer una modificacion sobre las tablas involucradas (en dicho formulario), se debe hacer asignar en el TIBDataBase la TIBTransaction del formulario se inicia la transaction y luego del post se hace un commit a la trasaction del formulario:

Código Delphi [-]
    dm.ibd_agua.DefaultTransaction:=FFactura_guardada.IBTransaction1;
    FFactura_Guardada.IBTransaction1.StartTransaction;
    dm.ibds_Control.Edit;
    dm.ibds_Control.FieldByName('numero_factura').AsInteger:=StrToInt(Edit1.Text);
    dm.ibds_Control.Post;
    FFactura_Guardada.IBTransaction1.Commit;
    dm.ibd_agua.DefaultTransaction:=dm.IBTransaction1;

Luego realizar estos cambios sobre cada proceso y/o formulario ? De todas maneras realizare lso cambios a ver como funciona

Nota: EL proyecto trata sobre un sistema de facturacion y en el ejemplo arriba estoy guardando el numero de la factura. Utilizo Delhpi 7, IBX, FireBird 1.5.

Gracias nuevamente....
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
Obtener formularios abiertos Bauhaus1975 Varios 4 09-10-2008 17:32:17
Saber que archivos estan abiertos StartKill Varios 1 30-09-2005 17:05:25
Que programas tengo abiertos? Novás Varios 2 15-06-2005 16:17:40
Problemas con 2 delphis abiertos Mauro.NET Varios 3 14-06-2005 07:15:09
Saber si hay Querys abiertos ramonibk Varios 4 26-11-2004 16:06:10


La franja horaria es GMT +2. Ahora son las 04:42:22.


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