函数返回一个Integer delphi数组

时间:2014-07-16 09:07:48

标签: arrays function delphi

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

[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.

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

对于@TLama

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

 type
  TDataModule2 = class(TDataModule)
    conn: TADOConnection;
    importMonetar: TADOStoredProc;
    TIntArray : array of Integer;
    qMonetare: TADOQuery; 

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

1 个答案:

答案 0 :(得分:6)

您应该使用TIntegerDynArray中的Types.pas。 如果您使用的是Delphi版本&gt; = 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.
相关问题