Ver Mensaje Individual
  #2  
Antiguo 20-11-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Reputación: 20
athlontado Va por buen camino
Lo ideal es mantener las transacciones abiertas el menor tiempo posible. Claro que, como dice el refrán: "Del dicho al hecho hay un gran trecho".

El problema está en que, si haces Commit cada vez que guardas, modificas ó borras algún registro, los componentes DataSet se te cierran y tienes que volver a abrirlos uno a uno, con los consiguientes inconvenientes. Con los IBX no es posible mostrar los datos teniendo la transacción cerrada, pero sí podemos reducir a unas milésimas de segundo el tiempo que permanecen los cambios a la BBDD en el limbo, forzando a que éstos se guarden nada más hacer un Post ó un Delete.

Para evitar que se cierren los DataSets cada vez que hacemos Commit ó RollBack, se crearon los métodos "...Retaining", que hacen lo mismo que sus análogos, pero manteniendo los DataSets abiertos y los registros mostrados en su posición original en los DataSources y controles enlazados a éstos.

Yo lo haría de la siguiente forma:

Código Delphi [-]
  // Cuando llegamos aquí, la Transacción está abierta para poder mostrar los datos ...
 
 tTabla.Edit;
 tTabla.FieldByName('NOMBRE').AsString := 'Pepito Grillo';
 tTabla.Post;
 
 // Esto es lo que yo añadiría, que puede ir perfectamente en el
 // AfterPost y AfterDelete ...
 try
   CommitRetaining
 except
   RollBackRetaining
 end;
__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
Responder Con Cita