Uf...tablas y setkey...Te recomiendo q te pases a SQL. Si no puedes, usa los filtros y no el setkey para hacer este tipo de cosas: un ejemplo para busqueda incremental (sumamente lento para base de datos grandes) con filtros.
Código Delphi
[-]
procedure Busqueda(valor_a_buscar : string; tb : TTable; nombre_campo : string);
begin
if valor_a_buscar = '' then begin tb.Filter := ''; tb.Filtered := false; exit;
Tb.Filter := nombre_campo + ' = ' + AnsiquotedStr(valor_a_buscar + '*','''') ;
tb.Filtered := true;
tb.Refresh;
end;
si lo que quieres es no filtrar y solo buscar
Código Delphi
[-]
procedure Buscar(texto_a_buscar : string; tb : table; campo : string);
begin
if texto_a_buscar = '' then exit;
tb.Locate(campo,texto_a_buscar,[loCaseInsensitive,loPartialKey];
end;
deberas tener cuidado si se usa relacion master/detail.
PD: usa SQL, te ahorraras muchos problemas.