所以我有一个带有数据集的函数,需要从字段中返回所有值。我无法弄清楚如何让函数返回一个数组,就像我声明一个数组时我一直得到错误
[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
答案 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.