unit InMemoryDataU; interface uses System.Generics.Collections, BusinessObjectsU, Data.DB; function GetPeopleList: TObjectList; function GetDataSet: TDataSet; function GetPeopleSmallList: TObjectList; function GetInterfacedPeopleList: TList; implementation uses System.SysUtils, FireDAC.Comp.Client, Data.SqlTimSt; var GPeople, GPeopleSmall: TObjectList; function GetInterfacedPeopleList: TList; begin Result := TList.Create([ TInterfacedPerson.Create('Daniele Teti', 40, EncodeDate(1979, 11, 4)), TInterfacedPerson.Create('Peter Parker', 35, EncodeDate(1984, 11, 4)) ]); end; procedure PopulateList; var p: TPerson; I: Integer; begin GPeople := TObjectList.Create(True); for I := 1 to 1000 do begin p := TPerson.Create; p.FirstName := 'Daniele'; p.LastName := 'Teti'; p.DOB := EncodeDate(1979, 11, 4); p.Married := True; GPeople.Add(p); p := TPerson.Create; p.FirstName := 'John'; p.LastName := 'Doe'; p.DOB := EncodeDate(1879, 10, 2); p.Married := False; GPeople.Add(p); p := TPerson.Create; p.FirstName := 'Jane'; p.LastName := 'Doe'; p.DOB := EncodeDate(1883, 1, 5); p.Married := True; GPeople.Add(p); end; end; function GetPeopleList: TObjectList; begin Result := GPeople; end; procedure PopulateSmallList; var p: TPerson; begin GPeopleSmall := TObjectList.Create(True); p := TPerson.Create; p.FirstName := 'Daniele'; p.LastName := 'Teti'; p.DOB := EncodeDate(1979, 11, 4); p.Married := True; GPeopleSmall.Add(p); p := TPerson.Create; p.FirstName := 'John'; p.LastName := 'Doe'; p.DOB := EncodeDate(1879, 10, 2); p.Married := False; GPeopleSmall.Add(p); p := TPerson.Create; p.FirstName := 'Jane'; p.LastName := 'Doe'; p.DOB := EncodeDate(1883, 1, 5); p.Married := True; GPeopleSmall.Add(p); end; function GetPeopleSmallList: TObjectList; begin Result := GPeopleSmall; end; function CreateDataSet: TFDMemTable; var lDS: TFDMemTable; begin lDS := TFDMemTable.Create(nil); try lDS.FieldDefs.Add('field_string', ftString, 20); lDS.FieldDefs.Add('field_time', ftTime); lDS.FieldDefs.Add('field_date', ftDate); lDS.FieldDefs.Add('field_datetime', ftDateTime); lDS.FieldDefs.Add('field_timestamp', ftTimeStamp); // lDS.FieldDefs.Add('field_timestamp_with_offset', ftTimeStampOffset); lDS.CreateDataSet; Result := lDS; except lDS.Free; raise; end; end; function GetDataSet: TDataSet; var lDS: TFDMemTable; I: Integer; begin lDS := CreateDataSet; try for I := 0 to 0 do begin lDS.Insert; lDS.FieldByName('field_string').AsString := 'Field' + I.ToString; lDS.FieldByName('field_time').AsDateTime := Time(); lDS.FieldByName('field_date').AsDateTime := Date(); lDS.FieldByName('field_datetime').AsDateTime := Now(); lDS.FieldByName('field_timestamp').AsSQLTimeStamp := DateTimeToSQLTimeStamp(Now()); // lDS.FieldByName('field_timestamp_with_offset').AsSQLTimeStampOffset := DateTimeToSQLTimeStampOffset(Now()); lDS.Post; end; except lDS.Free; raise; end; Result := lDS; end; initialization PopulateList; PopulateSmallList; finalization GPeople.Free; GPeopleSmall.Free; end.