关于blob字段的合并问题!(高分求救300分呀。我的代码如下:。。。。。。)(300分)

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

xiao_wen

Unregistered / Unconfirmed
GUEST, unregistred user!
我主要想把表中的两个字段合并,并能通过olecontainer显示出来。
其中ole为olecontainer。
Procedure OleFldUnited(var oleFldname1,oleFldname2: String;dataTable : TAdoTable;Ole: TOleContainer);
var
OleStream1,OleStream2,TestStream: Tstream;
UnitedStream : TMemorystream;
begin
UnitedStream := TMemorystream.Create ;
OleStream1 := dataTable.CreateBlobStream(dataTable.fieldbyName(oleFldname1),bmRead);
OleStream2 := dataTable.CreateBlobStream(dataTable.fieldbyName(oleFldName2),bmRead);
UnitedStream.Position :=0;
UnitedStream.CopyFrom(OleStream1,OleStream1.size);
UnitedStream.Position := UnitedStream.Size ;
//Showmessage('Dialog1: '+inttostr(UnitedStream.size));
UnitedStream.CopyFrom(oleStream2,oleStream2.size);
//Showmessage('Dialog2: '+inttostr(UnitedStream.size));
Ole.LoadFromStream(UnitedStream);
Ole.DoVerb(OvShow);
OleStream1.free;
OleStream2.free;
UnitedStream.Free ;
end;

代码都能通过编译通过,只是ole调用出来的却是第一olefldname1的内容。为什么呀。难道是word的
结束标记导致的吗? 还是stream也有结束标记而导致不能合并呀??? 希望各位高手赐教。
同时更请斑竹也帮我一个忙。
 
怎么没有大虾回答呀。请斑竹g622, hubdog 帮忙呀。

其实也不是没有解决办法,只是觉得方法太傻了。
具体的办法是:可以先把通过olecontainer把字段调出,在把olecontainer的内容savedocument
到临时的文件中记为:如olefldname1的内容可以通过olecontainer 存为temp1.doc,olefldname2的
内容存为temp2.doc然后通过wordapplication和worddocument把两个文档文件合并到一篇文档中
然后再在olecontainer显示出来,也可以存为另一个合并的字段中了。从而达到要求,这样做主要是
效率太低。所以特恳请各位高手帮忙解决了。(最好能通过流的方式进行合并。)


 
恐怕只有这样了!因为对doc文档结构不熟悉!对doc文档结构熟悉除外!
 
[:D] 同意dcsdcs
 
非常非常关注!!!帮你提前
我也有类似问题需要解决,问题都提了半个月了还是没有完全解决。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=933700
有没有人会阿。
 
> UnitedStream.Position :=***
我觉得这些语句全部不要,没有起任何作用。
(程序应该没有什么问题)

doc文件的格式不清楚的话,随意的合并两个文件当然不能使内容相加。就像两个exe文拷
贝到一起,运行时只能运行第一个程序。所以合并必需通过word。
 
OLE字段带有OLE头信息,所以直接合并2个OLE字段是不正确的,除非
你把第2个OLE字段的头信息去掉。
 
to all:多谢大家的回答!
to:远帆
我主要是通过流的方式想把两个流合并起来。文件的合并我当然知道!
“ > UnitedStream.Position :=***”是定位流插入的位置。
to zyyzj:
你说的有道理,可我不知道blob字段还有头信息,如果有该如何去掉头信息呀?
恳请大虾帮忙!谢了先!
 
关键在于一开始数据库中流的读入方式,如果是直接从word文件读入,那么合并后不会有一点效果的。
如果读入是通过运行Word后,通过剪贴或其他如OLE方式读入的。流的合并还有可能。

问题并不是你的合并程序不正确而是你的流是带文件头部分的还是不带文件头部分的。
建议重新做读文件的程序,可以这样一试。用WordApplication打开文档后用全选,复制的方式读出
所有内容,然后从剪贴板读入Blob字段中。再合并试一下。

 
程序是写对的,只是有一个地方有误,就是
其实两个字段内容都是相对独立的文件,都有自己的文件头及文件尾,所以这样合并是不行的
首先要把第一个字段的文件尾内容去掉,以及第二个字段的文件头去掉,但是,对DOC文件不熟
只能提建议,不能解决,不好意思!
 
天真说的对,那有你这样合并文件的?除非是纯文本还差不多,可以尝试使用两个OLEContainer
分别载入流,再通过其它手段进行合并,比如剪贴板之类的
 
>UnitedStream.Position :=***
我当然知道这条语句是干什么用的,只是你的程序运行到这些语句时指针已经指向了你设定
的位置上,所以它们是不需要的.

天真和DragonPC_???的意思和我差不多,并不是说你的程序有什么问题,而是doc文件根本就
不可能如此如并!
 
To 远帆:
首先,谢谢你的回答。
现在这样来问你吧。如果给你两个blob字段如何把起内容合并到一个字段中??
我的方法是通过stream和word两种方式,但stream却合并不了,而word格式合并效率
又太低! 所以希望能解决stream合并。而stream的方式好象不行!所以请教各位高手了。
to zyyzj:
你说的有道理,可我不知道blob字段还有头信息和尾信息,如果有该如何去掉呀?
恳请大虾帮忙!谢了先!
 
stream方式合并肯定不行﹐你死了這條心吧。
如果你要快﹐就把word文件格式破了﹐這樣你想干什么就干什么

blob字段沒有头信息和尾信息
 
你可以自已试试.
把UnitedStream存为文件,它就是两个文件合并出来的.
blob没有头,尾信息.


合并doc不成功并不是由于你合并得不对,而是doc文件不能如此合并
(一个text文件是没有文件头信息的,可以采用它个方法合并,doc文件非常复杂就不能这样
了.懂doc文档的只有微软自已,而且微软说过,用非word生成doc文件也是侵权.)
 
这个问题提了多次了,都是ms惹的祸
 
后退
顶部