ClientDataSet的版本兼容性

ClientDataSet的版本兼容性

在Delphi的早期版本中,Data这个Variant类型的值内部使用的是AnsiString来存贮的字节流,但我并不确定Delphi从什么时候开始,将其改为了Byte数组类型,你可以通过VarType函数来检测它的类型。

1、将数据集的Data保存到MessagePack协议数据流或文件:

var
   AMsgPack:TQMsgPack;
begin
  AMsgPack:=TQMsgPack.Create;
  ...
  AMsgPack.AsVariant:=ClientDataSet1.Data;
  //保存到流AStream中
  AMsgPack.SaveToStream(AStream);
  //或保存到文件AFileName中
  AMsgPack.SaveToFile(AFileName);
  ...
  FreeAndNil(AMsgPack);
end;
 
2、从MessagePack协议数据流或文件中加载到数据集:
var
  AMsgPack:TQMsgPack;
begin
AMsgPack:=TQMsgPack.Create;
//从流AStream中加载
AMsgPack.LoadFromStream(AStream);
//或从文件AFileName中加载
AMsgPack.LoadFromFile(AFileName);
...
ClientDataSet1.Close;
ClientDataSet1.Data:=AMsgPack.AsVariant;
...
FreeAndNil(AMsgPack);
end;
 

对于早期的版本,我们需要做一个转换:

1、从AnsiString转换为TBytes,然后再赋给AMsgPack。

var
  S:AnsiString;
  ABytes:TBytes;
  ...
begin
...
//首先将Data赋给一个字符串对象
S:=ClientDataSet1.Data;
//复制到字节流中
SetLength(ABytes,Length(S));
Move(PAnsiChar(S)^,ABytes[0],Length(S));
//用AsBytes替换AsVariant
AMsgPack.AsBytes:=ABytes;
...
end;
 
2、加载时反过来将字节流反转成AnsiString
var
  S:AnsiString;
  ABytes:TBytes;
  ...
begin
...
//首先将Data赋给一个字符串对象
ABytes:=AMsgPack.AsBytes;
SetLength(S,Length(ABytes));
Move(ABytes[0],PAnsiChar(S)^,Length(ABytes));
//然后将字符串赋给Data就好了。
ClientDataSet1.Data:=S;...
end;
 

转载于:https://www.cnblogs.com/hnxxcxg/p/9399943.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Delphi中,DBGridEh是一个非常常用的数据表格控件,它可以用于显示和编辑数据库中的数据。而LookupDisplay是DBGridEh中的一个属性,用于提供表格中关联表字段的显示值。 通常情况下,DBGridEh的LookupDisplay属性用于显示关联字段的显示值,该值将从关联表中获取。在使用DBGridEh时,需要使用ClientDataSet组件来提供数据。ClientDataSet是一种内存数据集,可以在客户端应用程序中存储和处理数据。 要在DBGridEh中使用LookupDisplay属性,首先需要在ClientDataSet中定义关联字段。关联字段是指与主表的某个字段关联的从表的字段。在ClientDataSet的字段编辑器中,可以通过设置LookupDataset、LookupKeyFields和LookupResultField属性来定义关联字段。 LookupDataset属性用于指定从表所在的ClientDataSet组件,LookupKeyFields属性是用来指定主表与从表关联的字段名,LookupResultField属性则是用来指定从表中要显示的字段名。 然后,在DBGridEh的Columns属性中找到需要显示关联字段的列,将这些列的LookupDisplay属性设置为True。这样,DBGridEh将会自动从关联表中获取相应的显示值,并在表格中显示出来。 总的来说,使用Delphi中的DBGridEh和ClientDataSet组件,可以很方便地实现表格中两列的LookupDisplay功能,即从关联表中获取显示值并显示在表格中,提供更友好的用户界面和数据交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值