在数据集中存储Delphi集合的最佳方式是什么? [英] What's the best way to store a Delphi set in a dataset?
本文介绍了在数据集中存储Delphi集合的最佳方式是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
解决方案
您可以使用TBytesField或TBlobField
ClientDataSet1MySet:TBytesField,Size = 32
var
MySet:set的字节
字节:字节数组;
begin
MySet:= [1,2,4,8,16];
//写
Assert(ClientDataSet1MySet.DataSize> = SizeOf(MySet),'数据字段太小');
SetLength(Bytes,ClientDataSet1MySet.DataSize);
Move(MySet,Bytes [0],SizeOf(MySet));
ClientDataSet1.Edit;
ClientDataSet1MySet.SetData(@Bytes [0]);
ClientDataSet1.Post;
//读取
SetLength(Bytes,ClientDataSet1MySet.DataSize);
如果ClientDataSet1MySet.GetData(@Bytes [0])then
Move(Bytes [0],MySet,SizeOf(MySet))
else
MySet:= []; // NULL
end;
The title pretty much says it all. I'm using a TClientDataset to store an array of objects, and one of the objects has a member defined as a set of an enumerated type. As I understand it, Delphi sets are bitfields whose size can vary from 1 to 32 bytes depending on how much data they contain, and Delphi doesn't define a TSetField. What sort of field should I use to load this value into?
解决方案
You could use a TBytesField or a TBlobField
ClientDataSet1MySet: TBytesField, Size=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集合的最佳方式是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文