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)

irixita 23-08-2008 18:14:02

ok ya lo hice ahora hay un pequeño inconveniente... al ingresar el codigo del vendedor, no se filtra la lista mostrando solo los registros, es decir que solo apunta al registro, me explico?

gracias por ayudarme realmente les agradezco a todos por esto...:)

Fenareth 23-08-2008 18:17:47

Cita:

Empezado por jandok238 (Mensaje 309000)
Ahora si pusiste bien el codigo... :D:D:D no se te pasaron los CORCHETES ...

salu2!!!!!!!

Jajajaja, si, de hecho lo tomé de la última corrección que se hizo :o :p :D

Fenareth 23-08-2008 18:21:14

Cita:

Empezado por edfz (Mensaje 37716)
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!

Cita:

Empezado por irixita (Mensaje 309001)
ok ya lo hice ahora hay un pequeño inconveniente... al ingresar el codigo del vendedor, no se filtra la lista mostrando solo los registros, es decir que solo apunta al registro, me explico?

gracias por ayudarme realmente les agradezco a todos por esto...:)

Pues si, en este hilo se respondía a la búsqueda tal y como la hace este código... creo que la búsqueda que necesitas la estábamos tratando en otro hilo o no ??? :confused:... Y creí haber leído que las sugerencias que te dimos en aquél te habían servido... :confused:

jandok238 23-08-2008 18:21:18

Cita:

Empezado por irixita (Mensaje 309001)
ok ya lo hice ahora hay un pequeño inconveniente... al ingresar el codigo del vendedor, no se filtra la lista mostrando solo los registros, es decir que solo apunta al registro, me explico?

gracias por ayudarme realmente les agradezco a todos por esto...:)

En efecto... asi trabaja el codigo que aqui se mostro... Solo te posiciona en el REGISTRO que coincide con lo que se teclee en el EDIT. ;);)

para VER solo aquellos registros que coincidan, se puede hacer uso de la propiedad FILTER del componente TTable que estes ocupando ;);)

salu2!!!!!!!

irixita 23-08-2008 19:25:12

Cita:

Empezado por Fenareth (Mensaje 309003)
Pues si, en este hilo se respondía a la búsqueda tal y como la hace este código... creo que la búsqueda que necesitas la estábamos tratando en otro hilo o no ??? :confused:... Y creí haber leído que las sugerencias que te dimos en aquél te habían servido... :confused:

Si tenes razon yo tengo el codigo que dijiste en el otro hilo... lo que pasa es que estuve probando donde encajar ese codigo
Código:

modulo1.UModulo.TablaVendedor.Filtered := false;
modulo1.UModulo.TablaVendedor.Filter:='idVendedor =' +QuotedStr(txtCodigo.Text);
modulo1.UModulo.TablaVendedor.Filtered := true;

Pero no me funciona el filtro como deseo....

me explico?... de todos modos voy a intentar buscar la forma de hacerlo, si lo consigo, lo subo ;)

SALUDOS!!!

jandok238 23-08-2008 19:37:05

Cita:

Empezado por irixita (Mensaje 309012)
Si tenes razon yo tengo el codigo que dijiste en el otro hilo... lo que pasa es que estuve probando donde encajar ese codigo
Código:

modulo1.UModulo.TablaVendedor.Filtered := false;
modulo1.UModulo.TablaVendedor.Filter:='idVendedor =' +QuotedStr(txtCodigo.Text);
modulo1.UModulo.TablaVendedor.Filtered := true;

Pero no me funciona el filtro como deseo....

me explico?... de todos modos voy a intentar buscar la forma de hacerlo, si lo consigo, lo subo ;)

SALUDOS!!!

pues... por el nombre del campo 'idVendedor' ... creo que es NUMERICO ... ( indicalo por favor ) ... si es asi... entonces no es necesario poner entre comillas lo que tenga el EDIT ....

No seria necesario QuotedStr() ....

....

pero si ya esta tratado esto en otro hilo ... lo mejor seria que estos problemas/detalles los comentaras allá ....

salu2!!!!!!! ;);)

irixita 23-08-2008 19:43:33

jandok238

Ok voy a buscar el hilo de nuevo...=S ya me olvide como era el titulo :p jeje soy muy nueva en esto y bueno de a poco me ire acostumbrando a este tema.

Nunca me maneje en un foro... y la verdad este me ayuda bastante. no se imaginan todas mis dudas que tengo...:p:p jeje el idVendedor es un codigo de 5 dijitos en los cuales el primero es una letra (la primera del apellido de tal vendedor)...

Gracias chicos!

SALUDOS!!

P/D: Ya lei la guia de estilo. :cool:

jandok238 23-08-2008 20:02:30

bueno... siendo que es un campo de tipo cadena...

el procedimiento que se tiene, nunca te va a dar los resultados como quieres....

Entiendo que quieres que te muestre los Vendedores que coincidan con lo que vayas escribiendo... de tal modo que si vas escribiendo E, solo se vean los que comiencen con la letra E ... y si despues tecleas 5 , se muestren los vendedores que empiecen con E5 .... etc... etc...

El problema radica en que en el FILTER se tiene un = ... entonces...por cada vez que entra al evento... la evaluacion seria idVendedor="E" ... luego idVendedor="E5" .. etc ... etc...

la idea es meter algo como un LIKE de SQL ... pero eso si no se como :o:o

Yo lo que hago es... poner el codigo (antes mencionado) con la funcion LOCATE ... pero ordeno la tabla deacuerdo al campo (idVendedor)... asi me muestra juntos los registros parecidos... ;);):D:D

no se si esto te sirva......

salu2!!!!!!!

irixita 23-08-2008 20:29:10

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

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

Va mejorando!!!:D jeje

Saluditos!!

jirbert 23-08-2008 20:47:36

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!!!!

irixita 23-08-2008 21:01:46

Cita:

Empezado por jirbert (Mensaje 309026)
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!!! :p jeje sos al primero que le saco una duda :D

Saludetes!!!

irixita 23-08-2008 21:07:45

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!!...

;):)

Fenareth 24-08-2008 05:30:44

Cita:

Empezado por irixita (Mensaje 309023)
Hola el codigo me quedo algo asi:
hice una mezcla de los codigos que vi :p

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

Va mejorando!!!:D jeje

Saluditos!!

Intenta poniendo la propiedad Filtered en False, en vez de desaparecer el TDBGrid... :)

yusnerqui 30-08-2008 15:05:58

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

jirbert 31-08-2008 07:37:53

buenas noches como andan haciendo unas correciones a lo planteado por yusnerqui modifique el codigo a mi conveniencia haciendo los que buscaba irixita al igual que mi persona en un principio, haciendo la busqueda letra por letra y reflejandolo, pero le anexe que mientras el edit de busqueda este en blanco muestre todos los registros. aqui se los dejo a mi me funciono de maravilla!! ahora ando buscando como hacer que la busqueda sea indiferente a lo que ingrese es decir asi yo pise 'x' bien sea mayuscula o minuscula me registre todo lo que comience por dicha 'x'...
Código Delphi [-]
Var
Valor,Valor1 : String;
begin
     if Edit1.text = '' then
     begin
     Tabla.Filtered := false;
     exit;
     end;
         Tabla.Locate('campo', edit1.Text,[loPartialKey,loCaseInsensitive]);
         valor := Edit1.text;
         Valor1 := Valor;
         inc(valor1[length(Valor1)]);
         Tabla.Filter := 'campo >= '+QuotedStr(Valor)+ ' and campo < ' +QuotedStr(valor1);
         Tabla.Filtered := true;
          end;

sin mas nada que agregar saludos!!

yusnerqui 01-09-2008 14:03:27

Hola
Bueno en primer lugar no le veo sentido a esta línea:
Código Delphi [-]
  Tabla.Locate('campo', edit1.Text,[loPartialKey,loCaseInsensitive]);
estás haciendo una búsqueda y después un filtrado, es como trabajar dos veces :), por otra parte, he probado el código y he comprobado que efectivamete es insencible a mayusculas y minúscula, es decir que es justo lo que buscas :)

jirbert 01-09-2008 14:51:11

Bueno yusnerqui ami me funciona al pelo lo unico es que toma en cuenta las mayusculas y las minusculas, noc xq ati te da el resultado que yo busco:confused: bueno yo tengo lo siguiente:

1. un edit para hacer la busqueda, al momento de ingresar palabras el verifica si estan guardadas en la tabla.
2. un panel que en si contiene un dbgrid que es donde me refleja la busqueday utiliso el panel, xq contiene otra serie de opciones como modificar o añadir nuevo!

yusnerqui 01-09-2008 19:32:01

que base de datos usas?

jirbert 12-09-2008 01:23:11

hola! Uso Delphi 6 y Tablas dBase IV...

Neftali [Germán.Estévez] 12-09-2008 09:09:42

Cita:

Empezado por edfz (Mensaje 37716)
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.

En mi página web, en la sección de ejemplos, tienes uno titulado:
"Realizar búsqueda incremental y visualizarla sobre un DBGrid"

Creo que te puede servir, si no exactamente, al menos de Guía. Está con el código fuente, así que puedes descargarlo y mirartelo.


La franja horaria es GMT +2. Ahora son las 05:27:31.

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