Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Inserta Registros maestro/detalle (https://www.clubdelphi.com/foros/showthread.php?t=36885)

Vlady 27-10-2006 04:12:29

Inserta Registros maestro/detalle
 
Hola. soy nuevo en firebird aunque he trabajo mucho en paradox tengo una duda e buscado en el foro y no encontrado una respuesta completa a mi problema. Estoy trabajando con Delphi 5 y firebir 1.5, e creado todas mis tablas con el ibexpert y los campos autoincrementales manejo con triggers y generadores y utilizo relaciones de integridad entre las tablas con llaves foranes, estoy trabajando con componentes TIBDataset con las sentecias normales de
InsertSQL := 'insert into AGENDA
(FECHA , DESCRIPCION)
values
(:FECHA, :DESCRIPCION)'

ModifySQL := 'update AGENDA
set
FECHA = :FECHA,
DESCRIPCION = :DESCRIPCION
where
FECHA = :OLD_FECHA'

DeleteSQL := 'delete from AGENDA
where
FECHA = :OLD_FECHA'


Mi dura esta en como insertar registros en dos tablas una que sea maestro y la otra detalle con una relacion 1 a muchos.

Gracias de antemano por la atencion

afxe 27-10-2006 10:22:43

Normalidad ante todo.
 
Haz el tratamiento como si de paradox se tratara, es decir: Dos tablas, inserta el registro en la tabla maestra y después los registros de la tabla detalles, normalidad.

Lo único que tienes que poner atención es en el tratamiento de las transacciones, es decir, antes de comitear los detalles asegúrate que se ha comiteado la cabecera, porque si no te saltará un error de referencia de integridad. ejemplo a "grosso modo":

Cita:

ibTransaction.StartTransaction
QryCab.Append
.....
QryCab.Post

ibTransaction.CommitRetaining

QryDet.Append;
.......
QryDet.Post;

QryDet.Append;
.........
QryDet.Post

ibTransaction.Commit;

ó

Cita:

ibTransaction.StartTransaction

QryCab.Append
.....
QryCab.Post

QryDet.Append;
.......
QryDet.Post;

QryDet.Append;
.........
QryDet.Post

ibTransaction.Commit;

Parece una tontería, pero muchas veces los programadores estamos acostumbrado a ir grabando los detalles antes de la cabecera para ir realizando operaciones de acumulados, chequeos y cuenteos que puedan afectar a los datos a grabar en la cabecera.

Hagen 28-10-2006 04:35:48

Da mas detalles
 
Ante todo deberias explicar mejor tu situacion para poder ayudarte:

- Que campos tienen tus tablas
- Podrias poner los SQL's de ambos DataSet's
- En la tabla AGENDA veo que tienes un campo fecha, que
parece la llave primaria. O me equivoco? No veo muy
bien tener como llave primaria una fecha, ya que en
una agenda se pueden tener varias actividades el
mismo dia (fecha).


La franja horaria es GMT +2. Ahora son las 00:04:09.

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