Acho que não precisamos de duas comparações... O problema é que o código atual não remove os espaços do parâmetro informado pelo usuário...
Por favor tente dessa maneira:
function TACBrCNIEE.BuscarECF(const AMarca, AModelo, AVersaoSB: String;
const RemoveEspacos: Boolean): TACBrCNIEERegistro;
var
I: Integer;
Marca, Modelo, VersaoSB: String;
MarcaAtual, ModeloAtual, VersaoAtual: String;
begin
// abrir a tabela se estiver fechada
if Cadastros.Count <= 0 then
begin
if not Self.AbrirTabela then
raise EACBrCNIEE.Create('Não foi possível abrir a tabela de CNIEE.');
end;
Marca := AnsiUpperCase(AMarca);
Modelo := AnsiUpperCase(AModelo);
VersaoSB := AnsiUpperCase(ACBrUtil.OnlyNumber(AVersaoSB));
if RemoveEspacos then
begin
Marca := StringReplace(Marca, ' ', '', [rfReplaceAll]);
Modelo := StringReplace(Modelo, ' ', '', [rfReplaceAll]);
VersaoSB := StringReplace(VersaoSB, ' ', '', [rfReplaceAll]);
end;
Result := nil;
for I := 0 to Cadastros.Count - 1 do
begin
MarcaAtual := AnsiUpperCase(Cadastros[I].DescrMarca);
ModeloAtual := AnsiUpperCase(Cadastros[I].DescrModelo);
VersaoAtual := AnsiUpperCase(ACBrUtil.OnlyNumber(Cadastros[I].Versao));
if RemoveEspacos then
begin
MarcaAtual := StringReplace(MarcaAtual, ' ', '', [rfReplaceAll]);
ModeloAtual := StringReplace(ModeloAtual, ' ', '', [rfReplaceAll]);
VersaoAtual := StringReplace(VersaoAtual, ' ', '', [rfReplaceAll]);
end;
if (MarcaAtual = Marca) and (ModeloAtual = Modelo) and (VersaoAtual = VersaoSB) then
begin
Result := Cadastros[I];
Exit;
end;
end;
end;