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)
-   -   Firebird, IBDatasets y Relacion Maestro/Detalle (https://www.clubdelphi.com/foros/showthread.php?t=4333)

jourdan 10-10-2003 23:31:01

Firebird, IBDatasets y Relacion Maestro/Detalle
 
Buenas tardes a todos, estoy experimentando con firebird, IBX y una aplicacion maestro detalle en delphi 6, tengo dos IBDatasets uno el maestro y otro el detalle, en el insertsql del detalle tengo:

insert into FACTURAS_DATOS
(FACTURA_ID, PARTIDA, CANTIDAD, DESCRIPCION, PRECIO)
values
(:FACTURA_ID, :PARTIDA, :CANTIDAD, :DESCRIPCION, :PRECIO)

El valor de FACTURA_ID lo deberia de tomar automaticamente (bueno en ADO asi lo hace) pero si no agrego la siguiente linea en el IBDataset2AfterInsert (el detalle)

IBDataset2.FieldByName('FACTURA_ID').AsString := IBDataset1.FieldByName('FACTURA_ID').AsString;

La insersion no se realiza y me dice que FACTURA_ID no puede ser nulo, mi pregunta es:

Hay que poner el codigo que refiere el IBDataset1 al IBDataset2 en el IBDataset2AfterInsert o algo estoy haciendo mal y esta liena es la que esta haciendo "manualmente" este link, tengo esta duda ya que tambien he estado experimentando con dbexpress y ado y en estas no tengo que poner nada en el afterinsert, automaticamente el valor es asignado a la relacioin maestro detalle si configuro el mastersource, etc.

Ayuda profavor

De antemano muchas gracias

Alejandro Jourdan

Osorio 11-10-2003 15:57:20

Hola todos:


Resulta que los IBDataSet no tienen la propiedad MasterSource pero tienen la propiedad DataSource. Basandome en eso prueba esto:


IbdatasetFactura ----> DataSourceFactura
IbdatasetDetalles ----> DataSourceDetalles

A la propiedad DataSource de IbDataSetDetalles le asignas DataSourceFactura.

en el SelectSQL de IbdatesetFactura:

select id_factura //o mas campos
from tbl_factura


El insertSQL de IbdatasetDetalles tal cual como lo tienes, ahora solo debes tener en cuenta que el nombre del parametro en el detalle (id_factura) debe tener el mismo nombre del campo maestro (id_factura).


Espero esto te pueda servir de algo

Suerte

jourdan 13-10-2003 17:16:17

Muchas gracias por tu respuesta, ya verifique y tengo todo como me mencionas, pero si no pongo el codigo en el IBDataset2AfterInsert (el detalle)

IBDataset2.FieldByName('FACTURA_ID').AsString := IBDataset1.FieldByName('FACTURA_ID').AsString;

no se genera el valor de factura_id en el detalle y de ahi no paso.

Deberia traer automaticamente el valor de factura_id de la tabla maestra, correcto??

Gracias nuevamente

jourdan 14-10-2003 18:27:39

Despues de mucho batallar ya encontre la
solucion, en el foro de borland (borland.public.delphi.database.interbaseexpress) me ayudo jeff
overcash que tengo entendido que es el que escribio esos componentes
o el que los esta actualizando, no fue nada facil ya que esto lo
deberia hacer en automatico pero segun me dice el que ya no es asi,
ahora hay que prenderlo, este es un pedazo del readme de los ibx:

19. Added support to copy the master value down to the detail field
on a new record. The GeneratorField will fire first before
the copy is made. Also there is a new global variable,
CopyMasterFieldToDetail, which MUST be true for this to work.
It defaults to false. The copy logic is simple, if
the master field name matches the detail param name and also
matches a detail field name it will be copied down.

Entonces para que agarre el valor el ibdtaset detalle del maestro hay
que agregar a uses lo siguiente: IButils y en cualquier parte del
programa asignar la siguiente variable como verdadera:
CopyMasterFieldToDetail := true; antes de que vaya a usar los
ibdatasets.

El foro de noticias de borland es muy bueno porque ahi te ayudan los que hacen estas cosas lo malo es que dan la informacion a cuenta gotas y ellos piensan que los que preguntan ahi son expertos en
delphi y la verdad yo estoy empezando, si que batalle con esto!!!

Es extraño que algo que uno considera por default correcto no lo sea y haya que hacer estos pasos para que funcione pero por fin lo logre.

Espero mi experiencia ayude a alguien mas.

Saludos y gracias

Alejandro Jourdan


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

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