Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   búsquedas en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=9015)

edfz 10-04-2004 16:26:04

búsquedas en dbgrid
 
Hola,
Cómo puedo hacer para que al ir escribiendo en un edit, se vaya buscando la palabra en un dbgrid? Teniendo la grilla ya cargada.
Ej.
Tengo un edit y un dbgrid, si yo quiero buscar la palabra "casa", voy escribiendo "c" y en la grilla me tendría que aparacer los que empiecen con "c". Después escribo la "a", y en la grilla tendría que aparecer los que empiecen con "ca". Luego la "s" y en la grilla "cas" y así...
Espero que me entiendan la explicación
Gracias!

yusnerqui 10-04-2004 17:00:06

Pudieras Probar
 
Hola creo que pudieras probar en el evento on change del edit algo así

Var
Valor,Valor1 : String;
begin
valor := Edit1.text;
Valor1 := Valor;
inc(valor1[length(Valor1)]);
Tabla.Filter := 'Campo >= '+QuotedStr(Valor)+ ' and Campo < ' QuotedStr(valor1);
Tabla.Filtered := True

//Donde campo es el campo por donde vas a filtrar
//Se pone lento en dependencia de la cantidad de registros que tenga la tabla.
end;
mas o menos así
Un saludo

edfz 10-04-2004 17:28:22

porqué lento?
 
tengo una duda. cada vez que se pone el filtro en "true", se consulta en la base de datos?

jirbert 05-07-2008 07:11:57

Cita:

Empezado por yusnerqui (Mensaje 37719)
Hola creo que pudieras probar en el evento on change del edit algo así

Var
Valor,Valor1 : String;
begin
valor := Edit1.text;
Valor1 := Valor;
inc(valor1[length(Valor1)]);
Tabla.Filter := 'Campo >= '+QuotedStr(Valor)+ ' and Campo < ' QuotedStr(valor1);
Tabla.Filtered := True
end;

buenas trabajo en algo parecido pero el codigo que das me ha causado error al momento de ejecutar lo cual me dice

[Error]Unit10.pas(1233): Operator not applicable to this operand type
[Error]Unit10.pas(1233): Incompatible types: 'String' and 'Boolean'


tambien estube trabajando con otro codigo que me encontre en el foro pero a la hora del cambio del edit, el dbgrid se coloca en blanco el codigo lo extraje de aqui

gracias por la ayuda que puedan brindarme...
___________________________________
Utilizo delphi6 y tabla dbaseIV

Fenareth 05-07-2008 13:43:04

Hola,

Yo hago algo exactamente igual a lo que pide edfz de esta manera:

En el evento OnChange del TEdit tengo el siguiente código:

Código Delphi [-]
 if Edit.Text <> '' then //Edit de Búsqueda
       begin
                Tabla.Locate('Campo',Edit.Text,loPartialKey,loCaseInsensitive]);
                DBGrid.Visible := true;
       end
       else
                DBGrid.Visible := false;

y funciona de perlas... ;)

jirbert 05-07-2008 16:56:01

hola Fenareth.. bueno con tu codigo me pide que identifique loPartialKey,loCaseInsensitive..
puede que sea nada pero es que no tengo mucha experiencia en delphi .

gracias...

jandok238 05-07-2008 20:04:42

Cita:

Empezado por Fenareth (Mensaje 298455)
Código Delphi [-]
 if Edit.Text <> '' then //Edit de Búsqueda
        begin
                 Tabla.Locate('Campo',Edit.Text,loPartialKey,loCaseInsensitive]);
                 DBGrid.Visible := true;
        end
        else
                 DBGrid.Visible := false;
y funciona de perlas... ;)

yo tambien lo hago asi ... :p:p;);):D

Cita:

Empezado por jirbert (Mensaje 298478)
hola Fenareth.. bueno con tu codigo me pide que identifique loPartialKey,loCaseInsensitive..
puede que sea nada pero es que no tengo mucha experiencia en delphi .

gracias...

necesitas agregar en la seccion USES la unidad 'DB' .... ;)

salu2!!!!!!!

jirbert 05-07-2008 21:15:23

le agregue en uses 'DB' y ahora el error es:
 
le agregue en uses 'DB' y ahora el error es:

[Error] Unit10.pas(1223):Incompatible types: 'TLocateOptions' and 'TLocateOptions'

Delphius 06-07-2008 00:09:23

Hola,
¿Por casualidad no será de que estás olvidando del corchete de apertura:confused:?:
Código Delphi [-]
Locate('que','donde',[]);

Saludos,

jirbert 06-07-2008 00:27:45

gracias Delphius
 
cierto estaba copìando mal
Código Delphi [-]
 if Edit.Text <> '' then //Edit de Búsqueda   
 begin        
 Tabla.Locate('Campo',Edit.Text,loPartialKey,loCaseInsensitive);       
 DBGrid.Visible := true;      
end        
else                 
DBGrid.Visible := false;

y deberia ser
Código Delphi [-]
 if Edit.Text <> '' then //Edit de Búsqueda        
