Delphi IEnumerator – ForIn com FireDAC Query

Recurso de loops com ForIn não estão disponível para os componentes TDataSet o que não permite usar:

[code lang=”pascal”]
var fld:TFields;
begin
for fld in FQuery1 do
begin
memo1.lines.add( fld.fieldByName(‘nome’).asString );
end;
end;
[/code]

Um objeto que queira fazer uso de ForIn deve implementar a interface IEnumerator.
Fazendo uma adaptação útil para a classe TFDQuery do FireDAC é possível escrever os seguintes métodos para atender a condição do ForIn:

[code lang=”pascal”]
    function GetEnumerator: IQuery;
    function GetCurrent: TFields;
    property Current:TFields read GetCurrent;
    function MoveNext: boolean;
    procedure Reset;
[/code]

Código Fonte no Git

A propriedade de colunas da tabela já implementa Enumerator o que permite usar:

[code lang=”pascal”]
for f in query1.fields do
begin
memo1.Lines.add( f.FieldName );
end;
[/code]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *