PDA

Ver la Versión Completa : Master Detail


Carlex
05-08-2004, 04:29:01
Buenas, estoy usando un DBGRID para mostrar los datos directamente de la tabla pero esta al estar relacionada, muestra los codigos solamente, ma indicaron que usando master detail esos codigos ya no apareceran y mostraran el campo, es decir en vez de "01" que diga "Zapatos" dentro del dbgrid, coloque la propiedad mastersource a todas las tablas pero nada! sigue igual, que estoy haciendo mal?

roman
05-08-2004, 05:31:04
En este caso no es una relación maestro-detalle lo que requieres sino un campo de tipo lookup.

Vamos a poner un ejemplo.

Suponte que tienes estas tablas:

pedidos = (id, producto_id, cliente_id)
productos = (id, nombre, precio)
clientes = (id, nombre, domicilio)

En la tabla pedidos el campo producto_id es el código del producto, por ejemplo "01" el cual corresponde al registro con id="01" en la tabla productos:

(01, zapatos, 30)

Como has visto, al asociar el DBGrid a la tabla pedidos se lista el código del producto y no el nombre del producto.

Para que aparezca el nombre del producto debes agregar un campo de tipo Lookup: en el editor de campos del Table que uses para los pedidos (doble click sobre la componente) añades, además de los campos requeridos, un nuevo campo seleccionando el tipo Lookup y asignando las siguientes propiedades:

Name - el nombre que desees
Type - el tipo de datos del nombre del producto (supongo que String)
Size - la longitud del campo (deberá corresponder a la longitud que tengas definida en el campo nombre de la tabla productos)
Field Type - Lookup
DataSet - la componente Table que uses para productos
Result Field - el campo "nombre" (de la tabla productos)
Key Field - el campo producto_id (de la tabla pedidos)
Lookup Field - el campo id (de la tabla productos)

Con esto acabas de establecer la relación entre ambas tablas y el DBGrid te presentará el nuevo campo mostrando el nombre del producto.

En el ejemplo te puse la tabla de clientes para mostrarte la diferencia con una relación maestro-detalle.

Suponte que cada vez que seleccionas un cliente en un DBGrid deseas mostrar en otro DBGrid todos los pedidos de ese cliente. Aquí las tablas clientes y pedidos se relacionan mediante los campos

clientes.id <--> pedidos.cliente_id

Es decir, muy parecido a lo anterior. Pero ahora estableces a clientes como maestro de pedidos (propiedad MasterSource de la tabla pedidos usando los campos anteriores como MasterFields).

De hecho fíjate como la misma relación

clientes.id <--> pedidos.cliente_id

también puede usarse como Lookup para mostrar en el DBGrid de pedidos el nombre del cliente. Pero en tal caso ya no sería una relación maestro-detalle.

De cualquier forma yo te recomiendo que dediques un poco de tiempo a estudiar estos conceptos que son básicos para el desarrollo de tus sistemas.

// Saludos

Carlex
05-08-2004, 14:24:16
GRACIAS, simplemente genial tu ayuda, funciona a la perfeccion, :D gracias