Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda incremental con ComboBox (https://www.clubdelphi.com/foros/showthread.php?t=67978)

Lenny 17-05-2010 21:48:38

Busqueda incremental con ComboBox
 
Tengo un pequeño problema en el cual espero peudan ayudarme.
Necesito hacer una busqueda incremental en una base de datos, encontre este codigo que funciona bastante bien:

Código Delphi [-]
procedure TProductos.Edit1Change(Sender: TObject);
Var
Valor,Valor1 : String;
begin
     if Edit1.text = '' then
     begin
     BDatos.ZTable3.Filtered := false;
     exit;
     end;
         BDatos.ZTable3.Locate('CODIGO', Edit1.Text,[loPartialKey,loCaseInsensitive]);
         valor := Edit1.Text;
         Valor1 := Valor;
         inc(valor1[length(Valor1)]);
         BDatos.ZTable3.Filter := 'CODIGO >= '+QuotedStr(Valor)+ ' and CODIGO < ' +QuotedStr(valor1);
         BDatos.ZTable3.Filtered := true;
          end;
end.

La pregunta es si se puede cambiar 'CODIGO' por el texto que seleccione en un ComboBox, ya que necesito buscar por mas de un criterio, si no se puede... existe otra manera de hacer lo que necesito??? de antemano muchisimas gracias...

Lenny 17-05-2010 23:02:05

Ya pude hacerlo!!!
 
Bueno, acudi a la vieja escuela "Prueba y Error" y dio sus frutos...
Por si a alguien le sirve ak ta:

Código Delphi [-]
procedure TProductos.Edit1Change(Sender: TObject);
Var
Valor,Valor1 : String;
begin
     if Edit1.text = '' then
     begin
     BDatos.ZTable3.Filtered := false;
     exit;
     end;
         BDatos.ZTable3.Locate(ComboBox1.Text, Edit1.Text,[loPartialKey,loCaseInsensitive]);
         valor := Edit1.Text;
         Valor1 := Valor;
         inc(valor1[length(Valor1)]);
         BDatos.ZTable3.Filter := ''+ComboBox1.Text+' >= '+QuotedStr(Valor)+ ' and '+ComboBox1.Text+' < ' +QuotedStr(valor1);
         BDatos.ZTable3.Filtered := true;
          end;
end.

Asi funciona de perlas, tambien en el OnChange del combobox inclui esto:

Código Delphi [-]
procedure TProductos.ComboBox1Change(Sender: TObject);
begin
Edit1.Clear;
end;

Con esto nos aseguramos hacer una busqueda en blanco por cada criterio elegido, Gracias de todos modos siempre han respondido mis preguntas dando respuestas claras y espero que esta duda le sirva a futuro a alguien, Byes!!!

PD: Si alguien encuentra un error, correccion o mejor manera de abordar el problema, feliz de resivir cualquier sugerencia/cambio... Byes!!!

ecfisa 18-05-2010 01:02:34

Hola Lenny.

No analizé tu código a fondo (ya que decis que funciona y te creo :)), pero la
función locate es una de las más ineficientes...

Mejor sería usar un componente TQuery para filtrar la consulta.

Por ejemplo:
Código:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  with Query1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM ZTABLE3'+
              ' WHERE CODIGO >= ' + QuotedStr(ComboBox1.Text)+
              ' AND CODIGO <= ' + QuotedStr(Edit1.Text);
    Open;
  end
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 08:17:48.

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