diff --git a/packages/fcl-db/src/base/dataset.inc b/packages/fcl-db/src/base/dataset.inc index 507db5143d..103c103cb5 100644 --- a/packages/fcl-db/src/base/dataset.inc +++ b/packages/fcl-db/src/base/dataset.inc @@ -2482,3 +2482,30 @@ 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; diff --git a/packages/fcl-db/src/base/db.pas b/packages/fcl-db/src/base/db.pas index ebc2b3265b..9be83477de 100644 --- a/packages/fcl-db/src/base/db.pas +++ b/packages/fcl-db/src/base/db.pas @@ -1713,6 +1713,17 @@ type property OnPostError: TDataSetErrorEvent read FOnPostError write FOnPostError; end; + TDataSetEnumerator = class + private + FDataSet: TDataSet; + FBOF: Boolean; + function GetCurrent: TFields; + public + constructor Create(ADataSet: TDataSet); + function MoveNext: Boolean; + property Current: TFields read GetCurrent; + end; + TDataLink = class(TPersistent) private FFirstRecord, @@ -2183,6 +2194,8 @@ function BuffersEqual(Buf1, Buf2: Pointer; Size: Integer): Boolean; function SkipComments(var p: PChar; EscapeSlash, EscapeRepeat : Boolean) : boolean; +operator Enumerator(ADataSet: TDataSet): TDataSetEnumerator; + implementation uses dbconst,typinfo;