![]() |
busqueda por distintos parametros
hola, el problem ake etengo es este...
un frame ke debe mostrar productos en una grilla en funcion de lo que hayas elegido en 3 listbox.. para mi caso, PROVEEDOR; APLICACION; TIPO. se entiende? son filtros,, ,,, la solucion mas simple ke se me ocurrio ,, aunke la mas trabajosa, fue crear 1 cosulta para cada combinacion de seleccion( o sea,, ke elija solamente buscar por 1 det, proveedor y 1det aplicacion,, por 1 campo solo, por ninguno, por todos,,, es mas tube ke crear tantas grillas como cnsultas,, las cuales se ponen visibles o no, segun el caso.. lo ke kise hacer era crear una sola grilla e ir cambiandole dinamicamente el DATASOURCE,, pero no me andubo. el prpoblema es ke necesito una vez devueltos los resultados de ese filtrado, aplicar una funcion a c/u de los productos. pero como son grillas distintas y levnatan de consultas distintas... se hace tedioso... pedron por escribir tanto, pero keria ser lo + claro posible. uso delphi 7 y sql server.. saludos. RAFFA |
Hola:
Es difícil ver que es lo que te confunde. Deberías ser más sencillo el asunto, generar una consulta de acuerdo a la lista que eliges y luego mostrar en la grilla...así de sencillo. Y con un solo TQuery¡¡¡¡¡¡ Saludos. |
esta bien, yo genero una consulta distinta en funcion de lo que elige el usuario. pero la grilla solo puede tener 1 sola consulta como source. por esto tube ke hacer varias grillas e ir apagandolas o prendiendolas.
se entiende,-? el problema de esto es ke una vez ke tengo los resultados de alguna de las grillas , independientemente de cual se tendria ke hacer lo mismo... lo uqe se hace dificil si tengo ke recorrer la consulta, dado ke no se cual es la ke debo recorrer ,, sin tener ke hacer un cASE saludos RAFFA |
Cita:
- Cierra el datasource del grid - si hace falta, puedes hacer un DBgrid1.Datasource := nil; - por código asignas el nuevo datasource. - haces un dgrid1.RebuildColumns (no recuerdo ahora si es dgrid.Columns.Rebuildcolumns) -abres el nuevo datasource. En la unidad del grid, accedes siempre a los campos con Dbgrid1.Datasource.Dataset.FieldbyName, y tendrás un grid genérico para todos los Datasources que quieras. Otra solución es mantener una consulta fija para el grid, pero cambiando el sql.text dependiendo de lo que el usuario elige. Es algo engorroso, pero puedes crearte funciones para separar el proceso: Fechas y Clientes son funciones que devuelven parte de las restricciones que ha de tener la consulta. Lo óptimo seria incluir en el select solo los campos necesarios para cada consulta; puedes tener varias constantes predefinidas (incluso en archivos .ini para modificarlas sin tener que recompilar) y deducir cual elegir segun el criterio del usuario. Un saludo |
Cita:
TheGrid := DBgrid2; A partir de ahora accedes siempre por TheGrid.Datasource.Dataset.Fieldbyname. Recuerda que esa asignación es una asignación de punteros, realmente solo hay un grid. Un saludo |
PUes yo no entendí nada del problema. Recuerda que para cambiar el contenido de una DBGrid no cambias el DBGrid en si, sino que hay que cambiar el DataSource que tiene asignado el DBGrid. Opino lo mismo que LucasArts, con un solo DBGrid y un solo TQuery debería ser suficiente para ir mostrando cualquier combinación que haga el usuario.
Si lo que quieres hacer es una búsqueda por parámetros, pues entonces hay que consultar la ayuda del TQuery para utilizar parámetros. Cita:
Saludos |
muchismias gracias a todos,,,, pude ir cambiando el datasource. el problema era ke me faltaba poner grilla.datasource.dataset
una dudilla, como defino el ancho de las columnas ? dado ke la grilla no muestra siempre las mismas columnas.. es esto posibnble? saludos y garcias denuevo RAFFA |
Revisa la propiedad Columns de tu DBGrid.
|
a mano con el mouse le achico las coluimnas, pero cuando lo ejecuto las pòne del tamaño ke kiere...
no se ke pasa... |
por código:
en diseño creo que no sería conveniente ya que cambias el datasourse dependiendo de la combinación que haga el usuario.... pero si quieres probar, en al propiedad columns puedes agregar las columnas que vayas a visualizar y cada una modificarla a tu antojo. |
El width que le pone automaticamente es el que indique en Campo.DisplayWidth en la definición de su tabla y/o query.
Un saludo |
La franja horaria es GMT +2. Ahora son las 05:22:58. |
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