Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
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:
qryPedido.DataSource --> dsRelacionPedido <-- qryDetallePedido.Datasource
Aclaro que esto no lo hago por código, es la forma de explicarlo.

Luego adiciono un dsp(DataSetProvider) para asociarlo con el primer qry y un cds asociado al provider así:
Cita:
qryPedido <-- dspPedido.DataSet <-- cdsPedidos.ProviderName
Todo esto es con los componentes de dbExpress, es decir con SQLDataSet, SQLConnection.

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.
Responder Con Cita
  #2  
Antiguo 02-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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).
Responder Con Cita
  #3  
Antiguo 02-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 02-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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).
Responder Con Cita
  #5  
Antiguo 02-09-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Hola Marc!

Ya he encontrado la solución.
El problema esta en la forma de conexión de los componentes.

Cita:
PN: ProviderName
DS: DataSet
DSR: DAtaSource
QRY: QRY
CDS: CDS

cdsP.PN --> dspP.DS --> qryP <--- dsRP.DS <-- qryDP.DSR
Las flechas o la intención de ellas indican la forma de conectarse y asi sí crea el campo adicional en el cds.


Gracias
Espero los que tengan estamisma duda les sirva de ayuda.
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 20:25:04.


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