Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   relacion padre hijo (https://www.clubdelphi.com/foros/showthread.php?t=56272)

victorhugo 13-05-2008 08:10:11

relacion padre hijo
 
Hola Amigos,
Tengo dos tablas Mysql InnoDB padre-hijo en un ambiente multiusuario en una aplicación desarrollada con Delphi 7 y componentes Zeos.
El problema se resume en lo siguiente:

INSERT ... SELECT FROM TABLA A
SELECT LAST_INSERT_ID() id FROM TABLA A FOR UPDATE
INSERT... SELECT :id ... FROM TABLA B


Sucede que al querer consultar sobre el registro que se insertó en la Tabla B con el id del insertado en la Tabla A, me encuentro con que en algunas ocaciones ese registro/relación se mantiene y en otros NO. Para ser más claro, un registro insertado en la tabla A con el id 10, no se inserta en la tabla B.
Esta acción aleatoria entiendo debe tener que ver con la concurrencia de más de un usuario al ejecutarse la rutina
He probado con transacciones, sin transacciones, con la cláusula FOR UPDATE y sin ella.
Cuando tenía bloques BEGIN..COMMIT..ROOLBACK que ahora están comentados en el código, se sumaba el problema del error 'lock wait timeout exceeded' que monitoreando noté que esto se producía en la misma situación, es decir, cuando intentaba insertar un registro en la tabla hijo luego de un insert en la tabla padre.

Agradeceré cualquier orientación que me puedan dar.
Victor Hugo.

Lepe 13-05-2008 11:07:51

¿Esas 3 sentencias sqls, donde están? en un Store procedure, en unas consultas de tu aplicación, en este caso, están bajo la misma transacción?

victorhugo 13-05-2008 14:27:53

Hola Lepe, gracias por contestar.
Las sentencias están dentro del código y en otro módulo están en un Store Procedure (igual grupo de sentecias sql). En ambos casos sucede lo mismo.
Dentro del código de la aplicación anteriormente se iniciaba con

BEGIN..
consultas...
COMMIT
if cancelar ROOLBACK

y producìa a veces el error 'look wait...'
Al comentar los BEGIN...COMMIT sucede que a veces la aplicación se congela y sucede lo comentado anteriormente (no guarda el registro en la tabla hijo).

Todos los usuarios acceden al mysql con un mismo usuario de conexión.

saludos y gracias por la ayuda.
Victor


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

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