What's the best way to store a Delphi set in a dataset?

前端 未结 3 423
醉话见心
醉话见心 2021-02-06 12:29

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 enumerat

3条回答
  •  囚心锁ツ
    2021-02-06 12:52

    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;
    

提交回复
热议问题