Hello, What do you think about a TDataSetEnumerator class in the DB unit? Something like this:
=== begin code === TDataSetEnumerator = class private FPosition: Integer; FDataSet: TDataSet; function GetCurrent: TDataSet; public constructor Create(ADataSet: TDataSet); function MoveNext: Boolean; property Current: TDataSet read GetCurrent; end; TSQLQuery = Class(TCustomSQLQuery) ... public function GetEnumerator: TDataSetEnumerator; end; ... constructor TDataSetEnumerator.Create(ADataSet: TDataSet); begin inherited Create; FDataSet := ADataSet; FPosition := -1; FDataSet.MoveBy(0); end; function TDataSetEnumerator.GetCurrent: TDataSet; begin Result := FDataSet; end; function TDataSetEnumerator.MoveNext: Boolean; begin Inc(FPosition); if FPosition = FDataSet.RecordCount then Exit(False); FDataSet.MoveBy(FPosition); Result := True; end; ... function TSQLQuery.GetEnumerator: TDataSetEnumerator; begin Result := TDataSetEnumerator.Create(Self); end; === end code === So, after implementing this feature, you could use something like this: === begin code === q.Open; for r in q do for f in r.Fields do WriteLn(f.AsString); === end code === Instead of this: === begin code === q.Open; q.First; while not q.EOF do begin for f in q.Fields do WriteLn(f.AsString); q.Next; end; === end code === Thank you! -- 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