重大问题!!!!(100分)

  • 主题发起人 主题发起人 xiaoren2000
  • 开始时间 开始时间
X

xiaoren2000

Unregistered / Unconfirmed
GUEST, unregistred user!
其实还是个老问题,就是关于调用word时,我的这段代码老师有问题,请高手指点:
代码如下:
var
str:tmemorystream;
begin
str:=tmemorystrean.create;
tblobfield(table.fieldbyname('blob') ).savetostream(str);
olecontainer1.loadfromstream(str);
str.free;
end;
就是这段代码,当然排错的语句我没写,运行这段代码总是出现stream read error!!
的问题,请高手指点
 
字段类型?
SQL Server中使用Image字段,不要使用其他的,如Text、Binary等。
 
这里你应该明白这两个问题:
1、Ole嵌入
2、Ole连接

对于嵌入式连接方式,对象被植入你的应用程序的窗口内部,这时,你要保存成文件
下次调用时,只能用Ole控件打开这个文件(比方Doc文件嵌入Ole里,编辑后保存,你用Word是
打不开你所保存的文件的)

对于连接的方式,连接的对象是在你的应用程序之外,调用相应的关联程序打开文件的。你可以
在被关联的应用程序里编辑和保存文件,这样被保存的文件,下次还可以用相应的关联程序打开

你以上的代码错误很可能是由于流的格式不对,而不能被Ole读取。
 
to jollier:
你说的有些道理,我也遇到过,但是你要是用ole.saveasdocument(),这个方法保存的文件,
word就能打开。但是如果你用流tmemorystream保存的文件,word就打不开。
就是我提问的问题里的那段代码,如果在加一句str.savetofile('c:/tmp.doc'),word就打不开了
不知你是否有解决方案???
 
to yzhshi:
我用的是access的ole字段,不只行不行????
怎么解决!!!
 
建议不要用类型ole字段,而用备注字段,它和word交换很方便
 
如果包含图片,公式也可以存吗????
不好意思,我刚学,我问的是不是很简单
?????access 有备注字段???
 
见信!
access 备注字段可以!
 
access 有备注字段 :memo
如果对性能要求不高的话可以利用temp文件
var
str:tmemorystream;
begin
str:=tmemorystrean.create;
tblobfield(table.fieldbyname('blob') ).savetostream(str);
str.savetofile
olecontainer1.loadfromfile;
str.free;
end;


 
to 小黄鱼,
str.savetofile('c:/tmp.doc');保存的tmp.doc 用word打不开!!!!!
怎么回事????
 
你的问题我试过可以解决,按我的思路没问题,你的系统要装Rxlib2.75.
 
xiaoren2000:
数据库中也要保存word文件
olecontainer1.savetofile存盘
然后读入数据库,这样一定可以

 
看你的代码中的意思的话,排除掉其它因素,就只是因为在
tblobfield(table.fieldbyname('blob') ).savetostream(str);
之后,str的当前位置已经在流的最后了,那么你调用
olecontainer1.loadfromstream(str);
时,是读不出流数据的,你可以这样:
在上面两句之单插入一句
str.Position :=0;
把str流的当前位置放在开始时。
 
TO:xiaoren2000
我的解决方案是Ole连接文件(不用嵌入方式),很好用的,真的。
 
to jollier:
用Ole连接文件也是可以的,但是一道试题就对应一个文件,那要是有几百个,怎么办。
 
怎么还没解决呢?
这样吧,你最好用rxrichiedt,可以代替word
我就用它,非常方便,你还是用它把,图文编辑,
 
多人接受答案了。
 
后退
顶部