Sur des champs non indexés LOCATE en interne crée un filtre et renvoie le premier enregistrement du filtre. Donc tu devrais faire un filtre au lieu d'un LOCATE surtout si ce qui t'interesse est de traiter plusieurs valeur de retour et non une seule
table.filter:= 'champ1 = ''' + valeur1 + ''' and champ1 = ''' + valeur2 + ''';
table.filtered:= true;
try
while not table.eof do
begin
// le code à faire sur l'enregistrement courant
table.next;
end;
finally
table.filter:='';
table.filtered:= false;
end;