起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: Jsun2007

报错**

[复制链接]
发表于 2008-3-28 16:00:51 | 显示全部楼层
procedure TMainForm.Button3Click(Sender: TObject);
VAR
NS: TMemoryStream;
begin
   NS := TMemoryStream.Create;
         DataSetBZSJJ1.open;
         TBlobField(DataSetBZSJJ1.FieldbyName('FILES')).SaveToStream(NS);
         ns.position := 0;
           OleContainer1.LoadFromStream(NS);
   end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-28 16:21:37 | 显示全部楼层
加了 ns.position := 0;
代码后是不会报错了,可运行后在OleContainer1控件上看不到word文档啊
回复 支持 反对

使用道具 举报

发表于 2008-3-28 16:25:40 | 显示全部楼层
procedure TMainForm.Button3Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,False);  //直接装入文件到Ole控件中
end;

引用 http://bbs.justep.com/forum.php?mod=viewthread&tid=9163
OLE包容器控件可以嵌入或者链接OLE服务器文档对象,实际上OLE包容器控件本身包含一个复合文档,嵌入 或者链接得OLE服务器文档对象,嵌入或者链接到复合文档中
1、  如果要处理OLE对象得原始文档文件,例如WORD,EXCEL等,应该使用以下方法:
  CreateLinktofile
  CreateObjectFormfile
  SaveAsDocument
2、而
   LoadFromFile
   LoadFromStream
   SaveToFile
   SaveToStream
   等方法处理得是OLE包容器控件中得复合文档,可用于包容器控件的整体装载和保存,但不是处理OLE对象的 原始文件
3、如果二进制流字段的表现属性设置为二进制,则存放的就是流文件,无法用LoadFromStream,SaveToStream 获得文件的类型
4、导入文件和导出最好自己用DIALOG那组控件自行处理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-28 16:27:14 | 显示全部楼层
文档存入数据库的代码如下:
procedure TMainForm.Button1Click(Sender: TObject);
var
NS: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
NS:=TMemoryStream.Create;
OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,false);
OleContainer1.SaveToStream(NS);
DataSetBZSJJ1.open;
DataSetBZSJJ1.Append;
TBlobField(DataSetBZSJJ1.FieldbyName('FILES')).LoadFromStream(NS);
DataSetBZSJJ1.FieldbyName('F_ID').asstring :=OpenDialog1.FileName;
DataSetBZSJJ1.Post;
DataSetBZSJJ1.ApplyUpdates;
NS.Free;
end;

end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-28 16:29:29 | 显示全部楼层
回复13楼:
  我必须要下从数据里读取word,所以要先把文档存入数据库在从数据库里读取,所以
  OleContainer1.CreateObjectFromFile(OpenDialog1.FileName,False);  //直接装入文件到Ole控件中
  这种方式不行
回复 支持 反对

使用道具 举报

发表于 2008-3-28 16:44:47 | 显示全部楼层
可以先保存到本地再打开

       TBlobField(DataSetBroker1.DataSet.FieldByName('WB')).SaveToFile(文件名);
       OleContainer1.CreateObjectFromFile(文件名,False);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-28 16:48:28 | 显示全部楼层
保存到本地打开的文件是乱码是不是ns.position 给的不够
回复 支持 反对

使用道具 举报

发表于 2008-3-28 23:52:02 | 显示全部楼层
用OleContainer1保存到本地文件后,文件内容会有些变化(OleContainer本身的一种机制),所以不能直接打开文件,必须还用OleContainer1来打开,具体你看
http://bbs.justep.com/forum.php?mod=viewthread&tid=22230
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-29 23:55:10 | 显示全部楼层
这样写代码:
   TBlobField(DataSetBroker1.DataSet.FieldByName('WB')).SaveToFile(文件名);
       OleContainer1.CreateObjectFromFile(文件名,False);
功能运行后在OleContainer1看不到word文档的内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-30 00:00:30 | 显示全部楼层
可以打开了,但是olecontainer1显示的文档没有滚动条,怎么控制这些属性呢
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 18:52 , Processed in 0.042433 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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