<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>