Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Resultados en DBGrid según filtrado (https://www.clubdelphi.com/foros/showthread.php?t=28165)

Mathom 12-12-2005 11:59:52

Resultados en DBGrid según filtrado
 
Hola de nuevo a todos después de un largo puente (como cuesta vovlerse a enganchar, eh?).

Vamos a ello. Como algunos de vosotros recordareis estoy realizando una aplicación para el control de stock con acceso a tablas paradox. Tres de ellas son normales y después tengo una maestro detalle (pedido - detalle).

Bien, todo eso ya está pero ahora necesito hacer unos filtros predefinidos (por ejemplo: pedidos de fecha tal a fecha cual cuyo valor sea mayor que tantos euros) y que el resultado sea reflejado en un DBGrid, es decir en este DBGrid en un principio saldrían todos los pedidos y al pulsar el botón del filtrado que he indicado únicamente los resultados que cumplan el filtro para después poder imprimirlos.

DUDAS: todas las del mundo pero concretemos. Primero es posible con tablas Paradox, verdad?? decirme que si que como tenga que empezar me muero. Después como filtrar y representarlo en en el DBGrid y por último como imprimirlo ya que si no me equivoco el QReport tal como lo utilizo no imprime el DBGrid sino la tabla al completo.

He estado ojeando por ahí y he encontrado un componente llamado SMDBGrid (lo conocí en este foro y la URL es...
Cita:

http://www.scalabium.com/smdbgrid.htm
....)

Me sirve para lo que quiero??

No pretendo que me solucionen el problema, aunque si agradecería cualquier explicación, sino que me indiqueis cualquier página que haga referencia a lo que quiero hacer, parte de código o cualquier cosa que me pueda ayudar.

Como siempre...muchísimas gracias por vuestra ayuda.

Neftali [Germán.Estévez] 12-12-2005 13:09:04

Cita:

Empezado por Mathom
Bien, todo eso ya está pero ahora necesito hacer unos filtros predefinidos (por ejemplo: pedidos de fecha tal a fecha cual cuyo valor sea mayor que tantos euros) y que el resultado sea reflejado en un DBGrid, es decir en este DBGrid en un principio saldrían todos los pedidos y al pulsar el botón del filtrado que he indicado únicamente los resultados que cumplan el filtro para después poder imprimirlos.

DUDAS: todas las del mundo pero concretemos. Primero es posible con tablas Paradox, verdad?? decirme que si que como tenga que empezar me muero. Después como filtrar y representarlo en en el DBGrid y por último como imprimirlo ya que si no me equivoco el QReport tal como lo utilizo no imprime el DBGrid sino la tabla al completo.

El tema del filtro se arregla generando la sentencia SQL correspondiente y "enganchándosela" al DBGrid. Es decir, si tu DBGrid usa como fuente de datos una consulta del tipo:

Código SQL [-]
Select * from pedidos

que es equivalente a usar la tabla Pedidos, cuando desees usar un filtro, cambias la consulta por:

Código SQL [-]
Select * from pedidos
where (fecha <:f1 and fecha>:f2) and (valor>:Valor)

y eso te mostrará en el DBGrid los registros que cumplan la condición.
Deberías buscar y revisar información sobre SQL y parámetros.

El tema de imprimir es lo mismo. Si imprimes una tabla, imprimirá todo, si imprimes una consulta sólo imprimirás lo que devuelva la consulta; Es cuestión de aplicar a la consulta los filtros que necesites.

Lo dicho; Te reciomiendo que hagas unas pruebas sencillas con DBGrid y TQuery añadiendo filtros a la consulta.

Mathom 12-12-2005 17:14:04

Antes que nada....gracias.:) Ahora mi pregunta es...tengo que hacer las tablas en SQL?? no sirven las de Paradox?? o es lo mismo, es decir, puedo tener las tablas en Parados y las consultas en SQL sirven.

La pregunta igual os resulta absurda pero como he dicho antes..son mis comienzos....:confused:...y todo son dudas..

Gracias de nuevo.

Neftali [Germán.Estévez] 12-12-2005 17:48:51

Correcto; Es lo mismo. No tienes que cambiar; Cuando hablamos de SQL me refiero a consultas, no a que tengas que cambiar de Base de Datos. El lenguage en el que se hacen las consultas (SELECT * FROM ...) se llama SQL de ahí que hablemos de trabajar con:
* Tablas: Componente TTable
* Con SQL: Componentes TQuery

Una consulta SQL es una forma de consultar la tabla de Paradox (o de cualquier otra Base de Datos).

Espero haberme explicado bien.

Mathom 14-12-2005 09:24:55

A la perfección, te explicas muy bien. Conozco el lenguaje SQL, no soy un As pero conozco bastante por lo que no tendré problemas a la hora de realizar las consultas.
Voy a echarle un vistazo pero ya deduzco que el problema lo voy a tener a la hora de enlazar las consultas con el DBGrid. Me explico yo tengo un formulario donde aparece el grid que ya representa los datos, por ejemplo de todos los pedidos. el datasource y la tabla los tengo en un datamodule. Ahora bien, en el formulario del que os hablaba debe tener por ejemplo un boton cuya consulta sea "Select * from pedidos where comprar = "si" " y se vea reflejado en el grid que ya tenía reflejado los datos.
Bien, que me haría flata?? supongo que debería quitar la tabla del datamodule y sustituirlo por un Query cuya consulta sea "select * from pedidos" y posteriormente en el botón que active el filtro modificar la consulta a lo que se pretenda, no??.

por último, según he visto sería...
Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL := 'select * from pedidos where comprar = "si";
Query1.Open;
end;

Muchas gracias por tu ayuda Neftali.:)

Neftali [Germán.Estévez] 14-12-2005 11:25:42

Cita:

Empezado por Mathom
...supongo que debería quitar la tabla del datamodule y sustituirlo por un Query cuya consulta sea "select * from pedidos" y posteriormente en el botón que active el filtro modificar la consulta a lo que se pretenda, no?

Correcto, esa es una opcion, y la otra es mantener la tabla y el query; Cuando necesites todos "enganchas" el Grid con la tabla y cuando quieras filtrado lo "enganchas" a la consulta; Se trata simplemente de cambiar la propiedad por código del DataSet/Datasource, para que apunte a la tabla o a la consulta segun te vaya interesando.

De ambas formas debe funcionar corectamente.

Mathom 14-12-2005 15:04:08

Por lo que deduzco también que hay dos modos de hacerlo, uno con un solo Query al que le vamos cambiando la consulta según el botón de filtrado que pinchemos....y la segunda con varios Querys, uno por tipo de consulta y en el botón de filtrado de cada consulta cambiar el direccionamietno del datasource. Me he explicado, verdad??

Pues bien a probar...

MIL GRACIAS !!:D

en cuanto me salga, aviso !!

Mathom 15-12-2005 14:16:49

Me vais a echar bronca, pero es que ya no veo ni la pantalla. No me sale pq no me conecta. Es la sentencia la que està mal pero ahora mismo no entiendo el porqué.

Tengo en un DataModule (datamodule8) el datasource (datasource1), la tabla (table1) y el query (query1).

El DBGrid está en un formulario (form1). Bien, si quiero cambiar el DBGrid (ahora mismo apunta a la tabla) para que apunte a la query como sería??

He probado varias cosas pero como os digo algo tan elemental no lo veo.

Datamodule8.Datasource1.Dataset:= 'query1'

No seais muy crueles conmigo.:(

Mathom 15-12-2005 14:19:04

tambien he probado lo mismo pero con query sin las comas


La franja horaria es GMT +2. Ahora son las 19:22:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi