Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Campo Filter de ADOTable (https://www.clubdelphi.com/foros/showthread.php?t=41573)

Sr.Scorpion 19-03-2007 22:31:54

Campo Filter de ADOTable
 
Hola

Tengo una BD en Access y uso Delphi 6

tengo un campo fecha (31/01/2007) y quiero saber como puedo filtrar por el año o por el mes.... a traves del campo Filter de un ADOTable

Saludos y Gracias

Caral 20-03-2007 01:03:13

Hola Sr.Scorpion
Asi:
Código Delphi [-]
ADOQuery1.Open;
ADOQuery1.Filter := 'Fecha = '+DateToStr(Edit1.Text);
ADOQuery1.Filtered := True;
o con un datetimepicker
asi:
Código Delphi [-]
ADOQuery1.Open;
ADOQuery1.Filter := 'Fecha = '+datetimepicker1.date;
ADOQuery1.Filtered := True;

Saludos

Sr.Scorpion 20-03-2007 15:05:27

Bueno al parecer me explique mal....

Tengo varios registros y quiero registrarlos todos por un mismo Mes.... y segun la solucion que me das es solo para los registros con la fecha q di al inicio

Nelet 20-03-2007 16:14:33

Así creo que valdría:

Código Delphi [-]
ADOQuery1.Open;
ADOQuery1.Filter := 'Month(FECHA)= '+Edit1.Text;
ADOQuery1.Filtered := True;

En el edit deberías poner el año a buscar.

Onti 20-03-2007 16:20:23

Cita:

Empezado por Nelet

En el edit deberías poner el año a buscar.

No deberia poner el mes?
(ademas asumimos todas la fechas están el mismo año)

Sr.Scorpion 20-03-2007 16:22:11

Ya eso lo habia probado con anterioridad y no funciona... no obstante estoy usando un ADOTable, no un ADOQuery

Saludos

Nelet 20-03-2007 16:31:39

Cita:

Empezado por Onti
No deberia poner el mes?
(ademas asumimos todas la fechas están el mismo año)

Pues si....pero acabo de comer y llevo una torta monumental. Mea culpa.

Cita:

Empezado por Sr.Escorpion
Ya eso lo habia probado con anterioridad y no funciona... no obstante estoy usando un ADOTable, no un ADOQuery

Bueno...con el ADOTable es igual, incluso tiene más sentido usar el Filter. Pero, ¿por que no te funciona?. ¿Te da algún error?. Quzá dependa del tipo de BD.

Sr.Scorpion 20-03-2007 16:55:36

Cita:

Empezado por Nelet
Pues si....pero acabo de comer y llevo una torta monumental. Mea culpa.


Bueno...con el ADOTable es igual, incluso tiene más sentido usar el Filter. Pero, ¿por que no te funciona?. ¿Te da algún error?. Quzá dependa del tipo de BD.

El error que me da dice... Argumentos incorrectos. Fuera del Intervalo permitido o en conflicto con otros...

Código Delphi [-]
ADOTable.Filtered:= False;
ADOTable.Filter:= 'Month(FCompra)= '+ '03';
ADOTable.Filtered:= True;

FCompra es el campo guardado en una BD de Access con el formato de fecha corta Ejemplo: 31/01/2007

Si ya tu hicistes la prueba por favor enviame el codigo.... por lo menos el que me pusistes arriba es un ADOQuery no un ADOTable

Nelet 20-03-2007 16:58:47

Código Delphi [-]
ADOTable.Filtered:= False;
ADOTable.Filter:= 'Month(FCompra)= '+ '03';
ADOTable.Filtered:= True;
ese
Código Delphi [-]
+'03';
no me gusta nada.

Prueba así:

Código Delphi [-]
ADOTable.Filtered:= False;
ADOTable.Filter:= 'Month(FCompra)=3';
ADOTable.Filtered:= True;
El mes es de tipo numérico y tu le estás pasando un string.

luisgutierrezb 20-03-2007 17:02:48

Cita:

Empezado por Sr.Scorpion
El error que me da dice... Argumentos incorrectos. Fuera del Intervalo permitido o en conflicto con otros...

A mi me da ese error por intentar filtrar una tabla que ya viene con "order by" desde la instruccion SQL, puedes usar la propiedad sort del adotable para ordernar el dataset y asi poder usar el filter

Sr.Scorpion 20-03-2007 17:06:51

Cita:

Empezado por Nelet
Código Delphi [-]ADOTable.Filtered:= False; ADOTable.Filter:= 'Month(FCompra)= '+ '03'; ADOTable.Filtered:= True;

ese Código Delphi [-]+'03';

no me gusta nada.

Prueba así:

Código Delphi [-]ADOTable.Filtered:= False; ADOTable.Filter:= 'Month(FCompra)=3'; ADOTable.Filtered:= True;

El mes es de tipo numérico y tu le estás pasando un string.

Tampoco funciona... sigue dando el mismo mensaje... al parecer estamos dando vuelta en circulos y tirando piedras... creo que es muy dificil que funcione tu solucion segun lei en la ayuda en la propiedad Filter se pone el CAMPO y despues lo que le quieres asignar por lo que... si le pones Month(FCompra) el va a buscar en la DB un campo llamado asi, a lo mejor en el ADOQuery te funciono porque entiende la funcion Month pero no pasa igual en el ADOTable

Disculpenme si me equivoco... pero creo que es mejor q ustedes mismos hagan la prueban para q vean lo que les digo... rectifiquenme si me equivoco

Gracias

Nelet 20-03-2007 17:38:33

Cita:

Empezado por Sr.Escorpion
Disculpenme si me equivoco... pero creo que es mejor q ustedes mismos hagan la prueban para q vean lo que les digo... rectifiquenme si me equivoco

Discúlpame tu a mi. En SQL Server si funciona, pero en Access, no. Me hace falta una siesta.

De todas formas si sabes el año y el mes que estás buscando he probado algo en access que si funciona:
Código Delphi [-]
ADOTable.Filtered:= False;
ADOTable.Filter:= 'FCompra >= FECHA_INICIAL AND FCompra <= FECHA_FINAL';
ADOTable.Filtered:= True;

En access es lo único que se me ocurre que puedas hacer. Las fechas inicial y final deberás calcularlas dado un mes o un año.

Espero te sirva.

Sr.Scorpion 20-03-2007 17:48:59

Cita:

Empezado por Nelet
Discúlpame tu a mi. En SQL Server si funciona, pero en Access, no. Me hace falta una siesta.

De todas formas si sabes el año y el mes que estás buscando he probado algo en access que si funciona:
Código Delphi [-]ADOTable.Filtered:= False; ADOTable.Filter:= 'FCompra >= FECHA_INICIAL AND FCompra <= FECHA_FINAL'; ADOTable.Filtered:= True;


En access es lo único que se me ocurre que puedas hacer. Las fechas inicial y final deberás calcularlas dado un mes o un año.

Espero te sirva.

Eso es lo que tengo implementado.... pero resulta un poco engorroso hacer eso para cada mes... sin contar que si en febrero poner 01/02/2007 hasta 31/02/2007 da error porque febrero llega hasta 28... y asi pasa con los demas meses que tienen 30 y 31 dias..... en fin resulta bastante codigo para hacer tan pequeña cosa

Caral 20-03-2007 17:57:33

Hola
Disculpen pero no se donde esta el problema de filtrar dos fechas.
Con dos componentes DateTimePicker:
Código Delphi [-]
 ADOTable1.Open;
 ADOTable1.Filter := 'FCompra >= '+DateToStr(DateTimePicker1.DateTime)+' AND FCompra <= '+DateToStr(DateTimePicker2.DateTime);
 ADOTable1.Filtered := True;
y ya.
Tambien se puede hacer con dos edit igual.
Saludos

Ivanzinho 20-03-2007 18:17:00

Cita:

Empezado por Sr.Scorpion
Eso es lo que tengo implementado.... pero resulta un poco engorroso hacer eso para cada mes... sin contar que si en febrero poner 01/02/2007 hasta 31/02/2007 da error porque febrero llega hasta 28... y asi pasa con los demas meses que tienen 30 y 31 dias..... en fin resulta bastante codigo para hacer tan pequeña cosa

Para evitarte eso puedes usar la función :

Código Delphi [-]
function EndOfAMonth ( const Year, Month : Word ) : TDateTime

Un saúdo

Sr.Scorpion 20-03-2007 18:27:27

Cita:

Empezado por Caral
Hola
Disculpen pero no se donde esta el problema de filtrar dos fechas.
Con dos componentes DateTimePicker:
Código Delphi [-] ADOTable1.Open; ADOTable1.Filter := 'FCompra >= '+DateToStr(DateTimePicker1.DateTime)+' AND FCompra <= '+DateToStr(DateTimePicker2.DateTime); ADOTable1.Filtered := True;

y ya.
Tambien se puede hacer con dos edit igual.
Saludos

el problema esta en poner dos componente para filtrar mientras que un combobox escoge el mes que quiera y me filtra

Caral 20-03-2007 18:35:58

Bueno Sr.Scorpion
Segun tu planteamiento, tienes en un combobox los meses.
Enero
Febrero
etc.
y quieres que te filtre de esos meses.
Es correcto?
Yo lo que haria seria que al grabar la informacion en la tabla indicara en un campo el mes que quiero, asi lo filtraria facilmente, no se si me explico.
Saludos

Sr.Scorpion 20-03-2007 18:49:53

Cita:

Empezado por Caral
Bueno Sr.Scorpion
Segun tu planteamiento, tienes en un combobox los meses.
Enero
Febrero
etc.
y quieres que te filtre de esos meses.
Es correcto?
Yo lo que haria seria que al grabar la informacion en la tabla indicara en un campo el mes que quiero, asi lo filtraria facilmente, no se si me explico.
Saludos

Eso traeria consigo replantear todo un procedimiento en el llenado de la tabla... y seria como darse por vencido ante una dificultad. Por lo que creo mas sensato seguir trabajando en el filtrado antes de claudicar e ir por otra solucion....


La franja horaria es GMT +2. Ahora son las 07:33:34.

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