2011-01-20 61 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

我终于想通了解导致流式传输问题的原因 - 尽管我不确定为什么可能有人会对此问题提出疑问。我决定检查问题是否可能是由我正在使用的一些新的第三方组件引起的,当我禁用皮肤组件(这将会改进我的新应用程序!)时,它应该有。通过禁用我的意思是我没有将它从程序中删除,我只是这样做,以便压缩的皮肤不再用于绘制窗口和控件。