Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   busqueda dentro de en un listbox (https://www.clubdelphi.com/foros/showthread.php?t=35979)

Max_E. 27-09-2006 21:47:03

busqueda dentro de en un listbox
 
Hola ha todos.

quiera saber como realizar una busqueda de un monbre especifico dentro de todos los nombres que esten dentro de un listbox atraves de un edit, me explico,

quisiera que cuando este digitando la primera letra del nombre a buscar dentro de un edit, en el listbox enfoque el primer nombre que empieze con dicha letra y cuando se digite la segunda letra enfoque el primer nombre que empieze con esas 2 primeras letras haci cada ves que digite la siguiente letra del nombre.

pense utilizar for y pos(busqueda de una cadena dentro de otro cadena)buscar item por item desde el nombre que empieze con a hasta la z pero mi listbox tiene como 1000 nombres o mas y realizar esta busqueda desde la a hazta la z cada ves que digite una letra
la verdad no se si abra otra manera mas sencilla.

gracias a todos de ante mano.:)
[IMG]file:///C:/WINDOWS/TEMP/moz-screenshot.jpg[/IMG][IMG]file:///C:/WINDOWS/TEMP/moz-screenshot-1.jpg[/IMG][IMG]file:///C:/WINDOWS/TEMP/moz-screenshot-2.jpg[/IMG][IMG]file:///C:/WINDOWS/TEMP/moz-screenshot-3.jpg[/IMG][IMG]file:///C:/WINDOWS/TEMP/moz-screenshot-4.jpg[/IMG][IMG]file:///C:/WINDOWS/TEMP/moz-screenshot-5.jpg[/IMG]

Caral 27-09-2006 21:57:35

Hola Max_E
Asi:
Código Delphi [-]
procedure TFBuscaNombre.Edit1Change(Sender: TObject);
var   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ATNombres.Filtered := False;
      If CBFiltro.Text = 'Nombre' then Filtro := 'Nombre Like '''+Edit1.Text + '*'''
         else If CBFiltro.Text = 'Apellido' then Filtro := 'Apellido Like '''+ Edit1.Text + '*'''
      ATNombres.Filter := Filtro;
      ATNombres.Filtered := True
   end
   else ATNombres.Filtered := False;
end;
CBFiltro es un combobox, en donde indico si es por nombre o apellido la busqueda, con solo poner la primera letra va filtrando hasta encontrar lo requerido.
Saludos

Max_E. 27-09-2006 23:29:19

busqueda en un listbox (una ayuda mas)
 
hola:Gracias por ayudarme

El componente ATnombre no es un listbox, el listbox no tiene la propiedad filtered ni filter.
podrias decirme que componente es y si es un listbox como activo esta propiedad por que no la tiene como predeterminada.

gracias por tomarte el tiempo para responder.:)

Caral 28-09-2006 00:08:15

Hola
ATNombre en este caso es el nombre de la tabla o query que usas.
Saludos

Max_E. 28-09-2006 08:08:24

aun mas ayuda
 
hola denuevo:

Hice la aplicación con la ayuda que me diste y utilice un Query que tiene su base de datos con datos de nombre, apellidos y área de trabajo, pero como muestro o enfoco los nombres en el listbox que se van filtrando mientras voy digitando el nombre en el edit.

creo que esa seria la ultima ayuda (ojala) para cerrar el tema. gracias por tu tiempo en leer y contestar mis dudas.

Caral 28-09-2006 17:06:24

Hola Max_E
Aqui te envio un codigo para que busques en este caso Clientes, los nombres de las tablas por supuesto son los mios, tendras que poner los tuyos para que te funcione, pero el codigo funciona perfectamente y lo puedes aplicar si le pones un poco de atencion, es realmente facil.
Código Delphi [-]
unit UFBuscaCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UDM1, DBCtrls, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls,
  Buttons;

