Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda en un DBgrid (https://www.clubdelphi.com/foros/showthread.php?t=81624)

feliz-58 30-11-2012 21:28:17

Busqueda en un DBgrid
 
Hola de nuevo, en primer lugar gracias por responder a mis preguntas, se que pregunto mucho pero me gusta aprender todo lo que puedo XD jajaja pero gracias por todo...

La siguiente pregunta es: Tengo un DBgrid conectado a una base de datos en Access,con una tabla llamada Entrada, un boton y un edit, actualmente tengo el siguiente codigo en el Boton:
Código Delphi [-]
procedure Tregistro.BitBtn8Click(Sender: TObject);
begin
ADOTable1.Locate ('Nombre', edit1.text,[loCaseInsensitive]);
edit1.Clear;
end;
end;

como se dan cuenta es para localizar dentro del DBgrid un registro, pero esto solo funciona si se inserta el nombre exacto de la persona ejemplo:

si en el campo "Nombre" del Dbgrid hay un registro llamado Juan Perez
Si escribo en el edit : Juan Perez y doy clic en el boton, automaticamente lo locatiza, Pero si escribo Juan, no lo hace, no hay una forma de que tambien localice todos los nombres que comienzan con Juan?

ecfisa 30-11-2012 21:52:33

Cita:

Empezado por feliz-58 (Mensaje 451010)
... Pero si escribo Juan, no lo hace, no hay una forma de que tambien localice todos los nombres que comienzan con Juan?

Hola.

Podes hacer:
Código Delphi [-]
procedure Tregistro.BitBtn8Click(Sender: TObject);
begin
  with ADOTable1 do
  begin
    Filtered:= False;
    Filter  := 'NAME LIKE ' + QuotedStr(Edit1.Text + '%');
    Filtered:= True;
  end;
end;

Saludos.

nlsgarcia 30-11-2012 22:06:08

feliz-58,

Revisa esta información:
Cita:

Empezado por Borland Delphi 6 Developer's Guide:

"function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean;

The first parameter, KeyFields, contains the name of the field(s) on which you want to search.
The second parameter, KeyValues, holds the field value(s) you want to locate. The third and
last parameter, Options, allows you to customize the type of search you want to perform. This
parameter is of type TLocateOptions, which is a set type defined in the DB unit as follows:

type
TLocateOption = (loCaseInsensitive, loPartialKey);
TLocateOptions = set of TLocateOption;

If the set includes the loCaseInsensitive member, a not case sensitive search of the data will
be performed. If the set includes the loPartialKey member, the values contained in KeyValues
will match even if they’re substrings of the field value.
"

En resumen:
Código Delphi [-]
ADOTable1.Locate ('Nombre', edit1.text,[loCaseInsensitive,loPartialKey]);
El código anterior hará búsquedas en el DataSet sin distinción entre minúsculas y mayúsculas y con valores parciales.

Espero sea útil :)

Nelson.

feliz-58 30-11-2012 22:09:20

Cita:

Empezado por ecfisa (Mensaje 451012)
Hola.

Podes hacer:
Código Delphi [-]
procedure Tregistro.BitBtn8Click(Sender: TObject);
begin
  with ADOTable1 do
  begin
    Filtered:= False;
    Filter  := 'NAME LIKE ' + QuotedStr(Edit1.Text + '%');
    Filtered:= True;
  end;
end;

Saludos.


Me sale un error, me dice "Project Project1.exe raised Class EOleExection With message ´No se encontro el elemento en la coleccion que corresponde al nombre o el ordinal solicitado´. Process Stopped.

ecfisa 30-11-2012 22:39:39

Hola feliz-58.

La costumbre de copiar y pegar... :rolleyes:

Te hice un ejemplo al vuelo, creo que en tu caso (al menos así parece en tu primer mensaje) el campo se llama Nombre no NAME como usé en mi código.

Reemplazá NAME por el nombre de tu campo y verás que funciona correctamente.

Saludos. :)

feliz-58 30-11-2012 22:58:48

Cita:

Empezado por ecfisa (Mensaje 451021)
Hola feliz-58.

La costumbre de copiar y pegar... :rolleyes:

Te hice un ejemplo al vuelo, creo que en tu caso (al menos así parece en tu primer mensaje) el campo se llama Nombre no NAME como usé en mi código.

Reemplazá NAME por el nombre de tu campo y verás que funciona correctamente.

Saludos. :)

si, que mala costumbre la de Copy and Paste por eso no funcionaba jajajaja, gracias,

Aunque recuerda que mi ejemplo es con Locate y me diste uno Con filter


Muchisimas Gracias

//Saludos :)

feliz-58 30-11-2012 23:07:14

Para otros usuarios
 
Si otro usuario quiere Utilizar el Codigo:
Código Delphi [-]
begin
  with ADOTable1 do
  begin
    Filtered := False;
    Filter := 'Nombre LIKE ' + QuotedStr(Edit1.Text + '%');
    Filtered := True;
    if adotable1.RecordCount = 0 then
    begin
    Showmessage ('Usuario No Encontrado');
  end;
end;
end;

Aqui si no encuentra el usuario te muestra un Mensaje

ecfisa 01-12-2012 00:04:04

Cita:

Empezado por feliz-58 (Mensaje 451023)
Aunque recuerda que mi ejemplo es con Locate y me diste uno Con filter

Hola feliz-58.

Es que no es posible lograr lo que pediste:
Cita:

... localice todos los nombres que comienzan con ...
mediante el método Locate.

Aunque está en el ejemplo, me olvidé de decirte que para que el filtrado desaparezca basta que pongas la propiedad Filtered en falso en cualquier punto del código.

Saludos. :)

koalasoft 31-07-2013 02:48:42

Use el ejemplo con el parametro Locate ..

Tengo dos dudas ...

01.- Hay alguna forma para que despues que haya buscado la fila donde esta la palabra, esta quede seleccionado la fila (sobreado) ?

02.- Alguna forma una vez que se realizo el filtrado que SOLO aparezca la fila con el campo buscado .. osea que no aparezca ninguno mas en pantalla?

Saludos !! .. :D

Casimiro Notevi 31-07-2013 09:08:36

Cita:

Empezado por koalasoft (Mensaje 464728)
.

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)


La franja horaria es GMT +2. Ahora son las 02:10:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi