ClientDataSet

Buenas, Estoy buscando documentación sobre dbexpres (con clientdataset)en concreto sobre los nested dataset (una especie de master detail) todos los ejemplos que he encontrado funcionan por que las tablas que usan tienen el mimo nombre de campo para los campos que las relacionan. En mi caso tengo una base de datos firebird en todas las tablas existe un campo cuyo nombre es PORQUE, y mi problema radica en que el client dataset se empeña en establecer la relación entre esos dos campos cuando en la consulta sql(en el componente dbxpress) claramente indico algo tal que así: select * from t1 where porque = :FKCAMPO ) el componente dbexpress recupera correctamente los datos el problema parece tenerlo el tclientdataset, ya que por ejemplo si hago un append asigna el valor del campo porque de la tabla maestra al porque de la detalle cuando debería hacerlo al campo FKCAMPO de igual modo si el valor de porque en la detalle no coincide con porque de la maestra me dice que no encuentra un registro en la maestra que se corresponda cuando de nuevo la coincidencia debería forzarla por el valor del campo fkcampo,¿? ¿A caso no es posible establecer dicha relación entre tablas cuyos nombres de campos de union no son iguales? (Existiendo en ambas tablas campos con el mismo nombre)
Espero haberme explicado y espero que puedas guiarme gracias de ante mano.

1 respuesta

Respuesta
1
Lo primero que tienes que hacer es ver la integridad referncial de la base de datos.
Lo segundo que puedes hacer es un truco creas o importas el modelo entidad relación a access y en el asistente de consultas creas las consultas que desees.
Esta propiedad te permitirá ademas ver todo en lenguaje SQL y después ejecutarlo en cualquier motor de Base de datos (claro que a las consultas hay que hacerles unos pequeños cambios), la ventaja radica que access te crea las consultas SQL cin los joins (Inner, self, left, right).
Gracias, pero me temo que no he conseguido explicarme, si no te importa lo intentare de nuevo.
Tengo documentación con ejemplos que funcionan. El problema radica en que yo tengo un db en producción, todas las tablas tienen un campo cuyo nombre es porque (y que como su nombre indica el primary key) mi problema radica en que al existir dicho campo en las tablas digamos TMaster y TDetail no consigo establecer la relación maestro detalle
que debería ser digamos tMaser. Porque con tdetail.fkmaster donde los campos de union son porque en tmaster y fkmaster en tdetail por que el componente tclientdataset establece dicha relación mediante master. Porque y detail. Porque (y no detail.fkmaster como yo quiero )
el caso es que en la documentación de que dispongo los ejemplos casualmente los campos de union tienen el mismo nombre en las respectivas tablas pero si son campos de union, parece ser que el clientdataset al encontrar mis campos porque los usa como campos de union en lugar de cogerlo que yo especifico en la propiedad commandtext del sqldataset donde se especifica la select, yo culpo al clientdataset (o a mi mismo por no saber usarlo) por que los datos que muestra (recuperados por el sqldataset) son correctos como te decía el problema esta cuando intento grabar por que para el los campos de union son los ya mencionados porque. Ademas te comento que pruebas hechas sin la existencia de campos de igual nombre que ademas no sean campos de union funciona el problema solo me aparece con campos de igual nombre que no son los de union
En cualquier caso agradezco tu pronta respuesta
Una opción seria partir las tablas en el modelo entidad relación, cuando hay relación de muchos a muchos entre la dos tablas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas