Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Transacciones y Foreign Key (https://www.clubdelphi.com/foros/showthread.php?t=39955)

gluglu 02-02-2007 18:45:12

Transacciones y Foreign Key
 
Al parecer se me ha presentado ahora mismo un caso que me gustaría alguien del foro me pudiera confirmar por favor si es así o no.

Tengo dos transacciones distintas, con dos tablas, una por cada transacción, y estas tablas están relacionadas mediante una 'Foreign Key'.

Si hago un append en la primera, sin hacer un commit de la transacción, no me permite hacer un append en la segunda tabla con su correspondiente clave relacionada, ya que me lanza error de violación de clave Foreign Key.

Me obliga por tanto a hacer primero un commit de la primer transacción, o en el caso que no pretendería según mi planteamiento, tener que utilizar una única transacción ?

Muchas gracias por vuestras aclaraciones.

maeyanes 02-02-2007 18:51:12

Yo cuando me encuentro en tu caso, uso una sola transacción para ambas tablas...



Saludos...

gluglu 02-02-2007 18:57:47

Si, si ...

Si lo tengo claro que con una única transacción funciona. Lo que pasa que por el planteamiento que pretendo, necesitaría usar dos transacciones diferentes.

Mi caso es así :

1. Quiero crear un registro en la tabla 1.
2. Entonces se abre un nuevo form y en él se pueden realizar varias operaciones sobre una o más tablas que están relacionadas mediante la susodicha 'Foreign Key' con la tabla 1.

A. Si el usuario pulsar cancelar en el nuevo form, quiero hacer un Rollback de la transacción que en principio quiero tratar en el form 2.
B. Si el usuario pulsar aceptar en el nuevo form, salgo del form sin necesidad de realizar un commit.

De vuelta al formulario principal, si el usario Cancela, hago un rollbak de la transacción 1 y de la 2. Si el usuario Acepta, hago un commit de ambas transacciones.

Quiero añadir que por otro lado, a la transacción 1 están asociadas otras tablas diferentes que en este caso no vienen a cuestión. Si hicera un rollback de la transacción 1, evidentemente pretendería cancelar todos los cambios de todas las tablas asociadas a dicha transacción.

Es por ello que en principio pretendería utilizar 2 transacciones diferentes.

xavinet 02-02-2007 19:44:27

Hola!
 
Hola gluglu!

A mi entender las transacciones encapsulan todo aquello que tiene que hacerse para una acción determinada. Con lo cual es aconsejable que si lo que haces en forms hijos depende de lo que decidas en el padre pos se haga todo en una transacción.

La otra opción es que cuando crees el hijo commites el padre y si te cancelan el hijo vayas y tires los cambios atrás, pero esto no creo que sea muy viable ni aconsejable según los datos que trates.

Así que si estabas indeciso aquí estoy yo para sembrar más confusión :D

Suerte!

gluglu 02-02-2007 20:04:02

Gracias por responder.

La cuestión como deshacer los cambios del padre después de haber hecho un commit del mismo !!??

Propuesta a los señores de CodeGear ;) ! Transacciones anidadas ! Transacción Padre y Transacción Hija !

Si realizo un commit del padre, también se realiza un commit del hijo, pudiendo realizar independientemente un commit del hijo.

Si Rollback del padre, rollback también del hijo independientemente de que se hubiera podido hacer un commit previo del hijo.

:o

xavinet 03-02-2007 16:53:00

ya existen las transacciones anidadas!
 
Hola gluglu!

Ya existen las transacciones anidas ... aquí por ejemplo en MS SQL Server

http://sql.manivesa.com/Tutoriales+S...nados/551.aspx

http://sql.manivesa.com/Tutoriales+S...nados/562.aspx

y aquí un poco de teoria de transacciones...

http://www.cs.cinvestav.mx/SC/prof_p...sdb/Cap_5.html

...aquí tienes faena por si no sabes que hacer esta noche...:D

suerte!

gluglu 03-02-2007 19:15:50

... yo uso Interbase 7.5 :(


La franja horaria es GMT +2. Ahora son las 08:18:18.

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