Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
Question Como filtro una tabla?

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
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #2  
Antiguo 26-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 26-07-2003
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 21
German Va por buen camino
Lightbulb

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

Última edición por German fecha: 26-07-2003 a las 14:06:57.
Responder Con Cita
  #4  
Antiguo 28-07-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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.
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #5  
Antiguo 29-07-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #6  
Antiguo 29-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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?
__________________
Guía de Estilo
Responder Con Cita
  #7  
Antiguo 30-07-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #8  
Antiguo 30-07-2003
German C. C. German C. C. is offline
Miembro
 
Registrado: jul 2003
Posts: 11
Poder: 0
German C. C. Va por buen camino
Tambien funcionaria con el metodo de comillas simples seguidas:

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

Salu2.
Responder Con Cita
  #9  
Antiguo 13-08-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #10  
Antiguo 13-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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));
Responder Con Cita
  #11  
Antiguo 13-08-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #12  
Antiguo 13-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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 )
Responder Con Cita
  #13  
Antiguo 14-08-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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.
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #14  
Antiguo 14-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Responder Con Cita
  #15  
Antiguo 15-08-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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.
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #16  
Antiguo 15-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Responder Con Cita
  #17  
Antiguo 16-08-2003
kia kia is offline
Miembro
 
Registrado: jul 2003
Posts: 78
Poder: 21
kia Va por buen camino
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.....?
__________________
Nadie nace enseñado, pide y se te dara.
Responder Con Cita
  #18  
Antiguo 16-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:34:55.


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
Copyright 1996-2007 Club Delphi