PDA

Ver la Versión Completa : ComboBox Dinamico


sionks
17-04-2008, 22:18:02
Buenas, Estoy un poco atorado con respecto a un problema que se me ha presentado al estar realizando un sistema, la pequeña dificultad es la siguientes:

Estoy Agregando un Combobox, El caul contendra en si los resultados que contenga una consulta tipo busqueda de una tabla, es decir mientras yo voy insertando caracteres en el Combobox, automaticamente los items del combo se vayan actualizando, mostrando solo los que coincidan con dicha busqueda, por la aprte de la busqueda no tengo problema, el detalle es como hacer para que los items, se vayan actualizando.

Aqui les pongo la forma en la que realizo mis busqueda: espero me pueda auxiliar:



procedure TFMain.CBClienteKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i:Integer;
palabras: TStringList;
consulta: String;
begin

//CBCliente es el ComboBox
//Clientes es la Consulta con la Tabla
if CBCliente.Text = '' then
begin
CBCliente.Clear;
consulta:='Select Nombre from Clientes';
Clientes.close;
Clientes.sql.clear;
Clientes.sql.add(consulta);
Clientes.open;
end
else begin
palabras := TStringList.Create;
palabras.CommaText := CBCliente.Text;
Clientes.close;
Clientes.sql.clear;
for i:=0 to palabras.Count-1 do
begin
consulta:=consulta+'and Nombre like "%'+palabras.Strings[i]+'%"';
end;
Delete(consulta,1,3);
consulta:='Select Nombre from Clientes where'+consulta;
Clientes.SQL.Add(consulta);
Clientes.Open;
end;//else

//AQUI TENDRIA QUE IR LA ACTUALIZACION DE LOS ITEMS

end;

Caro
18-04-2008, 02:58:50
Hola sionks, cada vez que se haga la consulta tienes que llenar nuevamente el combo con el nuevo resultado de dicha consulta.


procedure TFMain.CBClienteKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i:Integer;
palabras: TStringList;
consulta: String;
begin //CBCliente es el ComboBox
//Clientes es la Consulta con la Tabla
if CBCliente.Text = '' then begin CBCliente.Clear; consulta:='Select Nombre from Clientes';
Clientes.close;
Clientes.sql.clear;
Clientes.sql.add(consulta);
Clientes.open;
end else begin palabras := TStringList.Create; palabras.CommaText := CBCliente.Text; Clientes.close; Clientes.sql.clear; for i:=0 to palabras.Count-1 do begin consulta:=consulta+'and Nombre like "%'+palabras.Strings[i]+'%"';
end;
Delete(consulta,1,3);
consulta:='Select Nombre from Clientes where'+consulta;
Clientes.SQL.Add(consulta);
Clientes.Open;
end;//else

//AQUI TENDRIA QUE IR LA ACTUALIZACION DE LOS ITEMS

CBCliente.Items.Clear;//limpiamos
Clientes.First;
While not Clientes.Eof do
begin
CBCliente.Items.Add(Clientes.FieldByName('CAMPO').AsString);
Clientes.Next;
end;

end;

sionks
18-04-2008, 06:03:32
Gracias Amigo, pero lamentablemente, la solucion que me has dado no es nada funcional, debido a que se pierde la cadena de la cual estas haciendo la busqueda, pero igual te agradezco tu interes en ayudarme