Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   busqueda por distintos parametros (https://www.clubdelphi.com/foros/showthread.php?t=24500)

raffagia 23-08-2005 17:54:40

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

lucasarts_18 23-08-2005 22:10:55

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.

raffagia 24-08-2005 02:34:55

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

Lepe 24-08-2005 14:50:30

Cita:

Empezado por raffagia
lo ke kise hacer era crear una sola grilla e ir cambiandole dinamicamente el DATASOURCE,, pero no me andubo.

Pues debe andar sin problemas.
- 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:
Código Delphi [-]
query1.sql.text := CONSTANTE_SELECT_FROM + ' where ' + Fechas + Cliente;
query1.open;
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

Lepe 24-08-2005 14:59:12

Cita:

Empezado por raffagia
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

Create dos propiedades privadas en la ventana: TheGrid:TDBGRID, cuando abras la consulta y hagas visible el grid, asigna esa variable, es decir:

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

ContraVeneno 24-08-2005 17:03:16

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:

Empezado por ayuda de delphi
The following code runs an insert query to add a record for Lichtenstein into the country table.
Query2.SQL.Clear;
Query2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
Query2.SQL.Add('VALUES (:Name, :Capital, :Population)');
Query2.Params[0].AsString := 'Lichtenstein';
Query2.Params[1].AsString := 'Vaduz';
Query2.Params[2].AsInteger := 420000;
Query2.ExecSQL;

Esto es para un insert, pero puedes hacer lo mismo para una consulta select, solo cambias los parámetros y vuelves a ejectuar la consulta y lixto.

Saludos

raffagia 24-08-2005 23:50:50

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

ContraVeneno 24-08-2005 23:54:16

Revisa la propiedad Columns de tu DBGrid.

raffagia 25-08-2005 18:42:41

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...

ContraVeneno 25-08-2005 18:53:28

por código:
Código Delphi [-]
dbg.Columns.Items[0].width; //o heigth
//tambien
dbg.columns[0].width

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.

Lepe 26-08-2005 11:45:51

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