标题几乎说明了一切。我使用 TClientDataset 来存储对象数组,其中一个对象具有定义为枚举类型集合的成员。据我了解,Delphi 集是位字段,其大小可以在 1 到 32 字节之间变化,具体取决于它们包含的数据量,并且 Delphi 没有定义 TSetField。我应该使用什么类型的字段来加载这个值?
最佳答案
您可以使用 TBytesField 或 TBlobField
ClientDataSet1MySet:TBytesField,大小=32
var
MySet: set of Byte;
Bytes: array of Byte;
begin
MySet := [1, 2, 4, 8, 16];
// Write
Assert(ClientDataSet1MySet.DataSize >= SizeOf(MySet), 'Data field is too small');
SetLength(Bytes, ClientDataSet1MySet.DataSize);
Move(MySet, Bytes[0], SizeOf(MySet));
ClientDataSet1.Edit;
ClientDataSet1MySet.SetData(@Bytes[0]);
ClientDataSet1.Post;
// Read
SetLength(Bytes, ClientDataSet1MySet.DataSize);
if ClientDataSet1MySet.GetData(@Bytes[0]) then
Move(Bytes[0], MySet, SizeOf(MySet))
else
MySet := []; // NULL
end;
关于delphi - 在数据集中存储 Delphi 集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/347592/