起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 227|回复: 12

【结贴】关于上传ole附件的问题。

[复制链接]
发表于 2007-10-23 12:06:48 | 显示全部楼层 |阅读模式
做有附件的功能,希望通过button点击上传附件,然后通过ole表现形式,双击blob字段预览附件。
                                                                                                                                                                  
使用Tblobfield.LoadFromFile将附件上传了blob字段,数据字典中该字段的表现形式为ole,本希望能通过ole直接双击打开的,可字段中有数据后系统报“Invalid stream format”。
                                                                                 
有没有什么好办法啊?
回复

使用道具 举报

发表于 2007-10-23 13:23:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 14:25:40 | 显示全部楼层
OleContainer1.CreateObjectFromFile(afilename,false)能写在信息里么?
报“[错误]Biz:\MASTERMIND\CONTRACT\INFO\HTXX.Info.pas(35, 6): Undeclared identifier "OleContainer1"

在type里面加了OleContainer1: TOleContainer; 报“[错误]Biz:\MASTERMIND\CONTRACT\INFO\HTXX.Info.pas(18, 20): Undeclared identifier "TOleContainer"

不好意思,以前没用过OleContainer
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 14:34:15 | 显示全部楼层
还有语句我看了下,有部分不太懂是干嘛的,能告诉我么?
          olecontainer1.CreateObjectFromFile(FileName,true);   //从FileName创建对象。
          olecontainer1.DoVerb(ovPrimary);                               //什么意思?
          sm   :=   tstringstream.create('');                                   //给sm赋值为一个流
          olecontainer1.savetostream(sm);                                 //将刚才的对象保存到sm这个流中。
          with   dm.qryTemp   do                                                //什么意思?

  TBlobFIELD(Fieldbyname('data')).LoadFromStream(sm);   //将sm这个流的内容保存到数据库data字段中。
回复 支持 反对

使用道具 举报

发表于 2007-10-23 14:52:42 | 显示全部楼层
楼主自己看看delphi的帮助。上述代码不能一一解答。
我2楼的意思是,您用ole模式载入文档,回显就不会报“Invalid stream format”。
直接上传,就不能正常载入ole了
回复 支持 反对

使用道具 举报

发表于 2007-10-23 14:55:57 | 显示全部楼层
在 use 上加上 Business.Forms

能写到信息上,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 16:33:54 | 显示全部楼层
开始使用的是这种语句
var
   IOle: TOleContainer;
   SM:TStringStream;
   begin
     IOle:=TOleContainer.Create(self);
     IOle.CreateObjectFromFile(afilename,true);
     SM:=TStringStream.create('');
     IOle.SaveToStream(SM);
运行的时候说IOle没有指定父类,于是加了个IOle.Parent:=Self;变成这样
var
   IOle: TOleContainer;
   SM:TStringStream;
   begin
     IOle:=TOleContainer.Create(self);
     IOle.Parent:=Self;
     IOle.CreateObjectFromFile(afilename,true);
     SM:=TStringStream.create('');
     IOle.SaveToStream(SM);
结果现在报错“[错误]Biz:\MASTERMIND\CONTRACT\INFO\HTXX.Info.pas(37, 19): 不能隐式转换 "THTXX" 成为 "TWinControl"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 16:36:18 | 显示全部楼层
最初由 lixy 发布
[B]楼主自己看看delphi的帮助。上述代码不能一一解答。
我2楼的意思是,您用ole模式载入文档,回显就不会报“Invalid stream format”。
直接上传,就不能正常载入ole了 [/B]


那上传的文件可以用ole方式双击打开么?
回复 支持 反对

使用道具 举报

发表于 2007-10-24 09:22:07 | 显示全部楼层
只要在操作系统中通过双击可以打开相应类型的文件,就可以在olecontainer中通过双击打开
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-24 09:46:21 | 显示全部楼层
开始使用的是这种语句
var
   IOle: TOleContainer;
   SM:TStringStream;
   begin
     IOle:=TOleContainer.Create(self);
     IOle.CreateObjectFromFile(afilename,true);
     SM:=TStringStream.create('');
     IOle.SaveToStream(SM);
运行的时候说IOle没有指定父类,于是加了个IOle.Parent:=Self;变成这样
var
   IOle: TOleContainer;
   SM:TStringStream;
   begin
     IOle:=TOleContainer.Create(self);
     IOle.Parent:=Self;
     IOle.CreateObjectFromFile(afilename,true);
     SM:=TStringStream.create('');
     IOle.SaveToStream(SM);
结果现在报错“[错误]Biz:\MASTERMIND\CONTRACT\INFO\HTXX.Info.pas(37, 19): 不能隐式转换 "THTXX" 成为 "TWinControl"
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 06:54 , Processed in 0.040957 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表