数据库Blob字段存取到word的方法!(50分)

  • 主题发起人 主题发起人 biggo
  • 开始时间 开始时间
B

biggo

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!][:(!]
我的任务很简单,就是把数据库和word联系起来,在word中间编辑文件,
然后在关闭的时候保存到数据库中间去。
现在我遇到的问题是必须使用一个临时文件在中间作缓冲,打开word的时
候先把blob字段的类容保存到文件中去,然后用word的open打开该文件。在关
闭文档的时候,把word类容保存到文件,然后再把文件保存到Blob字段中间。
整个过程相当麻烦,有没有什么简单的方法直接输出Blob的内容到word,
反过来也能直接把word的内容输入到Blob字段?
 
使用流,streams
可以查找一下
 
使用流,我也想到,数据库的blob字段存取流是没有问题的,
但是word中间我就搞不清楚怎么存取流了!找不到存取流的方法!
 
用个看不见的OleContainer,或动态创建的。

然后通过LoadFromStream,SaveToStream和Copy ,Paste.
 
wk_knife的方法可以实现。
 
对于数据库的blob字段,如果你用bde/edbi的话,用TBlobStream,如果你用Ado,就用TAdoBlobStream
createoleobject('word.application');
 
var
oleDY:TMemoryStream; //取出数据库中的WORD 文件
begin
oleDY := TMemoryStream.Create;
oledy.Clear;
(ADOQ_HTGL.FieldByName('URL') as TBlobField).SaveToStream(oleDY);
if oledy.size>0 then
begin
oleDY.Position := 0;
OLE.LoadFromSTREAM(oleDY);
ole.DoVerb(1);
End ELSE begin
ole.CreateObject('word.basic',false);
ole.AutoVerbMenu:=false;
ole.DoVerb(ovShow);
end;
end;


procedure TFrm_ht.saveasClick(Sender: TObject);
Var
OleStream : TMemoryStream;
begin
OleStream := TMemoryStream.Create; //save to Image字段
try
if Adoq_htgl.State<>dsedit then
Adoq_htgl.Edit ;
olestream.Clear ;
ole.SaveToStream(OleStream);
OleStream.Position := 0; //回零点
ADOQ_HTGL.edit;
(ADOQ_HTGL.FieldByName('url') as TBlobField).LoadFromStream(OleStream);
ADOQ_HTGL.Post ;
finally
OleStream.Free;
end;
end;
 
to tokey:
ole.SaveToStream(OleStream)中 Ole是如何声明?
我现在也遇到这个问题,请给源程序加上注释!谢谢
 
后退
顶部