Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
Busqueda segun radiobutton seleccionado

Hola a todos.
Tengo un formulario que tiene 3 TRadio_Buttom (codigo, nombre y direccion) y un TextBox donde coloco la palabra a abuscar y ademas un DB grid donde visualizo el contenido del text box.

Lo que deseo es que conforme valla ingresando los caracteres me valla seleccionado a tal punto que encuentre el texto ingresado en el textbox.


procedure TFrm_Busq_Clie.txt_buscarChange(Sender: TObject);
var consulta : String;
nombre: String;
texto:String;
x:integer;
begin

if rb_codigo.Checked=True Then
begin
nombre:=DM_General.TClientes.Fields[0].FieldName;
texto:=txt_buscar.Text;
end
else if rb_nombres.Checked=True Then nombre:= DM_General.TClientes.Fields[1].FieldName
else if rb_comercial.Checked=True Then nombre:=DM_General.TClientes.Fields[2].FieldName
else if rb_direccion.Checked=True Then nombre:=DM_General.TClientes.Fields[3].FieldName;

QUERY1.Active := False;
consulta := 'SELECT * FROM T_Clientes WHERE '+ ' '+ nombre + ' LIKE ''';
consulta := consulta + '%';
consulta := consulta + texto;
consulta := consulta + '%';
consulta:=consulta + '''';
consulta:=consulta + ' ORDER BY '+' '+nombre+'';
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Active := TRUE;
QUERY1.Open;
end;

He colocado esta rutina pero no me selecciona segun el caracter que ingreso y por ejemplo coloco la letra C y me displaya todos los registros de la Tabla en el DBGRID y despues coloco en el text CA me sigue saliendo todos los registros, y no me elimina los otros que no corresponden a la cadena ingresada (CA)

Cual seria el error.

Gracias y saludos.
Responder Con Cita
  #2  
Antiguo 25-01-2005
pacogarcia pacogarcia is offline
Registrado
 
Registrado: nov 2004
Posts: 5
Poder: 0
pacogarcia Va por buen camino
Hola,

Tal como construyes la consulta cuando pulses 'C' te saldran todos aquellos que incluyan 'C'.

Para poder seleccionar aquellos que empiezen por 'C' seria lo mismo pero omitiendo el primer '%':

QUERY1.Active := False;
consulta := 'SELECT * FROM T_Clientes WHERE '+ ' '+ nombre + ' LIKE ''';
consulta := consulta + '%'; /// Este sobra.
consulta := consulta + texto;
consulta := consulta + '%';
consulta:=consulta + '''';
consulta:=consulta + ' ORDER BY '+' '+nombre+'';
QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Active := TRUE;
QUERY1.Open;
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 25-01-2005
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
Hola,

Como dato interesante con las etiquetas del club tu código puede llegar a quedar espectacular, participar de importante premios e incluso hacerle la vida más fácil al que lo lee.

Respondiendo. A mi entender falla acá:
Código Delphi [-]
...
consulta := 'SELECT * FROM T_Clientes WHERE '+ ' '+ nombre + ' LIKE ''';
consulta := consulta + '%';
consulta := consulta + texto;
consulta := consulta + '%';
...
Porque quedaría algo como:
Código SQL [-]
SELECT* FROM T_CLIENTES WHERE CAMPO LIKE '%FILTRO%'
Y eso te traería todos los registros que tengan en cualquier parte la palabra 'FILTRO'. En otras palabras: si querés que te busque todos los registros que empiezan por determinado caracter tendrías que eliminar el primer '%'.

También podrías investigar como hace la propiedad FILTER de algunos DataSets.

Saludos!
__________________
Suerte
.: Gydba :.
Responder Con Cita
  #4  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
he puesto lo que tu me has dicho pero no consigo lo que les comente en mi primer mensaje.

Gracias haber si me das una manito.
Responder Con Cita
  #5  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