begin                 
Tabla.Locate('Campo',Edit.Text,[loPartialKey,loCaseInsensitive]);  
DBGrid.Visible := true;        
end        
else                 
DBGrid.Visible := false;

Gracias!!!!

jandok238 06-07-2008 00:35:03

Cita:

Empezado por Delphius (Mensaje 298540)
Hola,
¿Por casualidad no será de que estás olvidando del corchete de apertura:confused:?:
Código Delphi [-]
Locate('que','donde',[]);



Saludos,

eso.. eso.. eso... :D:D:D

la 'culpa' la tiene Fenareth :D:D ella fue la que puso el codigo mal ... :p:p

salu2!!!!!!!

jirbert 06-07-2008 00:55:09

pregunta fuera del tema!!
 
donde puedo conseguir los comandos para darle funcion a diferentes teclas del teclado por ejemplo enter #13 lei por ahi que salian de los codigos ascII pero lo que consegui es la manera de llamarlo en la forma hex amenos que esa sea..

gracias...

Fenareth 07-07-2008 20:58:31

Cita:

Empezado por jandok238 (Mensaje 298545)
eso.. eso.. eso... :D:D

la 'culpa' la tiene Fenareth :D:D ella fue la que puso el codigo mal ... :p:p

salu2!!!!!!!

Es cierto :p :o, pero mis intenciones han sido buenas :D, así lo ayudamos a que aprenda también a depurar errores :rolleyes:... jejeje, es broma, fue un errorcillo de dedo

destrukthor 25-07-2008 09:16:26

Agradecido
 
Holas a todos...
solo un comentario para yusss....

Exelente el codigo de filtro...
Me sirvio mucho para este novato...

Gracias nuevamente...

irixita 23-08-2008 06:43:16

Probando la busqueda de yusnerqui
 
Cita:

Empezado por yusnerqui (Mensaje 37719)
Hola creo que pudieras probar en el evento on change del edit algo así

Var
Valor,Valor1 : String;
begin
valor := Edit1.text;
Valor1 := Valor;
inc(valor1[length(Valor1)]);
Tabla.Filter := 'Campo >= '+QuotedStr(Valor)+ ' and Campo < ' QuotedStr(valor1);
Tabla.Filtered := True

//Donde campo es el campo por donde vas a filtrar
//Se pone lento en dependencia de la cantidad de registros que tenga la tabla.
end;
mas o menos así
Un saludo

Hola a todos....

Probando este codigo me da un error en ejecucion, el tema es que cuando borro el ultimo caracter me aparece el siguiente:

Proyect Yuhmak.exe raised eception class EAccessViolation with message 'Access violation at address 004CC87E in module 'Yuhmak.exe'. Write of address FFFFFFFF'. Process stopped. Use Step or Run to continue.

¿Que es eso? y ¿Como se soluciona?

Desde ya muchas gracias... y espero puedan ayudarme

Fenareth 23-08-2008 17:24:43

Hola irixita ! :)

Porqué no pruebas el otro código aquí expuesto ?
Código Delphi [-]
if Edit.Text <> '' then //Edit de Búsqueda        
begin                 
   Tabla.Locate('Campo',Edit.Text,[loPartialKey,loCaseInsensitive]);  
   DBGrid.Visible := true;        
end        
else                 
  DBGrid.Visible := false;

Saluditos

irixita 23-08-2008 17:55:29

Hola Fenareth
 
Buenas Fenareth.... si lo probe... mi pregunta ahora... donde lo pongo... en el boton de busqueda o en el evento onChage del edit?

Si lo probe... pero se me hace que lo estoy poniendo en un lugar distinto.:rolleyes:

Por eso lo probe con otro que habia ahi.... espero que me hayas comprendido...:) esperare respuesta...

Fenareth 23-08-2008 17:57:54

En el evento OnChange del TEdit... ;)

jirbert 23-08-2008 17:59:15

hola irixita

Código Delphi [-]
if Edit.Text <> '' then //Edit de Búsqueda        
begin                 
   Tabla.Locate('Campo',Edit.Text,[loPartialKey,loCaseInsensitive]);  
   DBGrid.Visible := true;        
end        
else                 
  DBGrid.Visible := false;

en rojo colocas el edit donde vas hacer la busqueda!!
en azul la tabla donde se encuetra ubicada

y lo colocas en el on change del edit!
espero poder ayudarte!

jandok238 23-08-2008 18:08:55

Cita:

Empezado por Fenareth (Mensaje 308986)
Hola irixita ! :)

Porqué no pruebas el otro código aquí expuesto ?
Código Delphi [-]
if Edit.Text <> '' then //Edit de Búsqueda
begin
     Tabla.Locate('Campo',Edit.Text,[loPartialKey,loCaseInsensitive]);
     DBGrid.Visible := true;
end
else
     DBGrid.Visible := false;


Saluditos

Ahora si pusiste bien el codigo... :D:D:D no se te pasaron los CORCHETES ... :D:D ;);):D

salu2!!!!!!!


La franja horaria es GMT +2. Ahora son las 23:23:37.

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