PDA

Ver la Versión Completa : Como filtro una tabla?


kia
26-07-2003, 11:25:28
Hola a todos los foristas.
Soy novata, y por pequeñas cosas me quedo parada.

Quiero filtrar una tabla según por el campo que seleccionare en un RxDBLookupCombo, y que asignare el valor de dicho compo a traves de un Dbedit, resultado a un DbGrid.
Pero resulta que no se filtrar con codigo

table1.Filter:='TELEFONO='+'NOKIA';
table1.Filtered:=true;

Donde estoy fallando? No me funciona.
Gracias Kia ;)

andres1569
26-07-2003, 12:08:51
Hola:

Como el campo TELEFONO es de tipo string, debes pasarle el valor entre comillas, para ello ayúdate de la función QuotedStr:

Table1.Filter := 'TELEFONO=' + QuotedStr(DBEdit1.Text);

eso hace que quede así el Filter: TELEFONO = 'NOKIA', que es como indica la ayuda de Delphi.

Este tema se ha tocado bastantes veces en los foros, aunque quizás no sabías por dónde fallaba.

German
26-07-2003, 13:26:06
Tambien puedes incluir las "cuotas" dentro del valor de texto escribiendo dos veces seguidas las comillas simples. Es decir, si dentro de un valor de texto Delphi encuentra dos comillas simples seguidas, intuye que se trata de una comilla simple, y la incluye en el texto:

Table1.Filter := 'TELEFONO= '''+Edit1.Text+'''';

o bien

Table1.Filter := 'TELEFONO= ''NOKIA''';


Ya puestos, tengo que decir que un filtro mediante fechas igualmente debe ir entre comillas simples, por si te quedas parada tambien. ;)

Tambien debo aconsejarte que antes de crear un post, mires si ya hay alguno con el mismo tema, pues existe sin ir mas lejos uno creado solo dos dias antes que el tuyo.

Nota: " (caracter ascii 34) no es lo mismo que '' (dós caracteres ascii 39 seguidos). En ambos ejemplos solo he utilizado comillas simples (caracter ascii 39).

Salu2

kia
28-07-2003, 21:54:58
Teneis toda la razón este tema a sido tratado en otros hilos, pero no conseguia entenderlo. Mi origen y el idioma tiene la culpa.
Gracias a todos me funciono a la pimera.;)

kia
29-07-2003, 12:30:18
Hola de nuevo.
Me quede parada en ...
Como puedo sustituir el campo TELEFONO por un dbedit.text a forma de comodin.

