Предлагаю такую оптимизацию
Код:
function TDBLookupDataEh.GetLookupValue: Variant;
var
KeyValue: Variant;
begin
Result := Null;
if DataLink.Active and LookupListActive then
begin
DataSetGetFieldValues(DataLink.DataSet, KeyFields, KeyValue);
if LookupCache then
Result := FLookupListCache.ValueOfKey(KeyValue)
else if (LookupDataSet <> nil) and LookupDataSet.Active and not VarIsNull(KeyValue) then //SAMO
Result := ListLink.DataSet.Lookup(LookupKeyFieldNames, KeyValue, LookupDisplayFieldName);
end;
end;
Так, как искать в DataSet значение по KeyValue = Null бессмысленно, то можно этого не делать. Для FireDac это даёт существенную прибавку в скорости перерисовок (потому как из DisplayText вызывается). Для включённого LookupCache нужность этого тоже сомнительна.