[fpc-pascal] Suggestion: TDataSetEnumerator
silvioprog
silvioprog at gmail.com
Thu Mar 5 01:11:00 CET 2015
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150304/65358061/attachment.html>
More information about the fpc-pascal
mailing list