數組字段(ftArray) 與 ADT 字段類似(設計過程一樣), 定義數組字段時只需定義一個元素來說明元素類型.
本例同時測試 ObjectVIEw 為 True 和 False 時的不同效果.
下面是在運行時實現的數組字段:
//先在窗體上放置: DBGrid1、DataSource1、ClIEntDataSet1 並關聯, 然後:
procedure TForm1.FormCreate(Sender: TObject);
begin
// ClientDataSet1.ObjectVIEw := True;
{ 先定義兩個基本字段 }
with ClientDataSet1.FieldDefs.AddFIEldDef do begin
Name := 'ID';
DataType := ftInteger;
end;
with ClientDataSet1.FieldDefs.AddFIEldDef do begin
Name := 'Group';
DataType := ftString;
Size := 7;
end;
{ 定義數組字段: 假如數組包括 4 個元素 }
with ClientDataSet1.FieldDefs.AddFIEldDef do begin
Name := 'Member';
DataType := ftArray;
Size := 4;
ChildDefs.Add('TempName', ftString, 11); { 只需定義一個子元素來說明元素類型 }
end;
ClIEntDataSet1.CreateDataSet;
{ 添加記錄 }
ClIEntDataSet1.AppendRecord([1, '一組', VarArrayOf(['A1','A2','A3','A4'])]);
{ 下面的添加方式也可用於訪問 }
ClIEntDataSet1.Append;
ClIEntDataSet1['ID'] := 2;
ClIEntDataSet1['Group'] := '二組';
TArrayField(ClientDataSet1.FIEldByName('Member'))[0] := 'B1';
TArrayField(ClientDataSet1.FIEldByName('Member'))[1] := 'B2';
TArrayField(ClientDataSet1.FieldByName('Member')).FIEldValues[2] := 'B3';
TArrayField(ClientDataSet1.FieldByName('Member')).FIEldValues[3] := 'B4';
ClIEntDataSet1.Post;
ClIEntDataSet1.Append;
ClIEntDataSet1['ID'] := 3;
ClIEntDataSet1['Group'] := '三組';
TArrayField(ClientDataSet1.FieldByName('Member')).FIElds[0].AsString := 'B1';
TArrayField(ClientDataSet1.FieldByName('Member')).FIElds[1].AsString := 'B2';
TArrayField(ClientDataSet1.FieldByName('Member')).FIElds[2].Value := 'B3';
TArrayField(ClientDataSet1.FieldByName('Member')).FIElds[3].Value := 'B4';
ClIEntDataSet1.Post;
end;
{ 可以通過下面代碼查看 ObjectVIEw 為 True 和 False 時的不同 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ClIEntDataSet1.Close;
ClientDataSet1.ObjectView := not ClientDataSet1.ObjectVIEw;
Text := Format('ObjectView: %s', [BoolToStr(ClientDataSet1.ObjectVIEw, True)]);
ClIEntDataSet1.Open;
end;