Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2003
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 22
jourdan Va por buen camino
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, ESCRIPCION, :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
__________________
Alejandro Jourdan
Responder Con Cita
  #2  
Antiguo 11-10-2003
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 22
Osorio Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 13-10-2003
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 22
jourdan Va por buen camino
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
__________________
Alejandro Jourdan
Responder Con Cita
  #4  
Antiguo 14-10-2003
jourdan jourdan is offline
Miembro
 
Registrado: may 2003
Ubicación: Mexico
Posts: 151
Poder: 22
jourdan Va por buen camino
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
__________________
Alejandro Jourdan
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


La franja horaria es GMT +2. Ahora son las 14:53:31.


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