![]() |
Con qué componente asocio un DBGrid?
Hola a todos!
Me gustaria saber si me pueden informar qué componente debo asociar a un DBGrid para poder visualizar las columnas del DBGrid sin que se me repitan los valores y poder hacer búsquedas en el DBGrid al seleccionar un valor en el otro componente. El DBGrid muestra las columnas de una sola tabla en SQL Server. Gracias por la ayuda. |
Cita:
Cita:
Cita:
Esto es un error muy común (sobre todo en los principiantes). El DBGrid es un mero visualizador de los datos que contiene un Dataset, pero sobre él (el DBGrid) no podemos hacer ninguna acción directa sobre los datos, hemos de recurrir al Dataset |
DBGrid + .....?
Hola Cadetill.
Lo primero darte las gracias por responderme, y lo segundo es que quiero proponerte otra duda a ver si me puedes ayudar: Estoy bastante confundida, pues he preguntado varias veces en el foro y sigo sin saber como solucionar mi problema. He probado todo lo que me habéis dicho y no me sale el resultado que yo deseo. Yo supongo que lo que quiero hacer es lo más básico del mundo, pero soy nueva en esto. He leido varios libros y sigo sin poder solucionar esto. Lo que quiero hacer es una aplicacion, en la que pueda visualizar una tabla completa y poder hacer búsquedas a través de varios componentes desplegables. Con la opción de MasterSource no funciona (puesto que son varias las tablas Maestras), y con los "inner join" tampoco me ha funcionado. Ya no sé qué probar más, pues llevo 2 semanas con esto y no lo consigo. Si me pudieras ayudar, te lo agradecería un montón. La base de datos es en SQL Server. El sistema operativo Windows XP. Delphi 7. Muchas gracias. |
Cita:
Creo que desde el principio no has expuesto de forma clara el problema así que lo haré yo por tí y ya me dirás si le atiné o no. En lugar de las nueve tablas que tienes vamos a simplificar a las tres que mencionas explícitamente y la principal: provincias = (id, otros campos) empresas = (id, otros campos) departamentos = (id, otros campos) principal = (id, provincia_id, empresa_id, departamento_id, otros campos) Lo que tú quieres es que provincias, empresas y departamentos sean maestras de principal, es decir: Cita:
---------------------- Una posible solución sería esta: Coloca las componentes adecuadas como sigue: grdPrincipal -> dsPrincipal -> DataSetPrincipal -> tabla principal cboProvincias -> dsProvincias -> DataSetProvincias -> tabla provincias cboEmpresas -> dsEmpresas -> DataSetEmpresas -> tabla empresas cboDeptos -> dsDeptos -> DataSetDeptos -> tabla departamentos donde grdPrincipal es el DBGrid para mostrar los datos de la tabla principal, cboXXX son DBLookupComboBox, dsXXX son DataSource, DataSetXXX son las componentes DataSet que uses para conectarte a las tablas físicas (TTable, TAdoTable, etc). Los combos se enlazan a los datasource mediante la propiedad ListSource. En lugar de usar MasterSource para DataSetPrincipal, usas su propiedad Filter poniendo Filtered := true. Asocias a todos los combo un evento OnClick común y ahí estableces el filtro según la selección actual:
En lugar de OnClick, también podrías usar el evento OnAfterScroll asociando uno común a todos los DataSet (excepto, claro, el principal) y poniendo el mismo código. ---------------------- Otra solución que podría no ser la más adecuada ya que tienes ocho tablas maestras y no sé cuántos registros en cada una pero que me ha funcionado bien para tablas "pequeñas", es la de juntar todos los maestros en uno, esto es, crear una tabla que registre todas las combinaciones posibles de las llaves principales de los candidatos a maestro: gran_maestro = (provincia_id, empresa_id, departamento_id) Si, por decir algo, las tablas provincias, empresas y departamentos tienen 20, 15 y 30 registros respectivamente, estaríamos hablando de una tabla con 20*15*30=9000 registros. Supongo que gran_maestro podría ser una vista en lugar de una tabla. A las mismas componentes de la solución anterior agregarías: dsGranMaestro -> DataSetGranMaestro -> tabla gran_maestro y asignarías DataSetPrincipal.MasterSource -> dsGranMaestro enlazando los MasterField: gran_maestro.provincia_id -> principal.provincia_id gran_maestro.empresa_id -> principal.empresa_id gran_maestro.departamento_id -> principal.departamento_id Ahora, igualmente con un evento OnClick común a los combos (u OnAfterScroll común a los DataSet), en lugar del filtro usarías Locate para colocar gran_maestro en el registro adecuado:
El registro debe existir ya que gran_maestro tiene todas las combinaciones posibles y, siendo maestro de la tabla principal automáticamente se filtrarán los registros adecuados. --------------------------- Bueno, si no le he atinado o está muy descabellado esto ya veremos de pensar otra solución. // Saludos |
Gracias por la ayuda.
Hola Roman.
Gracias por tu respuesta. Has entendido exactamente cual era mi problema. Y digo "era" porque ya lo he solucionado sola. Me he pasado 2 semanas preguntando en el foro y al parecer nadie me entendio. Tan mal me explique? Solo espero que la proxima vez que tenga que consultar algo, lo haga de la manera correcta y que la gente me entienda. Ha sido fustrante que nadie, pero nadie me haya entendido. De todas formas agradezco muchisimo que la gente me contestara, pues exponen sus conocimientos de manera gratuita, y eso para mi no tiene precio. Asi que, gracias de nuevo, y lo que hare la proxima vez es mirar la guia de estilos e intentar seguirla al pie de la letra. Nos vemos. |
La franja horaria es GMT +2. Ahora son las 06:49:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi