例外Delphi TClientDataSet,TStringStream和TWideStringField

时间:2013-04-23 13:33:46

标签: delphi unicode delphi-xe2 stringstream tclientdataset

当我尝试将Stream加载到ClientDataSet时,我得到以下异常:

  

datapacket不匹配

ClientDataSet有几个WideStringfields,所以我尝试使用TStringStream.Create中的编码。如果我离开编码,我会得到一个例外:

  

字段XXZ的类型不匹配;假设:TWideString,actual:String

以下是我的代码:

  importStream := TMemoryStream.Create;
  zipImport.ExtractToStream(importName, importStream);
  importStream.Position := 0;

  data := TStringList.Create;
  data.LoadFromStream(importStream);

  importStream.Free;

  Encoding := TEncoding.Unicode;
  ccpStream := TStringStream.Create(Format(FTemplate.Text, [data.Text]), Encoding);

  try
    try

      cdsCCP_Head.LoadFromStream(ccpStream);
...

在我将ClientDataSet转换为TWideStringField之前,它完美无缺。 任何人都可以告诉我我能做些什么来阅读文件?

1 个答案:

答案 0 :(得分:0)

问题是来自ClientDataSet的错误/旧模板 要创建新模板:

  1. 转到Designmode并选择ClientDataSet
  2. 右键单击并“创建数据集”。
  3. 选择“保存到MyBase Xml UTF8表...”并保存新生成的xml。
  4. 使用新生成的Xml可以正确识别字段,并且已经提到过@ArnaudBouchez,无需解码流。