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)
-   -   Problemas con filter (https://www.clubdelphi.com/foros/showthread.php?t=40383)

vroa74 14-02-2007 20:46:17

Problemas con filter
 
:D Estoy usando una base de datos local, y necesito poder filtrar un intervalo de fecha estoy usando las siguientes sentencias:

Form1.table1.filter := 'Fecha >= '+DateTimeToStr(DateTimePicker1.Date)+'And Fecha <= '+DateTimeToStr(DateTimePicker2.Date)+'';
= >no funciona


con:= con + 'Fecha >= ';
con:= con + DateToStr(DateTimePicker1.Date);
con:= con + ' And ';
con:= con + ' Fecha <= ';
con:= con + DateToStr(DateTimePicker2.Date);
Form1.table1.filter :=con;
= >no funciona

Form1.table1.filter := 'Fecha >= ''06/02/2007''And Fecha <= ''07/02/2007''';
= > si funciona


Form1.table1.filter := 'Fecha >= '''+DateTimeToStr(DateTimePicker1.Date) + ''''+'And'+'Fecha <= ''' + DateTimeToStr(DateTimePicker2.Date) + '''';

= >no funciona
todo con la siguiente linea

Form1.table1.filtered := true;

:D Tambien me gustaria saber como puedo obtener la fecha del sistema he buscado y no se he visto fecha y hora solo necesito la fecha.

jhonny 14-02-2007 20:54:39

Intentalo asi:

Código Delphi [-]
 
Form1.table1.filter := 'Fecha >= "'+DateTimeToStr(DateTimePicker1.Date)+'"And Fecha <= "'+DateTimeToStr(DateTimePicker2.Date)+'"';

Para lo de la fecha solo debes usar la función Date

Caral 14-02-2007 21:02:14

Cita:

Empezado por jhonny
Intentalo asi:

Código Delphi [-]
 
Form1.table1.filter := 'Fecha >= "'+DateTimeToStr(DateTimePicker1.Date)+'"And Fecha <= "'+DateTimeToStr(DateTimePicker2.Date)+'"';

Para lo de la fecha solo debes usar la función Date

Hola
Los filtros por alguna razon que desconozco, se tornan un poco lentos, sobre todo cuando la tabla es muy grande, queda a veces mejor usando un query y una sentencia sql.
No digo que el filtro no sirva o use, digo que en ciertas ocasiones sobre todo cuando se usan varias tablas a la vez, es mas limpio con un query.
Creo que el table trae todo la tabla y luego hace el filtro, el query solo trae el dato que se le pide ahorrando tiempo.
Por favor corrijanme.
Saludos

Caral 14-02-2007 21:04:23

Hola jhonny
No se como hice para que se citara tu intervencion, no fue mi intencion, pero de todos modos me gustaria saber como se hace, ya que esta salio asi por casualidad.:D
Que teclas aprete?
Saludos

jhonny 14-02-2007 21:16:48

Cita:

Empezado por caral
pero de todos modos me gustaria saber como se hace, ya que esta salio asi por casualidad

Bueno pues si quieres saber como lo hiciste :D, solo es cuestion de que le des editar a tu post y veas que fue lo que escribio el editor al rededor de lo que haz citado.

Y si no me hice entender con lo que acabo de decirte pues mira el botoncito que hay en el editor como con una nube de dialogo (como en las caricaturas). Solo es cuestión de seleccionar el texto que quieres citar y presionar ese botón.

Ahh, y si no te muestra la barra de herramientas verifica de que tienes activado el editor WYSIWYG en tu perfil de usuario.

Caral 14-02-2007 21:18:40

Gracias jhonny
Tantas veces haciendo cosas y esta me pillo de sorpresa.:D
Saludos

vroa74 14-02-2007 22:42:55

Discupen ya habia probado lo que me han dicho en sus comentarios.

Les envio un la captura de la imagenes en cada una de la lineas qye me enviaro, no se pudo hacer la consulta satisfactoriamente.

Form1.table1.filter := 'Fecha >= '''+DateToStr(DateTimePicker1.Date) + ''''+'And'+'Fecha <= ''' + DateToStr(DateTimePicker2.Date) + '''';
=sistema.jpg

Form1.table1.filter := 'Fecha >= "'+DateToStr(DateTimePicker1.Date)+'"And Fecha <= "'+DateToStr(DateTimePicker2.Date)+'"';
=sistema2.jpg

jacanche 14-02-2007 22:52:48

Para que no te enredes con los ''', usa la funcion QuotedStr

Código Delphi [-]
Form1.table1.filter := 'Fecha >= '+QuotedStr(DateTimeToStr(DateTimePicker1.Date))+' And Fecha <= '+QuotedStr(DateTimeToStr(DateTimePicker2.Date));

Ahora si no te funciona asi, checa el formato de Fecha y hora, quizas el DateToStr te lo devuelva en formato mes,dia año, y por eso no te lo filtra, y no te das cuenta por que son fechas validas.
Lo que hago usualmente es poner en el dpr estas dos lineas

Código Delphi [-]
  
ShortDateFormat :='dd/mm/yyyy';
DateSeparator :='/';

para que no se tomen las que trae por default la instalacion de windows.

vroa74 14-02-2007 23:28:06

Hello ya hice esta prueba de esta sintaxis si funciona:

Form1.table1.filter := 'Fecha = ''' + DateToStr(DateTimePicker1.Date) + '''';

Esta sintasixis no manca eeror de formato pues da fecha y hora.

Form1.table1.filter := 'Fecha >= '+QuotedStr(DateTimeToStr(DateTimePicker1.Date))+' And Fecha <= '+QuotedStr(DateTimeToStr(DateTimePicker2.Date));

jhonny 14-02-2007 23:33:03

Coloca tambien los respectivos parentesis asi:

Código Delphi [-]
Form1.table1.filter := '(Fecha >= '+QuotedStr(DateTimeToStr(DateTimePicker1.Date))+') And (Fecha <= '+QuotedStr(DateTimeToStr(DateTimePicker2.Date))+')';

jpcancino 25-02-2007 09:26:54

Cita:

Empezado por vroa74
Hello ya hice esta prueba de esta sintaxis si funciona:

Form1.table1.filter := 'Fecha = ''' + DateToStr(DateTimePicker1.Date) + '''';

Puedes explicar pq esa sintaxis con muchas comas funciona y esta sintaxis:

Código Delphi [-]
Form1.table1.filter := 'Fecha =  ' + DateToStr(DateTimePicker1.Date);
¿si tira error?
Con la última dice que funciones arismeticas no son compatibles con el filtrado de tablas. ¿Lo dice por los "/"? ¿por qué se soluciona con esas comas demás?

Saludos

jacanche 25-02-2007 20:38:47

por que la propiedad filtro no es mas que una cadena que despues es interpretada para evaluar la condicion que tu hayas definido, por ejemplo
esto :
Código Delphi [-]
Form1.table1.filter := 'Fecha =  ' + DateToStr(DateTimePicker1.Date)
es equivalente a esto otro, lo cual puede ser interpretado erroneamente como una operacion aritmetica
Código Delphi [-]
Form1.table1.filter := 'Fecha =25/02/2007'


en cambio si le agregas las comillas, seria como si asignaras algo parecido a esto

Código Delphi [-]
Form1.table1.filter := 'Fecha =''25/02/2007'''
lo cual ya podra ser interpretado correctamente como una fecha.

Esto ya es correcto, pero para no enredarme con tantas comillas, prefiero usar la funcion QuotedStr de esta forma :
Código Delphi [-]
Form1.table1.filter := 'Fecha = ' + QuotedStr(DateToStr(DateTimePicker1.Date));

felipe88 26-06-2007 22:53:46

...y con Query
 
Si quisiera realizar un filtro parecido a este usando un Query... datos que luego se puedan eliminar usando otro Query , como seria...???
Si dicen que con la tabla es lento, existe una forma de acelerarlo...??? :confused:

vtdeleon 27-06-2007 02:09:41

Los Ttable y sus derivados son lentos porque te traen tooodos los registros a parte de otras cosillas. Lo mejor es utilizar los TQuery.

Para filtrar es lo mas facil, un ejemplo..:
Código Delphi [-]
begin
  With Query1 do
  begin
    Close;//Cerrams el Query
    Sql.Text:='Select Campo1, campo2 fron Tabla1 Where Campo1=:Fecha1';
    //Se Asigna la sentencia donde se filtrara por fecha
    ParamByName('Fecha1').AsDate:=StrtoDate(edit1.text);//O utilizar un DateTimePicker qeu es mejor.
    //Aqui asingamos el valor del parametro para filtrarlo
    Open;//Listo! Abrimos la consultas
  end;
end;
{Ya veras los datos filtrados por el valor que hayas dado en el Edit o DateTiemPicker utilizado}
Suerte

jacanche 27-06-2007 04:37:34

Amigo, vtdeleon, permite que te corriga un pequeño gazapo, la funcion deberia ser StrTodate, no DateToStr.

vtdeleon 27-06-2007 04:55:08

Oops, Si:D. Gracias jacanche.

Lo corregiré


La franja horaria es GMT +2. Ahora son las 20:31:00.

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