PDA

Ver la Versión Completa : Transacciones...què permanece


Luis Castillo
01-11-2005, 01:53:40
Hola colegas.....

Me dado cuenta de algo....

Estoy trabajando en una base de datos en Delphi en Paradox.....utilizo un componente Database, con el cual hago mis transacciones...

database.starttransaction;
try
...
DataBase.Commit
Except
DataBase.RollBack;
End;

Tengo entendido, y lo he comprobado, que las transacciones son para asegurar la atomicidad de los procesos que modifican la base de datos y a la vez garantizar la integridad de los datos.

Y es asi que cuando me pasa un error, todo se desasce...PERO...En que estado quedan las componentes TTAble que utilizo....es decir, si antes de la transaccion estaban en modo INSERT, si se hace un rollback yo creia que quedaban en insert...

Y ese es el problema que tengo... Tengo 2 tablas: TABLE1 Y TABLE2

{TABLE1 Y TABLE2 ESTAN EN INSERT}
database.starttransaction;
try
...
Table1.Post
...
--En esta linea ocurre error---
...
Table2.post
DataBase.Commit
Except
DataBase.RollBack;
End;

Donde ocurre el error salta al rollback....Entonces la TABLE1 queda en modo browser (ocacionandome dificultades despues) y la TABLE2 queda como estaba en INSERT

Amigos....esto es asi...o que. Que pueden decir...

Gracias

marcoszorrilla
01-11-2005, 10:35:24
Para evitar estos problemas tienes que analizar el estado del Dataset correspondiente.


procedure TForm1.Button1Click(Sender: TObject);
begin
if DataSource1.State in [ dsInsert] then
ShowMessage('Podemos insertar')
else
ShowMessage('No podemos insertar');
end;


Un Saludo.

Luis Castillo
01-11-2005, 16:34:48
Muchas gracias por la respuestas....pero creo que no me explique bien.

El condicional que haces de si la tabla esta en modo insert, en realidad no creo que me sirva porque yo se que ambas tablas estan en modo Insert. El post va a hacer Post para ambas. Pero como esta en el ejemplo, despues de hacerle el Post a la primera ocurre un error y no se hace el post a la segunda. Entonces la primera, debido a que le hice el Post queda en modo Browser, y la segunda como no le alcanzo a hacer el POst que en insert....

Y pensè que ambas debian retornar a su estado inicial....


¿Existe algun parametro o algo asi para que todas retornen a su estado inicial?

Gracias

david duarte
22-12-2005, 20:09:58
Solamente una pregunta que no se si sea la resupuesta para esta pregunta

No se supone que cuando haces commits, se supone que se guarda toda la informacion??? que es lo mismo si hicieras un post o un applyupdates??

Si no es asi, pues creo que he vivido engañado toda mi vida

Lo que pasa es que yo tambien quiero ocupar una transaccion, pero no se si se pueda utilizar con tablas paradox, y una pregunta mas(ya se que no esta permitido, pero no quiero abrir otro hilo por la pregunta) como dice en la pregunta de Luis castillo, que pasaria si al aplicar mi commit(las 2 tablas estan en insert), a la primera tabla se hace todo bien y guarda los datos, pero en la segunda tabla sucede un error, entonces la primera tabla, ya esta en browse y la segunda queda en insert. al hacer el rollback se deshacen los cambios de la primera tabla???, entonces tendria que modificar el estado de la primera tabla. o simplemente se guardarian los cambios al aplicar el commit?
Con esto me refiero a que no se guardan los cambios de la primera tabla hasta que se guardan tambien los de la segunda tabla. o los cambios se hacen secuencialmente que es como lo menciona castillo.

Gracias
Cómo te sientes hoy??