PDA

Ver la Versión Completa : Transacciones manejo correcto


IVAND
18-01-2011, 16:32:31
Hola a todos

Tengo un sistema echo en delphi 6 con los componentes IBX y base de datos firebird 1.5

Tengo definida las transacciones read_commited , rec_version , nowait

Es la manera correcta de configurarlas , lei por algun lado q es la manera correcta de hacerlos

El sistema estaba funcionando bien en un ambiente de de 40 equipos pero a veces se me colgaba y salia al tiempo un mensaje de deadlock , era porq tenia anteriormente configurado la opcion de wait , el mayor problema se me daba en las actualizaciones a inventarios , pero repito muy rara vez

Si me pueden guiar se los agradeceria un mundo

Nota : cuando utilizo transacciones en cache , al componente Ib le coloco cache en true y lo grabo con este funcion , seguido de un transaccion.commit;

function puedocerrarTrans(const Tables: array of TIBDataset; Action: string): Boolean;
var
I: Integer;
//Actualizar: Boolean;
begin
Result := True;
for I := 0 to high(tables) do
if Tables[I].updatesPending or Tables[I].modified then
begin
if Action = 'S' then Tables[I].ApplyUpdates
else
Tables[I].CancelUpdates;
end;
end;

Casimiro Notevi
18-01-2011, 17:42:25
No he entendido qué problema tienes realmente :)

Por si acaso, ¿conoces el documento (http://www.intitec.com/varios/transacciones-0.2.6.pdf) Juan José Rodríguez, todo un clásico en el tema de las transacciones?.

IVAND
18-01-2011, 18:55:37
Gracias por tu tiempo

En verdad la cosa va asi , anteriormente tenia en las transacciones las acciones tal como te la indicaba pero con la opcion wait ( a veces se quedaba colgada la aplicacion y respondia despues de un par de horas con un deadlock) , ahora estoy cambiando a nowait (recien voy a lanzar el aplicativo a su ejecucion) , mi pregunta basica es basado en su experiencia , q opcion es mejor cuando trabajas con altos volumens de datos (facturas , cuentas x cobrar , cuentas x pagar etc ) , si la opcion de wait o nowait , segun esta escrito en algunos manuales la opcion nowait no espera si fuera el caso de un deadlock y muestra inmediatamente el mensaje de error ,dejando de esta manera al usuario con un mensaje directo en vez de q se quede colgado el aplicativo y me muestre un mensaje un para de horas despues

Gracias por su tiempo

nota : Si he leido ese articulo

Casimiro Notevi
18-01-2011, 19:55:18
Hola IVAND, yo siempre uso 'nowait', aunque deberías revisar tus transacciones, no debe aparece nunca un deadlock.

IVAND
19-01-2011, 15:41:24
Si eso es cierto , pero estoy revisando ya todo el aplicativo , he echo pruebas en par de modulos cambiando a nowait ,(Updates , Insert , delete) y todo va bien , en algun lado debe estar mal algo ..... uhhh duro trabajo que me espera


Nuevamente muchas gracias

Casimiro Notevi
19-01-2011, 15:55:13
Hay que tener paciencia :)
Deberias probar desde varios puestos al mismo tiempo haciendo pruebas de trabajo normal e intentar encontrar alguna coincidencia en el momento que ocurra, no sé, por ejemplo, cuando estaba consultando las ventas de un cliente y alguien estaba vendiéndole a ese mismo cliente. (por decir algo).