2013-04-23 35 views
0

當我嘗試加載流到的ClientDataSet我得到以下異常:異常德爾福的TClientdataSet,TStringStream和TWideStringField

不匹配datapacket

ClientDataSet的有幾個WideStringfields,所以我嘗試它的編碼爲TStringStream.Create。如果我離開編碼,我得到一個例外:

類型不匹配字段XXZ;假設:TWideString,實際:字符串

下面是我的代碼:

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

我想如果你改變字段佈局,你將無法讀回來,因爲數據格式改變了。您不需要解碼流:TWideString是內部的。 – 2013-04-23 14:29:48

回答

0

問題是從ClientDataSet錯誤/舊模板。
要創建一個新的模板:

  1. 進入的designMode並選擇ClientDataSet
  2. 右鍵單擊和「創建數據集」。
  3. 選擇'Save to MyBase Xml UTF8 table ...'並保存新生成的xml。

使用新生成的Xml,字段被正確識別,並且@ArnaudBouchez已經提到過,不需要解碼流。