Ver Mensaje Individual
  #8  
Antiguo 07-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 26
guillotmarc Va por buen camino
Hola.

La forma en que te recomiendo hacerlo es :

Abrir Transacción
Guardar Encabezado
Guardar Detalles
Finalizar Transacción

Como decía en el mensaje anterior, las transacciones tienen que ser lo más cortas posibles. Tienes que diferenciar entre transacciones que solo consultan datos y transacciones que los modifican. Las transacciones que consultan datos pueden permanecer abiertas durante minutos, ya que no bloquean nada, pero las transacciones que modifican datos solo deberían existir durante unos milisegundos : se abre, modificas y cierras la transacción, puesto que los datos que modifiques van a estar bloqueados y no podrán ser modificados (NOTA: por eso tu problema mejora al poner COMMITS dentro del bucle, en ese momento estás liberando el bloqueo sobre el producto introducido).

Asi pues, si tienes transacciones para mostrar datos, las puedes dejar abiertas tanto tiempo como necesites. Pero si quieres modificar datos, tienes que abrir una nueva transacción, modificar los datos, y cerrarla en el menor tiempo posible.

NOTA: Esta es una de las razones que hacen tan recomendables los ClientDatasets : nunca dejan transacciones abiertas, cuando abres una tabla, abre una transacción, lee los datos y los copia en memoria local, y cierra la transacción. A partir de ese momento trabajas en la copia local que tienes de los datos (sin que exista ningún tipo de transacción abierta). En el momento en que guardas los cambios del ClientDataset, se abre una transacción, aplica los INSERTS o UPDATES para transmitir los cambios a la base de datos, e inmmediatemente cierra la transacción. Las probabilidades de encontrarte con deadlocks son ínfimas (y en caso de que ocurra, solo tienes que volver a guardar, ya que la transacción que te bloqueó inicialmente ya ha terminado seguro).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita