数据库中的OLE字段!!!!!!!!!!!!

Zhong 2000-02-15 04:38:00
我苦!
小弟在用Delphi数据库编程时,使用Access数据库引擎,当某一字段设为OLE对象时,在Access中能知道OLE对象类型,在Delphi中却不能,只显示成Blob字段,Why?
...全文
515 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gypb 2000-02-21
  • 打赏
  • 举报
回复
我的解答对你一点作用也没有吗,一分都不给,气死我了
Zhong 2000-02-21
  • 打赏
  • 举报
回复
有捆绑数据库OLE字段的控件也行啊。
Zhong 2000-02-18
  • 打赏
  • 举报
回复
gypb:
你的方法解决了一部分问题。其实我以前也尝试过,行倒是行。不过,当用上述方法写入数据后,再回到Access中,Access却又不能处理该字段了。咳,左右为难。
不过还是要谢谢的解答。分数嘛,目前还不能给你,因为…。不过,至少总会有你的一半。嘻… and :=)
Zhong 2000-02-18
  • 打赏
  • 举报
回复
gypb:
你的方法解决了一部分问题。其实我以前也尝试过,行倒是行。不过,当用上述方法写入数据后,再回到Access中,Access却又不能处理该字段了。咳,左右为难。
不过还是要谢谢的解答。嘻… and :=)
gypb 2000-02-18
  • 打赏
  • 举报
回复
另外:TDBOLEEDIT是公司内部资料,请原谅。(老总规定不应许外露)

当用LOADSFROMTREAM读人数据后,还要动太读入当前OLE对象支持的动作。具体从OLECONTAINER.ObjectVerbs[i]的到,在用DOVERB()调用。
用OleContainer1.ObjectPropertiesDialog可的知当前OLE对象的属性。
gypb 2000-02-18
  • 打赏
  • 举报
回复
另:你们有没有OICQ,我的是884977
gypb 2000-02-18
  • 打赏
  • 举报
回复
另外:什么时候给分呀?!!!
gypb 2000-02-18
  • 打赏
  • 举报
回复
先将含有OLE字段的记录删除,然后新增记录,这时再运行上述代码。
另要将OLECONTAINER1的OLDSTREAMFORMAT设为TRUE,COPYONSAVE设为TRUE。
造成你说的这种现象是因为:记录中已含有的OLE数据与当前OLECONTAINER格式并不相同。只有在OLE字段为空是用OLECONTAINER写入数据,下次才能正确读入数据。
Lin 2000-02-18
  • 打赏
  • 举报
回复
Zhong:
解决了以后告我一下,我也很想知道!
Zhong 2000-02-17
  • 打赏
  • 举报
回复
gypb:
小弟不才,按照你的方法又引起'Invalid stream format'错误,其实OLE字段已存有内容。能否将TDBOLEEdit给我一份?
先谢。 and :)
gypb 2000-02-17
  • 打赏
  • 举报
回复
那是因为你的那字段为空,程序中我是这样编写的
子函数为
function LoadFromField:boolean;
var
TempStream:TMemoryStream;
begin
// tempstream:=createblobstream(currentfield,bmread);
result:=true;
try
Olecontainer1.LoadFromStream(loadstream);
with OleContainer1 do
DoVerb(ovshow);
except
result:=false;
end;
end;
//loadstream 为table.createblobstream(field,bmread)函数返回的结果
主程序这样写
procedure execute;
begin
if not loadfromfield then
begin
Insert1Click(Sender);//读失败,就新增一个OLE对象。
with OleContainer1 do
if NewInserted then
DoVerb(PrimaryVerb);
end;

我的方法很好用,以上代码是我自编的OLE数据感知控件TDBOLEEdit中的一段代码,利用他想往数据库插什么就插什么。而且可以及时查看。就更tdbIMAGE一样。
Lin 2000-02-16
  • 打赏
  • 举报
回复
gypb:
你的方法好象是不行的。代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
try
(Table1.Fields[0] as TBlobField).SaveToStream(MS);
OleContainer1.LoadFromStream(MS);
finally
MS.Free;
end;
end;

当Button1 Click后,将出现‘Stream read error’错误提示。
Lin 2000-02-16
  • 打赏
  • 举报
回复
gypb,先让我试试。
gypb 2000-02-16
  • 打赏
  • 举报
回复
使用TOLECONTAINER可自动识别OLE文档。
ole字段其实是一个tBLOBSTREAM,可在一个FORM中放入ToleContainer,然后OLECONTAINER.LOADFROMESTREAM,修改完后用SAVETOSTREAM,如果是新建对象,用InsertObjectDialog,
Zhong 2000-02-15
  • 打赏
  • 举报
回复
但是我很想知道OLE字段究竟包含什么OLE文档(Word文档?图片?),以便调用相应的OLE服务程序。
Firing_Sky 2000-02-15
  • 打赏
  • 举报
回复
OLE对象归根结底还是一个Blob嘛!
wm 2000-02-15
  • 打赏
  • 举报
回复
大家都来看看这个问题呀!
wm 2000-02-15
  • 打赏
  • 举报
回复
热切盼望有人回答这个问题!

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