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