Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda segun radiobutton seleccionado (https://www.clubdelphi.com/foros/showthread.php?t=17894)

JoanKa 25-01-2005 12:25:24

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.

pacogarcia 25-01-2005 12:36:34

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.

Gydba 25-01-2005 12:45:17

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!

JoanKa 25-01-2005 13:00:36

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.

JoanKa 25-01-2005 13:12:48

Coloque lo
consulta:='SELECT * FROM T_CLIENTES WHERE'+ ' ' + nombre + 'LIKE '% texto %''';

JoanKa 25-01-2005 13:14:23

coloque lo que dijistes ...
consulta:='SELECT * FROM T_CLIENTES WHERE'+ ' ' + nombre + 'LIKE '% texto %''';

pero no me lo compila..

Gracias

Ohcan 25-01-2005 13:29:45

Prueba con

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

Saludos

JoanKa 25-01-2005 17:00:50

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

Ohcan 25-01-2005 17:16:36

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 ;)

JoanKa 25-01-2005 17:40:03

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

Ohcan 25-01-2005 18:18:55

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... :)

JoanKa 25-01-2005 18:31:48

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


La franja horaria es GMT +2. Ahora son las 19:49:58.

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