//va ok
table1.Filter:='TELEFONO='''+Edit2.text+'''';
table1.filtered := true;
----------------------------------------
table1.Filter:='dbEdit1.TEXT='''+Edit2.text+'''';
table1.filtered := true;
no ok
no reconoce el campi.

el metodo Quotedstr(....) va de fabula con las fechas...gracias

Salu2. Kia;)

andres1569
29-07-2003, 13:21:46
Hola:

El texto que pones lleva el DBEdit.Text entre comillas, que debería ir fuera para que no coja ese valor como algo literal:

table1.Filter := DBEdit1.Text + '=' + QuotedStr(Edit2.text);
table1.filtered := true;

¿Es eso lo que buscas?

kia
30-07-2003, 17:00:36
Hola
Solo quiria expresar mi agradecimiento a totos los que me han enseñado a no quedarme parada.
Andres me has solucionado la vida.
Me pongo muy contenta cuando funcionan las cosas.
Hasta la vista. Kia ;)

German C. C.
30-07-2003, 20:21:49
Tambien funcionaria con el metodo de comillas simples seguidas:

Table1.Filter := DBEdit1.Text+'='''+Edit2.text+'''';

Salu2.

kia
13-08-2003, 00:49:17
Hola.
Bueno he probado el filtro y va muy bien con string e integer pero...

no me trabaja con fechas. Cuando DBedit.text es una fecha que se introduce con un maskedit.text.
Sobre todo cuando trato que filtre todos los registros con la fecha en blanco.
Como siempre gracias.
Un salu2 Kia ;)

__cadetill
13-08-2003, 10:43:43
En el filtro, pon el formato de fecha mm/dd/yyyy don un FormatDateTime

table1.Filter := DBEdit1.Text + '=' + QuotedStr(FormatDateTime('mm/dd/yyyy', Edit2.Text));

kia
13-08-2003, 18:05:06
Hola:

Ya me parecia que tenia que poner algo asi,

table1.Filter:=RxDBLookupCombo1.Text + '=' + QuotedStr(FormatDateTime('dd/mm/yyyy', edit2.Text));

pero no trabaja me da error imcompatible DateTime y TCaption
¿Cual es el fallo?
Salu2 Kia;)

__cadetill
13-08-2003, 18:41:34
Posteado originalmente por kia
pero no trabaja me da error imcompatible DateTime y TCaption

Cierto, jejeje, un fallo por hacer cortar y pegar

Le falta un StrToDate

table1.Filter:=RxDBLookupCombo1.Text + '=' + QuotedStr(FormatDateTime('dd/mm/yyyy', StrTodate(edit2.Text)));

Aunque para trabajar con fechas, te recomiendo el usu de componentes especiales para fechas como el TDateEdit de las Rx o el TDateTimePicker que biene con el propio Delphi y que tienen propiedades para acceder directamente a un DateTime y ya hacen controles de validadiones de fechas (almenos el de las Rx ;))

kia
14-08-2003, 19:12:13
Bueno debo decir que he aprendido mucho sobre filtros.
Por todo ello Gracias.
El filtro funciona con todos los campos sea Integer,string, o fecha.
Pero una es cabezona y resulta que cuando busco una fecha en blanco me da error ''datos no validos''
Y me hace mucha falta, pues en un stock tengo que averiguar el articulo que no tiene fecha de salida. Es decir en blanco. (el campo fecha no hay nada ni siquiera la mascara.
¿A que equivale una fecha en blanco?...
Una vez mas un salu2 Kia. ;)

__cadetill
14-08-2003, 19:26:55
no lo he probado, pero a lo mejor te vale con un campo_fecha is null o un campo_fecha = ''

A ver si te vale una de las dos ;)

kia
15-08-2003, 20:48:14
Hola.
Nunca crei que hacer un filtro con fechas fuera tan dificil,
por que mira que le doy vueltas.

Efectivamente el valor NULL funciona.. pero.


table1.filter:='FECHA_S='''+NULL+''''; No va bien
o
table1.filter:=FECHA_S+'='+quoted(null); No va bien

En la propiedad filter de table1
'FECHA_S'=NULL si va bien

Creo que null equivale a '' y es del tipo variant.

¿Donde esta el fallo en las dos primeras expresioes..quizas por manejo string y no variant.

Un saludazo de Kia. ;)

__cadetill
15-08-2003, 22:22:10
si lo pones entre comillas es como si lo igualaras a una cadena de caracteres y Delphi entiende que estas buscando una fecha igual a la cadena de caracteres NULL cuando no es asi. Por eso el NULL ha de ir sin comillas. Si te fijas en mi post anterior, no ponia el NULL entrecomillado ;)

kia
16-08-2003, 19:55:48
Hola.
Soy una pesada, lo se. ....pero
No puedo dejar este hilo sin agradecer lo mucho que he aprndido sobre filtros, no me llevo muy bien con el idioma ingles, de niña solo aprendi mi idioma nativo y el español, disculpar mis faltas al escribir.

Mis filtros han quedado asi para el que le pueda interesar y funcionan.

//filtra integer
table1.filter:=RxDBLookupCombo1.Text + '=' + Edit2.text;
//filtra fechas en blanco
table1.Filter :=RxDBLookupCombo1.Text + '=' + 'null';
//filtra fechas
table1.filter:=RxDBLookupCombo1.Text + '=' + QuotedStr (Dateedit1.text);
//filtra string
table1.filter:=RxDBLookupCombo1.Text + '=' + QuotedStr(Edit2.text);

table1.filtered := true;

Las formas de Andres y German tambien funcionan.
el sistema de las comillas me hizo que lo entendiera mejor.
Cadetill muchas gracias por aguantame.
Hasta siempre Kia.
Por cierto yo tambien soy motera.....?
;)

__cadetill
16-08-2003, 20:26:26
Posteado originalmente por kia
Por cierto yo tambien soy motera.....?
;)

Pos na, si eres de por aqui, el dia que quieras nos damos uns vueltas con las burras :D :D