Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2004
edfz edfz is offline
Miembro
 
Registrado: feb 2004
Posts: 17
Poder: 0
edfz Va por buen camino
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!
Responder Con Cita
  #2  
Antiguo 10-04-2004
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
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
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo


Última edición por yusnerqui fecha: 10-04-2004 a las 17:13:38. Razón: QuotedStr
Responder Con Cita
  #3  
Antiguo 10-04-2004
edfz edfz is offline
Miembro
 
Registrado: feb 2004
Posts: 17
Poder: 0
edfz Va por buen camino
porqué lento?

tengo una duda. cada vez que se pone el filtro en "true", se consulta en la base de datos?
Responder Con Cita
  #4  
Antiguo 05-07-2008
Avatar de jirbert
jirbert jirbert is offline
Miembro
 
Registrado: nov 2007
Ubicación: Valencia-Venezuela
Posts: 60
Poder: 17
jirbert Va por buen camino
Cita:
Empezado por yusnerqui Ver Mensaje
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
Responder Con Cita
  #5  
Antiguo 05-07-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
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...
Responder Con Cita
  #6  
Antiguo 05-07-2008
Avatar de jirbert
jirbert jirbert is offline
Miembro
 
Registrado: nov 2007
Ubicación: Valencia-Venezuela
Posts: 60
Poder: 17
jirbert Va por buen camino
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...
Responder Con Cita
  #7  
Antiguo 05-07-2008
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Cita:
Empezado por Fenareth Ver Mensaje
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 ...

Cita:
Empezado por jirbert Ver Mensaje
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!!!!!!!
Responder Con Cita
  #8  
Antiguo 23-08-2008
Avatar de irixita
irixita irixita is offline
Miembro
 
Registrado: ago 2008
Ubicación: Argentina- Tucumán =D
Posts: 13
Poder: 0
irixita Va por buen camino
Cool Probando la busqueda de yusnerqui

Cita:
Empezado por yusnerqui Ver Mensaje
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
Responder Con Cita
  #9  
Antiguo 23-08-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
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
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #10  
Antiguo 23-08-2008
Avatar de irixita
irixita irixita is offline
Miembro
 
Registrado: ago 2008
Ubicación: Argentina- Tucumán =D
Posts: 13
Poder: 0
irixita Va por buen camino
Talking 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.

Por eso lo probe con otro que habia ahi.... espero que me hayas comprendido... esperare respuesta...
Responder Con Cita
  #11  
Antiguo 23-08-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
En el evento OnChange del TEdit...
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #12  
Antiguo 23-08-2008
Avatar de jirbert
jirbert jirbert is offline
Miembro
 
Registrado: nov 2007
Ubicación: Valencia-Venezuela
Posts: 60
Poder: 17
jirbert Va por buen camino
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!
__________________
Uso Delphi 6 y Tablas dBase IV...
Responder Con Cita
  #13  
Antiguo 23-08-2008
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Cita:
Empezado por Fenareth Ver Mensaje
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... no se te pasaron los CORCHETES ...

salu2!!!!!!!
Responder Con Cita
  #14  
Antiguo 23-08-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Cita:
Empezado por jandok238 Ver Mensaje
Ahora si pusiste bien el codigo... no se te pasaron los CORCHETES ...

salu2!!!!!!!
Jajajaja, si, de hecho lo tomé de la última corrección que se hizo
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference
Responder Con Cita
  #15  
Antiguo 23-08-2008
Avatar de irixita
irixita irixita is offline
Miembro
 
Registrado: ago 2008
Ubicación: Argentina- Tucumán =D
Posts: 13
Poder: 0
irixita Va por buen camino
Talking

Hola el codigo me quedo algo asi:
hice una mezcla de los codigos que vi

Código Delphi [-]
procedure TFBusVend.txtCodigoChange(Sender: TObject);
Var
Valor,Valor1 : String;
begin
    if (txtCodigo.text <> '') then
         begin
            modulo1.UModulo.TablaVendedor.Locate('idVendedor', txtCodigo.Text,[loPartialKey,loCaseInsensitive]);
            GrillaBusVend.Visible := true;
            Valor := txtCodigo.text;
            Valor1 := Valor;
            inc(Valor1[length(Valor1)]);
            modulo1.UModulo.TablaVendedor.Filter := 'idVendedor >= '+QuotedStr(Valor)+ ' and idVendedor < ' +QuotedStr(Valor1);
            modulo1.UModulo.TablaVendedor.Filtered := True;
         end
     else
         begin
            GrillaBusVend.Visible := false;
         end

end;

eso fue lo que hice y funciona lo que quiero, salvo por una cosita, cdo borro todo se desaparece la tabla, eso es porq del lado del else dice GrillaBusVend.Visible := false; lo que no se es como volver a mostrar todos los registros de vuelta. debe ser facil, pero estuve anoche hasta las 3 am buscando la manera .

Va mejorando!!! jeje

Saluditos!!
Responder Con Cita
  #16  
Antiguo 23-08-2008
Avatar de jirbert
jirbert jirbert is offline
Miembro
 
Registrado: nov 2007
Ubicación: Valencia-Venezuela
Posts: 60
Poder: 17
jirbert Va por buen camino
hola irixita hice la prueba con tu codigo yme funciona a la perfecion!! no me genero ningun problema!

solo un inconveniente y es por mi culpa que la busqueda me la hace segun lo escrito es decir reconoce MAYUSCULA y minuscula tengo que escribir tal cual como esta en la tabla! alguien me podria ayudar a como hacer que sea indiferente entre mayuscula o minuscula lo que importa es la letra que entre!!

gracias!!!!
__________________
Uso Delphi 6 y Tablas dBase IV...
Responder Con Cita
  #17  
Antiguo 23-08-2008
Avatar de irixita
irixita irixita is offline
Miembro
 
Registrado: ago 2008
Ubicación: Argentina- Tucumán =D
Posts: 13
Poder: 0
irixita Va por buen camino
Thumbs up

Cita:
Empezado por jirbert Ver Mensaje
hola irixita hice la prueba con tu codigo yme funciona a la perfecion!! no me genero ningun problema!

solo un inconveniente y es por mi culpa que la busqueda me la hace segun lo escrito es decir reconoce MAYUSCULA y minuscula tengo que escribir tal cual como esta en la tabla! alguien me podria ayudar a como hacer que sea indiferente entre mayuscula o minuscula lo que importa es la letra que entre!!

gracias!!!!
Me alegro que te haya funcionado.
para tu problema tenes que poner en el evento onKeyPress del edit la siguiente linea.

Código Delphi [-]
if not (key in ['a'..'z', 'A'..'Z', 'ñ','Ñ',#8,' ']) then key := #0;

Ahora cdo borras todo te aparece la lista completa?

o como te aparece?

Al fin ayudo a alguien!!! jeje sos al primero que le saco una duda

Saludetes!!!
Responder Con Cita
  #18  
Antiguo 23-08-2008
Avatar de irixita
irixita irixita is offline
Miembro
 
Registrado: ago 2008
Ubicación: Argentina- Tucumán =D
Posts: 13
Poder: 0
irixita Va por buen camino
Lightbulb

A me habia olvidado. si es para numeros la linea seria:

Código Delphi [-]
if not(key in ['0'..'9',#8])then key := #0;

Espero que te sirva a vos y al que lo necesite!!...

Responder Con Cita
  #19  
Antiguo 24-08-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Cita:
Empezado por irixita Ver Mensaje
Hola el codigo me quedo algo asi:
hice una mezcla de los codigos que vi

Código Delphi [-]procedure TFBusVend.txtCodigoChange(Sender: TObject); Var Valor,Valor1 : String; begin if (txtCodigo.text <> '') then begin modulo1.UModulo.TablaVendedor.Locate('idVendedor', txtCodigo.Text,[loPartialKey,loCaseInsensitive]); GrillaBusVend.Visible := true; Valor := txtCodigo.text; Valor1 := Valor; inc(Valor1[length(Valor1)]); modulo1.UModulo.TablaVendedor.Filter := 'idVendedor >= '+QuotedStr(Valor)+ ' and idVendedor < ' +QuotedStr(Valor1); modulo1.UModulo.TablaVendedor.Filtered := True; end else begin GrillaBusVend.Visible := false; end end;


eso fue lo que hice y funciona lo que quiero, salvo por una cosita, cdo borro todo se desaparece la tabla, eso es porq del lado del else dice GrillaBusVend.Visible := false; lo que no se es como volver a mostrar todos los registros de vuelta. debe ser facil, pero estuve anoche hasta las 3 am buscando la manera .

Va mejorando!!! jeje

Saluditos!!
Intenta poniendo la propiedad Filtered en False, en vez de desaparecer el TDBGrid...
__________________
Ask questions. Think for yourself. Wake up and you’ll make the difference

Última edición por Fenareth fecha: 24-08-2008 a las 06:11:37.
Responder Con Cita
  #20  
Antiguo 30-08-2008
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola a todos, aqui la correccion a mi codigo, espero que ni sea demaciado tarde
Solo cheqear que el edit no este vacio, pues entonces las operaciones de sumas de caracteres serian inconsistentes
Código Delphi [-]
Var
Valor,Valor1 : String;
begin
if Edit1.text = '' then exit
valor := Edit1.text;
Valor1 := Valor;
inc(valor1[length(Valor1)]);
Tabla.Filter := 'Campo >= '+QuotedStr(Valor)+ ' and Campo < ' QuotedStr(valor1);
Tabla.Filtered := True

Con esto debe hacer precisamente lo que buscabas irixita y tanbien lo que buscaba quien origino este hilo

Cita:
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
Esperando haber ayudado y pidiendo disculpa por la tardanza les saluda

Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

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:53:32.


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