我大概看了一下,TOleContainer的LoadFromStream是让其中包含的OLE对象去从流中加载数据,而你的OLE对象是否可以读取Delphi TDataset的CreateBlobStream生成的流呢?应该不行吧,因为她能读的流是要符合一种规范的,至少要有12字节的头,这显然和TBlobStream生成的流是不同的(除非你数据库里面存的BLOB就是OLE对象SaveToStream生成的流)。因此马上就会产生stream read error的异常。你能说说你的目的吗?
解决方案 »
- 网易BLOG自动留言的问题
- Win2000出現日期自動跳的問題,請各位幫忙解答
- 200分高分求解翻译以下VBA代码
- 如何让unit1中的函数访问project1文件中的全局变量?
- 有没有界面类似EXCEL的DBGird控件?
- 还是Twebbrowser问题,高手入!
- 如何取TstringGrid的边框(border)的宽度啊?
- 关于二次查询
- 我安装的D6伴侣CD里面的ABC & LMD-Tools V5.0 SE 控件为什么老找不到abctabf.dcu,而且在硬盘上找不到这个文件。
- 如何隐藏memo的光标?
- 怎样判断Image的picture属性为空??
- 用Delphi做前端开发Oracle数据库,有没有好的参考书?
try
tab_ht_mb.Edit; //tab_ht_mb为TTable控件
Stream.Seek(0, soFromBeginning);
MyFile.Seek(0,soFromBeginning);//新增的
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
try
l_Stream:=tab_ht_mb.CreateBlobStream(tab_ht_mb.fieldbyname('TEXT') asTBlobField,bmRead);
//tab_ht_mb为TTable控件
l_Stream.Seek(0,soFromBeginning);//new line
l_ole.LoadFromStream(l_Stream) (此句产生'Stream read error'错误)
//l_ole为ToleContainer控件
except
end;
l_Stream.Free;
其实你上面的语句可以改成不使用中间临时文件的方法。TOleContainer有一个方法SaveToStream和LoadFromStream.
我用BCB实现的代码如下:
TBlobStream * pData=(TBlobStream *)pQuery->CreateBlobStream(pQuery->FieldByName("Text"),bmWrite);
pData->Seek(0,soFromBeginning);
ocDocument->SaveToStream(pData);
pQuery->Post();
然后装载时:
TBlobStream * pData;
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Text");
pData=new TBlobStream(pField,bmRead);
pData->Seek(0,soFromBeginning);
ocDocument->LoadFromStream(pData);
delete pData;