On Tue, Mar 10, 2015 at 5:48 PM, silvioprog <silviop...@gmail.com> wrote:
> On Sat, Mar 7, 2015 at 4:27 AM, LacaK <la...@zoznam.sk> wrote: > >> What if TDataSetEnumerator.Current will return TFields instead of >> TDataSet which enumerates? >> >> Example: >> procedure IterateDataSet; >> var DataSet, DS: TDataSet; >> Flds: TFields; >> F: TField; >> begin >> for Flds in DataSet do >> for F in Flds do // DataSet can be still accessed by Flds.DataSet >> writeln(F.AsString,'|'); >> end; >> >> I know that it is more or less same ... it depends what will be most >> common usage scenario. >> In one case it will be better have DataSet in another Fields. >> When iterating DataSet IMO only Fields, Recno, Bookmark are usable >> properties which changes on each itteration and can be practically used >> inside loop. >> But I think, that most common scenario will be use only Fields inside >> loop. >> In both cases user must define "control variable" either of TDataSet type >> or TFields type. >> >> (*** Example implementation ***) >> type >> TDataSetEnumerator = class >> private >> FDataSet: TDataSet; >> FBOF: Boolean; >> function GetCurrent: TFields; >> public >> &nb sp; constructor Create(ADataSet: TDataSet); >> function MoveNext: Boolean; >> property Current: TFields read GetCurrent; >> end; >> >> operator Enumerator(ADataSet: TDataSet): TDataSetEnumerator; >> begin >> Result := TDataSetEnumerator.Create(ADataSet); >> end; >> >> constructor TDataSetEnumerator.Create(ADataSet: TDataSet); >> begin >> inherited Create; >> FDataSet := ADataSet; >> FBOF := True; >> FDataSet.First; >> end; >> >> function TDataSetEnumerator.GetCurrent: TFields; >> begin >> Result := FDataSet.Fields; >> end; >> >> function TDataSetEnumerator.MoveNext: Boolean; >> begin >> if FBOF then >> FBOF := False >> else >> FDataSet.Next; >> Result := not FDataSet.EOF; >> end; >> >> (* *** *) >> >> -Laco. >> > > Very nice. I open a new issue about that ( > http://bugs.freepascal.org/view.php?id=27644). =) > > I have a question. Can I use two or more enum operators in a same unit? > It was applied in trunk. Thanks guys! (y) -- Silvio Clécio My public projects - github.com/silvioprog
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal