【问题标题】:Exception Delphi TClientDataSet, TStringStream and TWideStringFieldDelphi TClientDataSet、TStringStream 和 TWideStringField 异常
【发布时间】:2013-04-23 13:33:46
【问题描述】:

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

数据包不匹配

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

字段 XXZ 的类型不匹配;假定:TWideString,实际: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 之前,它运行良好。 谁能告诉我如何读取文件?

【问题讨论】:

  • 我想如果您更改字段布局,您将无法将其读回,因为数据格式已更改。您不需要解码流:TWideString 是内部的。

标签: delphi unicode delphi-xe2 stringstream tclientdataset


【解决方案1】:

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

  1. 进入设计模式并选择ClientDataSet
  2. 右键单击并“创建数据集”。
  3. 选择“保存到 MyBase Xml UTF8 表...”并保存新生成的 xml。

使用新生成的 Xml 可以正确识别字段,正如 @ArnaudBouchez 已经提到的,无需解码流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多