Delphi中TArrayField使用示例请求:存储可变长度整数数组
使用TArrayField在TFDMemTable中存储可变长度整数数组示例
1. 引用必要单元
确保项目中引用以下FireDAC和数据相关单元:
uses System.SysUtils, System.Types, System.Classes, Data.DB, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
2. 创建TFDMemTable与TArrayField
动态创建TFDMemTable,并添加TArrayField用于存储整数数组,指定元素类型为整数:
var FDMemTable: TFDMemTable; IntArrayField: TArrayField; begin FDMemTable := TFDMemTable.Create(nil); try // 创建数组字段 IntArrayField := TArrayField.Create(FDMemTable); IntArrayField.FieldName := 'IntegerArray'; IntArrayField.DataType := ftArray; // 指定数组元素为整数类型 IntArrayField.ArrayElementType := ftInteger; // 构建表结构 FDMemTable.FieldDefs.Add(IntArrayField.FieldName, IntArrayField.DataType); FDMemTable.CreateDataSet;
3. 写入可变长度整数数组
通过Append/Post操作,向表中写入不同长度的整数数组:
// 写入长度为3的数组 FDMemTable.Append; TArrayField(FDMemTable.FieldByName('IntegerArray')).SetArray([10, 20, 30]); FDMemTable.Post; // 写入长度为5的数组 FDMemTable.Append; TArrayField(FDMemTable.FieldByName('IntegerArray')).SetArray([1, 2, 3, 4, 5]); FDMemTable.Post; // 写入空数组 FDMemTable.Append; TArrayField(FDMemTable.FieldByName('IntegerArray')).SetArray([]); FDMemTable.Post;
4. 读取存储的数组数据
遍历TFDMemTable,读取每条记录中的整数数组:
// 遍历读取数组 FDMemTable.First; while not FDMemTable.Eof do begin var Arr := TArrayField(FDMemTable.FieldByName('IntegerArray')).GetArray as TArray<Integer>; Writeln(Format('记录%d:数组长度%d,元素:', [FDMemTable.RecNo, Length(Arr)])); for var I := 0 to High(Arr) do Writeln(Format(' Arr[%d] = %d', [I, Arr[I]])); FDMemTable.Next; end; finally FDMemTable.Free; end; end;
关键说明
TArrayField的ArrayElementType必须与存储的数组元素类型匹配,此处ftInteger对应Delphi的Integer类型SetArray方法可直接传入动态数组TArray<Integer>完成赋值GetArray方法返回的Variant可直接转换为TArray<Integer>- 完全支持任意长度的整数数组,包括空数组
内容的提问来源于stack exchange,提问作者user3140961
相关产品推荐
相关产品推荐

