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
您应该使用TIntegerDynArray的Types.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)