type
  TFBuscaCliente = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    CBFiltro: TComboBox;
    DBGrid1: TDBGrid;
    ATClientes: TADOTable;
    ATClientesCodCliente: TIntegerField;
    ATClientesNombreCliente: TWideStringField;
    ATClientesDireccion1: TWideStringField;
    ATClientesDireccion2: TWideStringField;
    ATClientesPais: TWideStringField;
    ATClientesProvincia: TWideStringField;
    ATClientesCanton: TWideStringField;
    ATClientesDistrito: TWideStringField;
    ATClientesApartado: TWideStringField;
    ATClientesContacto: TWideStringField;
    ATClientesTelefono: TWideStringField;
    ATClientesExtencion: TWideStringField;
    ATClientesFax: TWideStringField;
    ATClientesEmail: TWideStringField;
    ATClientesNoEnvEmail: TBooleanField;
    ATClientesTerminos: TWideStringField;
    ATClientesVendedor: TWideStringField;
    ATClientesSuspendido: TBooleanField;
    ATClientesExcento: TBooleanField;
    ATClientesFechaIngreso: TDateTimeField;
    ATClientesLimiteCredito: TFloatField;
    ATClientesNotas: TMemoField;
    DSClientes: TDataSource;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    DBText1: TDBText;
    DBText2: TDBText;
    Label3: TLabel;
    DBText3: TDBText;
    Label4: TLabel;
    DBText4: TDBText;
    DBText5: TDBText;
    Label5: TLabel;
    Label6: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ATClientesCatPrecio: TWordField;
    DBListBox1: TDBListBox;
    procedure Edit1Change(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn1Click(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Cod_Cliente: string;
    Nombre_Cliente: string;
    NombreCliente: string;
  end;

var
  FBuscaCliente: TFBuscaCliente;

implementation

{$R *.dfm}

procedure TFBuscaCliente.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ATClientes.Filtered := False;
      If CBFiltro.Text = 'Código' then Filtro := 'CodCliente Like '+Edit1.Text
         else If CBFiltro.Text = 'Nombre' then Filtro := 'NombreCliente Like '''+ Edit1.Text + '*'''
            else If CBFiltro.Text = 'Teléfono' then Filtro := 'Telefono Like '''+ Edit1.Text + '*''';
      ATClientes.Filter := Filtro;
      ATClientes.Filtered := True
   end
   else ATClientes.Filtered := False;
end;

procedure TFBuscaCliente.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   IF Key = VK_DOWN then
   DbGrid1.SetFocus;
end;

procedure TFBuscaCliente.BitBtn1Click(Sender: TObject);
begin
   CodCliente := ATClientesCodCliente.AsString;
   Cod_Cliente := ATClientesCodCliente.AsString;
   NombreCliente := ATClientesNombreCliente.AsString;
   Nombre_Cliente := ATClientesNombreCliente.AsString;
   Close;
end;

procedure TFBuscaCliente.DBGrid1DblClick(Sender: TObject);
begin
   BitBtn1Click(DBGrid1);
end;

procedure TFBuscaCliente.BitBtn2Click(Sender: TObject);
begin
   CodCliente := '';
   Cod_Cliente := '';
   NombreCliente := '';
   Nombre_Cliente := '';
   Close;
end;

procedure TFBuscaCliente.FormCreate(Sender: TObject);
begin
   ATClientes.Open;
end;

procedure TFBuscaCliente.FormDestroy(Sender: TObject);
begin
   ATClientes.Close;
end;

end.
Como veras aqui se aplican varias cosas en el filtro, codigo, nombre, telefono.
Yo no uso un listbox para esto, uso un dbgrid, ya que me da la informacion completa del cliente en este caso, no creo que tengas mas problemas de todos modos si necesitas algo me dices.
Saludos

Max_E. 01-10-2006 07:46:58

ayuda en Busqueda en DBgrid
 
hola denuevo::)

he hecho esto

Código Delphi [-]unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; ComboBox1: TComboBox; DBGrid1: TDBGrid; Query1: TQuery; DataSource1: TDataSource; procedure FormCreate(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin query1.Open; end; procedure TForm1.Edit1Change(Sender: TObject); var Filtro : String; begin If (Edit1.Text <> '') then begin Query1.Filtered := False; case combobox1.ItemIndex of 0:Filtro := 'Nombre Like '+Edit1.Text + '*'''; 1:Filtro := 'Codigo Like '+Edit1.Text + '*'''; end; Query1.Filter := Filtro; Query1.Filtered := True end else Query1.Filtered := False; end; procedure TForm1.FormDestroy(Sender: TObject); begin Query1.Close; end; end.


1º hice una table con campos Nombre y codigo nada mas, llenando nombres y codigos al asar (jose - 3411, luis - 3415,.......).

2º coloque en el SQL del query
Select*
from busqueda (busqueda es el nombre de la tabla de 2 campos)

3º al ejecutar el programa no me salen errores, pero al digitar 'j' en el edit me sale el error (Query1: Field 'j' not found) y logico no busca nada o algo parecido

4º no se :( como le hiciste o que es
ATClientesCodCliente: TIntegerField;
ATClientesNombreCliente: TWideStringField; en tus codigos

quiza aqui este mi problema.

podrias explicame donde esta mi gravisimo error

Saludos y gracias por tu tiempo.

Max_E. 01-10-2006 07:51:52

ayuda en busqueda en DBgrid
 
hola denuevo::)

he hecho esto

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ComboBox1: TComboBox;
    DBGrid1: TDBGrid;
    Query1: TQuery;
    DataSource1: TDataSource;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
query1.Open;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      Query1.Filtered := False;
      case combobox1.ItemIndex of
      0:Filtro := 'Nombre Like '+Edit1.Text + '*''';
      1:Filtro := 'Codigo Like '+Edit1.Text + '*''';
      end;
      Query1.Filter := Filtro;
      Query1.Filtered := True
   end
   else Query1.Filtered := False;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Query1.Close;
end;

end.
1º hice una table con campos Nombre y codigo nada mas, llenando nombres y codigos al asar (jose - 3411, luis - 3415,.......).

2º coloque en el SQL del query
Select*
from busqueda (busqueda es el nombre de la tabla de 2 campos)

3º al ejecutar el programa no me salen errores, pero al digitar 'j' en el edit me sale el error (Query1: Field 'j' not found) y logico no busca nada o algo parecido

4º no se :( como le hiciste o que es
ATClientesCodCliente: TIntegerField;
ATClientesNombreCliente: TWideStringField; en tus codigos

quiza aqui este mi problema.

podrias explicame donde esta mi gravisimo error

Saludos y gracias por tu tiempo.


La franja horaria es GMT +2. Ahora son las 09:24:40.

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