FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Delphi 2007 - Maestro detalle TIBDataSet+TDataSetProvider+TClientDataSet
Hola, amigos del foro:
Busco la corrección a un problema que no he podido solucionar de ninguna manera. Tengo una aplicación en Delphi 5, y en ella manejo una relación maestro detalle con componentes IBExpress, para acceso a FireBird 2.1, así DtsMaestro --> TIBDataSet PrvMaestro --> TDataSetProvider CdsMaestro --> TClientDataSet DscMaestro --> TDataSource DtsDetalle --> TIBDataSet PrvDetalle --> TDataSetProvider CdsDetalle --> TClientDataSet DtsMaestro.SELECTSql.Text:= 'SELECT * FROM DOCUMENTOS' DtsDetalle.SELECTSql.Text:= 'SELECT * FROM DOCUMENTOSDETALLE' En tiempo de diseño, establezco la relación maestro-detalle sobre los componentes TClientDataSet, de la siguiente manera: CdsDetalle.MasterSource = DscMaestro CdsDetalle.MasterFields = 'Indice' (que es el campo llave primaria en la tabla DOCUMENTOS) CdsDetalle.IndexFieldNames = 'DocumentoIndice' (campo que liga con la llave primaria 'Indice' del maestro) ... y todo funciona correctamente. El inconveniente se presenta ahora, que he actualizado a Delphi 2007: cuando intento abrir el CdsDetalle, me arroja el error 'Field "DOCUMENTOINDICE" not found, aún cuando todo está bien parametrizado. Haciendo otras pruebas, he notado que tengo este problema, sólo cuando utilizo TIBDataSet, porque si uso, por ejemplo TIBTable, funciona perfecto. ¿Cómo soluciono esto? ¿Existen problemas con el componente TIBDataSet incluido en Delphi 2007? Agradezco a quien me pueda colaborar. |
#2
|
||||
|
||||
¡Hola!
Lo planteado me despierta un par de sospechas. Por un lado el mensaje de error que dices arroja. ¿Podrías mostrárnoslo íntegro? (tip: en las ventanas de error de Delphi puedes usar Ctrl+C ;)). Por otra parte, parece que a la segunda sentencia le falta el parámetro con el que se logra el filtrado.
NOTA: Con respecto a esto último, hay que tener presente que el componente TClientDataSet nativo da por hecho que el parámetro usado lleva el mismo nombre que el campo indicado en IndexFieldNames. Por lo menos con el TClientDataSet de Delphi 7, la existencia del parámetro con el mismo nombre es condicionante para establecer de esta forma la relación maestro-detalle. Esperamos tu retroalimentación. Saludos. Al González. :) |
#3
|
|||
|
|||
Gracias, Al Fernández.
1. El mensaje que arroja es exactamente: 'Field "DOCUMENTOINDICE" not found', nada más. 2. Añadí en parametro del filtrado como me indicaste, en la sentencia SQL en DtsDetalle. pero: - Yo estoy haciendo la relación maestro/detalle al nivel de los ClientDataSet y no de los IBDataSet, entonces ¿Porqué debo colocar el parámetro allí, si en Delphi 5 funcionaba como lo describi en mi mensaje inicial? - El error inicial ya no aparece, pero ahora me muestra otro: 'Key violation', sin más texto. Por ahora no he podido realizar muchas pruebas para establecer si el nuevo inconveniente concierne a la parametrización de la relación maestro/detalle, pero todo parece indicar que sí. ¿Hay otras cosas a tener en cuenta al elaborar el tipo de relación que requiero, en Delphi 2007? - ¿Donde podría encontrar ayuda acerca del IBExpress 11 y sus componentes? Muchas gracias por tu ayuda... |
#4
|
||||
|
||||
¡Ah! Tú eres el que me cambia totalmente el apellido, ya sólo falta que me llames Chente.
Cita:
Cita:
Esperamos tus avances. Al González. Última edición por Al González fecha: 06-07-2008 a las 08:29:59. |
#5
|
|||
|
|||
Delphi 2007 - Maestro detalle TIBDataSet+TDataSetProvider+TClientDataSet
Hola, Al:
Primero que todo, discúlpame por la confusión en tu apellido (me confundí por la zeta,). Bueno, al fin logré establecer la relación maestro detalle gracias a tus indicaciones, pero demoré buen tiempo en detectar que ya estaba solucionado, porque, después de abrir los ClientDataSets maestro y detalle, el detalle no muestra los registros correspondientes, hasta que no empiezo a navegar en el maestro, lo cual solucioné, invocando el método First del ClientDataSet maestro. ¿Hay forma de que, al abrirlos, automáticamente me refresque el detalle?, porque sucede que tengo una aplicación bastante grande y temo que algo quede mal sin darme cuenta. En cuanto al inconveniente del 'Key violation', el problema lo corregí incluyendo el campo llave en la sentencia del detalle; lo que tampoco entiendo, pues no existían registros con la exactamente misma información. De todas formas, estoy trabajando bien en la forma que te cuento, pero me gustaría optimizar, si es posible. ¿Sabes dónde puedo encontrar información mucho mas detallada sobre el manejo de TClienDataSet?, pues lo que consigo casi siempre son descripciones de cada propiedad o evento, pero desearia algo más de contexto... Muchas gracias por tu ayuda, Chente. Saludos, GuerreroDelphi |
#6
|
||||
|
||||
¡Hola!
Cita:
Un favor: ¿podrías elaborar una "prueba aislada" que puedas enviar a mi correo o anexar como .zip en este mismo hilo (en caso de que aún en esa prueba aislada siga presentándose el problema) para compilarla y analizarla con detenimiento en mi Delphi 2007? Una pequeña aplicación con dos TClientDataSet maestro-detalle y demás componentes necesarios ya armada. Me gustaría ver el trazo que sigue dentro de la VCL para descubrir por qué no te carga los detalles desde la apertura. Cita:
Cita:
1. Código fuente de la VCL (es muy enriquecedor atreverse a bucear en él). 2. Estupendos foros como este. 3. Libros de autores reconocidos como Ian Marteens, Marco Cantú, entre otros. 4. Bitácoras sobre Delphi y sus autores. 5. Cursos Delphi, como este que encontré de Ian Marteens: http://www.marteens.com/cdb1ad.pdf, o el que ofrezco en Sistemas GH. Un abrazo maestro. Al González. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
TClientDataSet, en Maestro detalle | JorgeBec | Conexión con bases de datos | 17 | 14-08-2007 11:52:01 |
Maestro detalle con TClientDataSet | jzginez | Conexión con bases de datos | 1 | 31-08-2006 23:23:14 |
Error “unassigned code” Maestro/Detalle con TClientDataSet | jmlifi | Conexión con bases de datos | 1 | 21-06-2006 16:10:05 |
Maestro-Detalle con Delphi 7 | silviodp | Conexión con bases de datos | 5 | 31-01-2005 12:46:23 |
Maestro Detalle en Delphi | AGAG4 | Conexión con bases de datos | 2 | 09-08-2004 16:36:07 |
|