函数返回一个Integer delphi数组

Ciu*_*caS 0 arrays delphi function

所以我有一个带有数据集的函数,需要从一个字段返回所有值.我无法弄清楚如何让函数返回一个数组,就像我声明一个数组时我一直得到错误

[DCC Error] dataModuleImportMonetar.pas(20): E2003 Undeclared identifier: 'nr'
Run Code Online (Sandbox Code Playgroud)

这是我的代码

unit dataModuleImportMonetar;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TDataModule2 = class(TDataModule)
    conn: TADOConnection;
    importMonetar: TADOStoredProc;

    qMonetare: TADOQuery;
  private
    { Private declarations }
    //nr  : Array[Word] of Integer;
    nr : IntegerArray;
  public
    { Public declarations }
    function nrFisiere ( dataSet : TDataSet) : nr ;
  end;

var
  DataModule2: TDataModule2;

implementation

{$R *.dfm}

{ TDataModule2 }

function TDataModule2.nrFisiere(dataSet: TDataSet): nr;
 var
  i : Integer;
begin
       dataSet.First;

       for i := 0 to dataSet.RecordCount  do
         begin
          Return nr[i] := dataSet.FieldByName('nrMonetare').Value;
         end;

end;


end.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我如何声明一个将返回一个Integer数组的函数

对于@TLama

如果我那样做(在问之前已经做过)

 type
  TDataModule2 = class(TDataModule)
    conn: TADOConnection;
    importMonetar: TADOStoredProc;
    TIntArray : array of Integer;
    qMonetare: TADOQuery; 
Run Code Online (Sandbox Code Playgroud)

我得到一个错误 [DCC Error] dataModuleImportMonetar.pas(12): E2217 Published field 'TIntArray' not a class or interface type

Ste*_*nke 6

您应该使用TIntegerDynArrayTypes.pas.如果您使用的是Delphi版本> = 2010,您也可以使用TArray<Integer>.

unit dataModuleImportMonetar;

interface

uses
  SysUtils, Classes, DB, ADODB, Types;

type
  TDataModule2 = class(TDataModule)
    conn: TADOConnection;
    importMonetar: TADOStoredProc;

    qMonetare: TADOQuery;
  public
    function nrFisiere(dataSet: TDataSet): TIntegerDynArray;
  end;

var
  DataModule2: TDataModule2;

implementation

{$R *.dfm}

{ TDataModule2 }

function TDataModule2.nrFisiere(dataSet: TDataSet): TIntegerDynArray;
var
  i: Integer;
  f: TField;
begin
  dataSet.First;
  SetLength(Result, dataSet.RecordCount);
  i := 0;
  // remember the field to avoid calling FieldByName in a loop
  f := dataSet.FieldByName('nrMonetare'); 
  while not dataSet.Eof do
  begin
    Result[i] := f.Value;
    Inc(i);
    dataSet.Next;
  end;
end;

end.
Run Code Online (Sandbox Code Playgroud)