Arrays 函数返回一个整数数组

Arrays 函数返回一个整数数组,arrays,function,delphi,Arrays,Function,Delphi,所以我有一个函数,它接受一个数据集,需要从一个字段返回所有值。我不知道如何使函数返回一个数组,因为当我声明一个数组时,我得到了错误 [DCC Error] dataModuleImportMonetar.pas(20): E2003 Undeclared identifier: 'nr' 这是我的密码 unit dataModuleImportMonetar; interface uses SysUtils, Classes, DB, ADODB; type TDataModul

所以我有一个函数,它接受一个数据集,需要从一个字段返回所有值。我不知道如何使函数返回一个数组,因为当我声明一个数组时,我得到了错误

[DCC Error] dataModuleImportMonetar.pas(20): E2003 Undeclared identifier: 'nr'
这是我的密码

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.
我做错了什么?如何声明一个返回整数数组的函数

对于@TLama

如果我这样做(在询问之前已经这样做了)


我得到另一个错误
[DCC error]dataModuleImportMonetar.pas(12):E2217发布的字段“TIntArray”不是类或接口类型。
如果您使用的是Delphi版本>=2010,那么也可以使用
TArray


您应该使用
Types.pas
中的
TIntegerDynArray
。 如果您使用的是Delphi版本>=2010,那么也可以使用
TArray


你必须定义一个
类型,而不是声明一个变量。你能更具体一点吗,我不明白…使用IntegerArray类型的字段是一个非常糟糕的主意,因为它被声明为Integer的
IntegerArray=array[0..$efffff]。因此,字段nr将占用大约1GB的内存。TLama向您展示了动态数组的声明。此外,函数中使用Return表明您似乎对Delphi语法不太熟悉。我假设这是一门基础课程——无论是一本书还是一位导师。@TLama你的粘贴站链接有一个拼写错误。你用
而不是
=
声明了类型。你必须定义一个
类型,而不是声明一个变量。你能更具体一点吗,我不明白…使用IntegerArray类型的字段是一个非常糟糕的主意,因为它被声明为Integer的
IntegerArray=array[0..$efffff]。因此,字段nr将占用大约1GB的内存。TLama向您展示了动态数组的声明。此外,函数中使用Return表明您似乎对Delphi语法不太熟悉。我假设这是一门基础课程——无论是一本书还是一位导师。@TLama你的粘贴站链接有一个拼写错误。您用
而不是
=
声明了类型。
 type
  TDataModule2 = class(TDataModule)
    conn: TADOConnection;
    importMonetar: TADOStoredProc;
    TIntArray : array of Integer;
    qMonetare: TADOQuery; 
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.