Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 02-02-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Yo cuando me encuentro en tu caso, uso una sola transacción para ambas tablas...



Saludos...
Responder Con Cita
  #3  
Antiguo 02-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 02-02-2007
Avatar de xavinet
xavinet xavinet is offline
Miembro
 
Registrado: mar 2005
Posts: 41
Poder: 0
xavinet Va por buen camino
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

Suerte!
__________________
________________________________
It's no good shouting at me like that
Responder Con Cita
  #5  
Antiguo 02-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.

__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 03-02-2007
Avatar de xavinet
xavinet xavinet is offline
Miembro
 
Registrado: mar 2005
Posts: 41
Poder: 0
xavinet Va por buen camino
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...

suerte!
__________________
________________________________
It's no good shouting at me like that
Responder Con Cita
  #7  
Antiguo 03-02-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
... yo uso Interbase 7.5
__________________
Piensa siempre en positivo !
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
violation of Foreign Key JulioGO Firebird e Interbase 2 27-06-2006 00:33:24
foreign key clanmilano Conexión con bases de datos 4 03-11-2005 03:21:19
Foreign key fjardelphi Firebird e Interbase 2 20-12-2004 16:05:39
uso de FOREIGN KEY jzginez Firebird e Interbase 2 22-04-2004 23:20:25
No logro que funcionen un FOREIGN KEY orfeo MySQL 2 16-07-2003 19:52:58


La franja horaria es GMT +2. Ahora son las 16:43:47.


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
Copyright 1996-2007 Club Delphi