FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Maestro/Detalle con dbExpress
Hola!
Se que este tema esta un poco machacado en el foro, pero tengo un inconveniente que no se a qué se deba. Estoy haciendo una relación m/d con dbx(dbExpress) pero no me sale. He hecho los pasos tal y como me habían dicho en un hilo anterior pero lo cierto es que hay algo extraño. La conexión las hago asi: Por ejemplo qryPedido --> Select * From Pedidos qryDetallePedido --> Select * From DetallePedido dsRelacionPedido. Relaciono el qryPedido con el ds con la propiedad ds del qry, igualmente relaciono qryDetallePedido con el ds anterior, es decir Cita:
Luego adiciono un dsp(DataSetProvider) para asociarlo con el primer qry y un cds asociado al provider así: Cita:
Ahora cuando adiciono los campos en el editor de campos, NO adiciona el campo de relación entre los dos qrys, no es por falta de la relación o de crear la consulta asi: qryPedido --> Select * From Pedidos Where IDPEDIDO = :IDPEDIDO, e igualmente con la otra qry. De paso quisiera que me explicaran por qué de este tipo de consultas, ya que he hecho el mismo ejercicio con IBX y si funciona sin necesidad de las consultas con parámetros en ambas qrys. Agradezco la ayuda de antemano, creo que con esto se aclararía de paso a los que inician. |
#2
|
||||
|
||||
Hola.
El Campo del dataset detalle, te lo tiene que añadir en el ClientDataSet asociado al query maestro (y no en el query maestro). Pensaba que conseguiste hacer funcionar la relación cuando lo vimos en este hilo : http://www.clubdelphi.com/foros/arch...ic.php?t=16754 Recuerda, el qryDetallePedido tiene que ser algo como : select * from DetallePedido where IdPedido = :IdPedido (Siendo el nombre del parámetro, igual al del campo correspondiente en el dataset maestro). Los parámetros en el query maestro són opcionales, y los pones para limitar los datos que se van a bajar, no para establecer la relación. Me parece bastante curioso que IBX pueda realizar relaciones maestro-detalles sin parámetros en la consulta detalle. En los otros motores en las que lo he realizado (ADO) también es necesario. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
Hola Marcos!
Quise decir que al adicionar los campos es en el cds y no en los qrys, y con ambos componentes ibx y dbx he hecho la prueba con las consultas sin colocarle la sentencia del where.... y permite adicionar los campo, solo que con dbx NO crea el campo de relacion que es el que se relaciona con el nuevo cds para colocarlo en la grilla como me habias sugerido en el hilo anterior. Otra cosa que me sucede es que al intentar eliminar un registro con dbx siendo que hay una relacion de integridad referencial en la BD lo elimina sin chistar, no da error o mensaje alguno en el front-end, claro esta que no lo elimina de la BD, pero me debería dar algun mensaje. Gracias nuevamente |
#4
|
||||
|
||||
Hola.
Los Querys de dbExpress són de solo lectura, por lo que imagino que el Delete para borrar el registro, lo realizas sobre un ClientDataSet relacionado con el Query. Realmente el ClientDataSet no puede darse cuenta de que no se podrá borrar el registro, puesto que simplemente lo borra de su caché local. No es hasta que se realiza un ApplyUpdates que no intenta borrar realmente el registro en la base de datos. Pero en ese momento si se tiene que enterar del problema, y lanzar una excepción. NOTA : Pón un 0 en el parámetro del ApplyUpdates, para que falle al encontrar un error. Sobre el problema con la relación maestro-detalle. ¿ Porqué no eliminas los componentes y los vuelves a crear ?, no sea que haya por ahí alguna propiedad escondidad, que hayas modificado en algún momento, y te esté haciendo la puñeta. Puesto que establecer la relación es muy sencillo, y tiene que funcionar, yo lo utilizo muchisimo. ----qryPedido : SQL : select * from Pedidos where IdPedido = :IdPedido ----idsPedido DataSet : qryPedido ----qryDetallesPedido Datasource : idsPedido SQL : select * from DetallesPedido where IdPedido = :IdPedido ----dspPedido : Dataset : qryPedido ---cdsPedido : Provider : dspPedido --- dsPedido : Dataset : cdsPedido ---cdsDetallesPedido DatasetFieldName : cdsPedidoqryDetallesPedido ---dsDetallesPedido Dataset : cdsDetallesPedido Recuerda de crear los campos persistentes tanto en los querys como en los clientdatasets, y de crear también persistentes los parámetros. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
Hola Marc!
Ya he encontrado la solución. El problema esta en la forma de conexión de los componentes. Cita:
Gracias Espero los que tengan estamisma duda les sirva de ayuda. |
|
|
|