<div dir="ltr">Hello,<div><br></div><div>What do you think about a TDataSetEnumerator class in the DB unit? Something like this:</div><div><br></div><div>=== begin code ===</div><div><div><br></div><div>  TDataSetEnumerator = class<br></div><div>  private</div><div>    FPosition: Integer;</div><div>    FDataSet: TDataSet;</div><div>    function GetCurrent: TDataSet;</div><div>  public</div><div>    constructor Create(ADataSet: TDataSet);</div><div>    function MoveNext: Boolean;</div><div>    property Current: TDataSet read GetCurrent;</div><div>  end;</div><div><br></div><div>  TSQLQuery = Class(TCustomSQLQuery)<br></div><div>  ...</div><div>  public</div><div>    function GetEnumerator: TDataSetEnumerator;</div><div>  end;</div><div>...</div><div><br></div><div><div>constructor TDataSetEnumerator.Create(ADataSet: TDataSet);</div><div>begin</div><div>  inherited Create;</div><div>  FDataSet := ADataSet;</div><div>  FPosition := -1;</div><div>  FDataSet.MoveBy(0);</div><div>end;</div><div><br></div><div>function TDataSetEnumerator.GetCurrent: TDataSet;</div><div>begin</div><div>  Result := FDataSet;</div><div>end;</div><div><br></div><div>function TDataSetEnumerator.MoveNext: Boolean;</div><div>begin</div><div>  Inc(FPosition);</div><div>  if FPosition = FDataSet.RecordCount then</div><div>    Exit(False);</div><div>  FDataSet.MoveBy(FPosition);</div><div>  Result := True;</div><div>end;</div></div><div><br></div><div>...</div><div><br></div><div><div>function TSQLQuery.GetEnumerator: TDataSetEnumerator;</div><div>begin</div><div>  Result := TDataSetEnumerator.Create(Self);</div><div>end;</div></div><div><br></div><div>=== end code ===<br></div><div><br></div><div>So, after implementing this feature, you could use something like this:</div><div><br></div><div>=== begin code ===</div><div><br></div><div><div>    q.Open;<br></div><div>    for r in q do</div><div>      for f in r.Fields do</div><div>        WriteLn(f.AsString);</div></div><div><br></div><div>=== end code ===</div><div><br></div><div>Instead of this:</div><div><br></div><div><div>=== begin code ===</div><div><br></div><div><div>    q.Open;</div><div>    q.First;</div><div>    while not q.EOF do</div><div>    begin</div><div>      for f in q.Fields do</div><div>        WriteLn(f.AsString);</div><div>      q.Next;</div><div>    end;</div></div><div><br></div><div>=== end code ===</div></div><div><br></div><div>Thank you!</div><div><br></div>-- <br><div>Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a></div>
</div></div>