diff --git a/components/rx/trunk/rxdb/rxmemds.pas b/components/rx/trunk/rxdb/rxmemds.pas index f8decb224..99a7fdb12 100644 --- a/components/rx/trunk/rxdb/rxmemds.pas +++ b/components/rx/trunk/rxdb/rxmemds.pas @@ -162,6 +162,7 @@ type function IsSequenced: Boolean; override; function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; override; + function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant; override; procedure SortOnFields(const FieldNames: string; CaseInsensitive: Boolean = True; Descending: Boolean = False); procedure SortOnFieldsEx(const FieldNames: string; @@ -1525,6 +1526,27 @@ begin end; end; +function TRxMemoryData.Lookup(const KeyFields: string; + const KeyValues: Variant; const ResultFields: string): Variant; +var + SaveState: TDataSetState; +begin + if DataSetLocateThrough(Self, KeyFields, KeyValues, []{, ARecNo}) then + begin +{ SaveState := SetTempState(dsCalcFields); + try + // FFilterBuffer contains found record + CalculateFields(FFilterBuffer); // CalcBuffer is set to FFilterBuffer + Result:=FieldValues[ResultFields]; + finally + RestoreState(SaveState); + end;} + Result:=FieldByName(ResultFields).Value; + end + else + Result:=Null; +end; + { Table Manipulation } procedure TRxMemoryData.EmptyTable;