悬赏:数据集的FieldValues属性为什么使用方括号而不是小括号? ( 积分: 100 )

  • 主题发起人 主题发起人 zfs88
  • 开始时间 开始时间
Z

zfs88

Unregistered / Unconfirmed
GUEST, unregistred user!
引用字段值,可以使用如:ADOTable1.FieldValues['字段名']。

请问:为什么这里使用方括号而不是小括号?按理说,方括号内应该是一个整数(数组的下标)。实在是被Delphi搞糊涂了!

给出满意答案者,立即奖励100分。言出有信!
 
Provides access to the values for all fields in the active record for the dataset

Delphi syntax:

property FieldValues[const FieldName: string]: Variant; default;

上面是帮助中摘抄的,可见是一个数组,当然用方括号
 
回复楼上:既然是数组,方括号内应该是作为下标的整数啊,为什么是字段名呢?
 
type
.............
TDataSet = class(TComponent, IProviderSupport)
function GetFieldValue(const FieldName: string): Variant;
procedure SetFieldValue(const FieldName: string; const Value: Variant);


property FieldValues[const FieldName: string]: Variant read GetFieldValue write SetFieldValue; default;

......
end;



function TDataSet.GetFieldValue(const FieldName: string): Variant;
var
I: Integer;
Fields: TList;
begin
if Pos(';', FieldName) <> 0 then
begin
Fields := TList.Create;
try
GetFieldList(Fields, FieldName);
Result := VarArrayCreate([0, Fields.Count - 1], varVariant);
for I := 0 to Fields.Count - 1 do
Result := TField(Fields).Value;
finally
Fields.Free;
end;
end else
Result := FieldByName(FieldName).Value
end;

procedure TDataSet.SetFieldValue(const FieldName: string;
const Value: Variant);
var
I: Integer;
Fields: TList;
begin
if Pos(';', FieldName) <> 0 then
begin
Fields := TList.Create;
try
GetFieldList(Fields, FieldName);
for I := 0 to Fields.Count - 1 do
TField(Fields).Value := Value;
finally
Fields.Free;
end;
end else
FieldByName(FieldName).Value := Value;
end;

这是一个数组属性(ADODataSet都继承自TDataSet,FieldValues是TDataSet的数组属性),实现机制实际上是在一个List里面查找得到的,参看这个属性的读写方法(GetFieldValues和SetFieldValues)的源代码即可得知怎么运作的。
 
zqw0117虽然没有直接回答,但至少给我指了一条路,所以这100分也理当奉上。

lps则是不求甚解,知其然而不知其所以然。
 
后退
顶部