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.