Coloque lo
consulta:='SELECT * FROM T_CLIENTES WHERE'+ ' ' + nombre + 'LIKE '% texto %''';
Responder Con Cita
  #6  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
coloque lo que dijistes ...
consulta:='SELECT * FROM T_CLIENTES WHERE'+ ' ' + nombre + 'LIKE '% texto %''';

pero no me lo compila..

Gracias
Responder Con Cita
  #7  
Antiguo 25-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Prueba con

Código Delphi [-]
filtro := '%texto%';
consulta := 'SELECT * FROM MiTabla WHERE MiCampo LIKE ' + QuotedStr(filtro);

Saludos
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #8  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
Bueno este era lo que yo deseaba: posteo una rutina para ver los registros segun un filtro o el caracter ingresado
procedure TFrm_Busq_Clie.txt_buscarChange(Sender: TObject);

var consulta : String;
nombre: String;
texto:String;
filtro:String;
begin

if rb_nombres.Checked=True Then
begin
texto:=txt_buscar.Text;
QUERY1.Active := False;

filtro:='%'+texto+'%';

consulta := 'SELECT * FROM T_CLIENTES WHERE nom_nor LIKE ' + QuotedStr(filtro);

QUERY1.SQL.Clear;
QUERY1.SQL.ADD(consulta);
QUERY1.Open
end;


end;

Pero ahora tengo el problema siguiente tengo un cliente que esta registrado en la Tabla cuyo nombre es Llobet pero cuando escribo ll (doble l) no me sale pero cuando digito en el text si obtengo el registro, en otras palabras no me reconoce las mayusculas en la base de datos con las minusculas de lo ingresado.

Habra una funcion.....
Gracias
Responder Con Cita
  #9  
Antiguo 25-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Bueno...
Haz la comparacion con todo en mayúsculas...

Código Delphi [-]
filtro := '%texto%';
consulta := 'SELECT * FROM MiTabla WHERE UPPER(MiCampo) LIKE ' + QuotedStr(UpperCase(filtro));

Esto en válido al menos en Oracle... ya me dirás
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #10  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
Te pongo un Ejemplo a ver si me entiendes mejor.
En la tabla cliente tengo los siguientes nombres

1 Pedro Pedro Ascoy
2 Carlos Rico Asto
3 Ximena Casos Neyra

consulta := 'SELECT * FROM T_CLIENTES WHERE nom_nor LIKE ' + QuotedStr(filtro);

Ahora en el text box escribo : as (en minusculas) solo me muestra el tercer registro

Pero con
consulta := 'SELECT * FROM T_CLIENTES WHERE nom_nor LIKE ' + QuotedStr(UpperCase(filtro));

Escribo en el textbox la letra 'a' y obtengo solo los registros 1 y 2 pero luego cuando escribo acontrinuacion de la letra 'a' la letra 's', es decir 'as' (el cual me debe seguir mostrando los dos registros anteriores , ya cuando escriba el tercero alli es cuando me va a diferenciar) y el dbgrid no me muestra nada(dbgrid en blanco).

Que debo hacer ...... O antes de hacer la consulta convierto todos los registros del campo nombre a mayusculas... si es asi como se haria eso.


Gracias
Responder Con Cita
  #11  
Antiguo 25-01-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Thumbs up

Efectivamente, como tú mismo dices:
"...... O antes de hacer la consulta convierto todos los registros del campo nombre a mayusculas... "
En el post anterior ya te lo pongo, pero con la etiqueta DELPHI quizás no se ve bien...

consulta :=
'SELECT * FROM MiTabla WHERE ' +
'UPPER(MiCampo) LIKE ' +
QuotedStr(UpperCase(filtro));

A mi me funciona bien en Oracle...
Ya nos contarás...
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #12  
Antiguo 25-01-2005
JoanKa JoanKa is offline
Miembro
 
Registrado: ene 2005
Posts: 92
Poder: 20
JoanKa Va por buen camino
Gracias amigo eso era exactamente lo que deseaba, lo que pasa que deje de programar, y ahora despues de 4 años lo estoy retomando, antes usaba VB.

Gracias y Salu2
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 21:18:56.


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