Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busquedas en combobox (https://www.clubdelphi.com/foros/showthread.php?t=79702)

cmfab 01-08-2012 19:11:12

Busquedas en combobox
 
Ho,a a todos, agluien conoce algun componente tipo Tcombobox o Tlookupcombobox que tenga implementado algun evento de busqueda secuencial entre los items pero que busque multipalabras segun se vaya escribiendo sin importar el orden de estas palabras.

Gracias por sus opiniones

ecfisa 01-08-2012 19:37:30

Hola cmfab.

No entiendo bién a que te refieres con busqueda secuencial, pero ambos componentes implementan la busqueda incremental. Es decir que si tenemos los Items:
Código:

Iz
aaa
Ix
Ixa

Y se presiona la 'I' se posiciona en el primer elemento y luego la 'x' se posiciona en el tercero. Por último si se presiona la 'a' se ubicará en el cuarto elemento aunque no esten ordenados.

Pero tal vez no haya interpretado lo que estas buscando...

Saludos.

cmfab 01-08-2012 21:00:18

Gracias ecfisa, quiza no me haya expresado bien. osea lo que busco mas que todo es si existe la posiblidad de busuedas multipalabras, osea escribo dos palabras separdas por un espacio en el combobox y que encuentre las ocurrencias no importa el orden en la lista por ejemplo escribo: "Naranja Platano", que me encuentre todos los items que contienen la palabra "Naranja" y todos tambien los que contienen la palabra "Platano"

un saludo

ecfisa 01-08-2012 22:26:48

Hola cmfab.

No conozco un componente con esas características, pero como para darte una idea, podrías implementar algo con un comportamiento similar mediante un TComboBox y, en este ejemplo, un TSpeedButton:

Código Delphi [-]
// cargar el campo domicilio en el combo
procedure TForm1.FormCreate(Sender: TObject);
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM CLIENTES';
    Open;
    while not eof do
    begin
      ComboBox1.Items.Add(FieldByName('DOMICILIO').AsString);
      Next;
    end;
  end;
  ComboBox1.ItemIndex:= 0; 
end;

// Buscar por términos
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  TS: TStringList;
  s: string;
  i: Integer;
begin
  TS:= TStringList.Create;
  TS.Delimiter:= ' ';
  TS.DelimitedText:= UpperCase(ComboBox1.Text);
  s:='WHERE ';
  for i:= 0 to TS.Count-1 do  
    s:= s + 'DOMICILIO' + ' CONTAINING UPPER('+ QuotedStr(TS[i]) + ')AND ';
  SetLength(s, Length(s)-Length(')AND'));
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM CLIENTES ' + s;
    Open;
  end;
end;
De este modo podras filtrar por 2, 3,...,N términos ( siempre que estén separados por un espacio ). Desconozco si tu SGBD soporta la cláusula CONTAINING pero seguramente tenga alguna similar.

Saludos.

cmfab 01-08-2012 23:11:58

así es tambien imaginé que no existiría, así que es un buen ejemplo para comenzar a analizarlo. mil gracias por el código, de fijo lo implementaré

ecfisa 02-08-2012 01:47:56

Hola cmfab.

Cometí una omisión en el código anterior, debería ser:
Código Delphi [-]
// Buscar por términos
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  TS: TStringList;
  s: string;
  i: Integer;
begin
  TS:= TStringList.Create;
  try
    TS.Delimiter:= ' ';
    TS.DelimitedText:= UpperCase(ComboBox1.Text);
    s:='WHERE ';
    for i:= 0 to TS.Count-1 do
      s:= s + 'DOMICILIO' + ' CONTAINING UPPER('+ QuotedStr(TS[i]) + ')AND ';
  finally
    TS.Free;
  end;
  SetLength(s, Length(s)-Length(')AND'));
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM CLIENTES ' + s;
    Open;
  end;
end;
Disculpas. :o

Saludos.

cmfab 02-08-2012 15:24:10

Gracias una vez mas por el gran aporte


La franja horaria es GMT +2. Ahora son las 23:23:46.

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