Ver Mensaje Individual
  #7  
Antiguo 27-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por el_barto
Ehhh no entiendo mucho el concepto MasterSource
¡Pues a ponerse las pilas! Esto es esencial si vas a manejar bases de datos relacionales.

Vamos a suponer que tienes tus tablas

proveedores = (id, nombre, otros campos)
productos = (id, proveedor_id, nombre, otros campos)

Estas dos tablas están relacionadas mediante las llaves:

proveedores.id <--> productos.proveedor.id

en una relación 1 a muchos (cada producto es de un único proveedor y cada proveedor puede tener muchos productos).

Si tú filtras la tabla de productos por un proveedor obtendrás todos los productos de ese proveedor.

En Delphi, estas relaciones se establecen entre dos dataset asociados a las tablas físicas mediante las propiedades MasterSource y MasterFields de la tabla que quieres filtrar.

Así, si tblProductos y tblProveedores son componentes Table asociadas a las tablas productos y proveedores respectivamente y dsrProductos y dsrProveedores son datasource enlazados a ellas, entonces tienes que poner

tblProductos.MasterSource := dsrProveedores

En el inspector de objetos, una vez hecho esto, das doble click sobre la propiedad MasterFields de tblProductos y en la ventana que aparece especificas los campos que hacen la relación en la tabla maestra (proveedores) y la tabla "fuente" o "esclava" (productos).

Normalmente, para poder hacer esto deberás haber definido un índice sobre la llave foránea (proveedor_id) en la tabla esclava.

Con esto, la tabla productos se filtra en automático cada vez que seleccionas un proveedor por lo que al seleccionarlo en el combo, el grid sin más nada mostrará sólo los productos de ese proveedor.

// Saludos
Responder Con Cita