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 anidadas en firebird (https://www.clubdelphi.com/foros/showthread.php?t=28032)

Er_Manué 07-12-2005 13:02:18

Transacciones anidadas en firebird
 
Hola,

Estoy desarrollando mi primera aplicación que usa firebird, normalmente he usado siempre ADO, pero ahora por necesidades de multiusuarios he tenido que cambiar.

Estoy programando en D7, con IBX, Transacciones Read Committed y confirmación manual de las transacciones en los eventos AfterPost y afterCancel.Os explico el problemilla:

Tengo dos tablas Master-Detail, aticulos (master) y tarifas_articulo (detail), las tablas se relacionan mediante el ID de artículos y el ID de la tabla tarifas_articulos es ID_ARTICULO, ID_TARIFA; Generando ID_TARIFA manualmente al insertarlo (valor máximo) por lo que debo hacer un commit al final de cada inserción para no obtener valores duplicados, y aquí es precisamente donde está mi problema: Si el usuario cancelara la inserción o modificación del artículo, únicamente podría hacer un rollback sobre la tabla articulos, pero no sobre la tabla tarifas_articulos. ¿Alguna sugerencia?

Saludos

Patricio 07-12-2005 13:09:16

Problema
 
Disculpa, no se si puede ser una sugerencia o no, pero vos no podes en la tabla articulos ir realizando distintos Insert y Post, sin ningun Commit, de esta forma vos vas ingresando los datos pero sin la necesidad de un commit como para poder hacer un roolback. no se si esta podra ser una solucion pero era algo que se me ocurrio.
Saludos

Er_Manué 07-12-2005 13:21:01

hola Patricio, el problema es que si al ir insertando los datos en la tabla tarifas_articulos sin hacer commit al obtener el valor máximo de ID_TARIFA, sujeto a ID_ARTICULO sea el artículo que estamos añadiendo o modificando, siempre dá el valor del último registro confirmado con commit, con lo cual no me está obteniendo realmente el valor máximo.

Tampoco puedo usar un generado, ya que no pueden haber huecos en la numeración de las tarifas.

saludos

Patricio 07-12-2005 13:32:34

uso de alguna variable auxiliar
 
Esto te puede servir?
vos antes de hacer el primer insert podes tomar el valor maximo y a partir de ahi con otra variable vas calculando el valor que realmente tendrias que ir agregando, si el valor maximo es 100, vos sabes con otra variable que el primer insert es 101 y asi sucesivamente
No se si esto te sirva
Saludos

Er_Manué 07-12-2005 13:40:58

pues es una opción válida:) lo que pasa que me gustaría saber si hay algún otro método mediante varias transaciones. Muchas gracias Patricio :)

Patricio 07-12-2005 14:53:10

Hilo en foro
 
Transaciones IBX

fijate un hilo en el foro de interbase que vi recien y que capaz te sirve.
Saludos


La franja horaria es GMT +2. Ahora son las 00:31:11.

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