2011-01-20 58 views
1

我在kbmMemTable中使用blob字段來存儲我從TComponent開發的自定義組件,並且我使用TReader的讀寫組件流方法來讀取和寫入組件到blob領域。 kbmMemTable中的數據最終存儲在由GpStructuredStorage創建的結構化存儲文件中。Delphi Streaming Problem

直到我將我的組件(連同kbmMemtable)一起移動到新應用程序並試圖讓新應用程序讀取blob字段爲止,此工作完美無瑕。起初,我收到組件命名錯誤(組件名稱已存在),但後來當TReader嘗試讀取組件的TPersistent屬性時,我開始出現訪問衝突。

據我所知,我沒有改變與問候我從gpStructuredStorage文件retrive的kbmMemTable數據的方式和我讀的組件使用TReader BLOB字段回來的路上什麼。我沒有改變組件,並且我似乎沒有任何問題與其他組件存儲在同一個表中的其他blob字段中(至少在讀取它們時沒有發現任何錯誤背部)。

我對這可能是什麼問題感到不滿。任何幫助/建議將不勝感激。我正在使用Delphi 2007.

+0

如何格式化您的問題,使其不是文本牆?我不想試圖用這種形式閱讀它。 – 2011-01-20 19:18:33

+0

嘗試在兩個應用程序中再現您的問題,方法是將您的TPersistent寫入.dfm文件,然後再讀取該.dfm文件。然後將問題簡化爲最簡單的將重現的TPersistent。然後用示例代碼重新提出您的問題。 – 2011-01-20 20:12:16

回答

0

這只是一個猜測,但它聽起來像新應用程序中的組件類定義與流式傳輸的組件不匹配。

1

另一種猜測。你的組件名稱與其他/不同的組件相沖突。爲了解決這個問題,總是經過其他口渴黨的人讓你單位(S): 例如:

from: SysUtils, YourUnitClass, Classes; 
to: SysUtils, Classes, YourUnitClass; 

,並確保註冊您的組件

initialization 
    RegisterClasses([TYourComponentClass]); 

finalization 
    UnRegisterClasses([TYourComponentClass]); 

對韓國人的運氣

0

我終於想通了解導致流式傳輸問題的原因 - 儘管我不確定爲什麼可能有人會對此問題提出疑問。我決定檢查問題是否可能是由我正在使用的一些新的第三方組件引起的,當我禁用皮膚組件(這將會改進我的新應用程序!)時,它應該有。通過禁用我的意思是我沒有將它從程序中刪除,我只是這樣做,以便壓縮的皮膚不再用於繪製窗口和控件。