|

楼主 |
发表于 2010-1-25 11:33:43
|
显示全部楼层
没有第三方控件,就是用X3自带的olecontainer。
两段关键代码
procedure TCT_BZGFH_BZXXWH.SaveToField(AField:TDataField;AOle:TOleContainer);
var
lStream: TMemoryStream;
begin
lStream := TMemoryStream.Create;
try
AOle.AllowInPlace := True;
AOle.SaveToStream(lStream);
//AOle.SaveToFile('c:\savetmp.doc');
if not AField.DataSet.Active then AField.DataSet.Open;
AField.DataSet.Edit;
TBlobField(AField).LoadFromStream(lStream);
//TBlobField(AField).LoadFromFile('c:\savetmp.doc');
AField.DataSet.Post;
finally
lStream.Free;
end;
end;
把ole的流存入数据库
procedure TCT_BZGFH_BZXXWH.ReadFromField(AField:TDataField;AOle:TOleContainer);
var
lStream: TMemoryStream;
begin
lStream := TMemoryStream.Create;
AOle.DestroyObject;
try
AOle.AllowInPlace := True;
if not AField.DataSet.Active then AField.DataSet.Open;
//AField.DataSet.Edit;
//lStream := TMemoryStream(AField.DataSet.CreateBlobStream(AField,TBlobStreamMode.bmRead));
TBlobField(AField).SaveToFile('c:\loadtmp.doc');
//TBlobField(AField).SaveToStream(lStream);
//AOle.CleanupInstance;
lStream.Position := 0;
//AOle.CreateObjectFromFile('c:\loadtmp.doc',false);
AOle.LoadFromFile('c:\loadtmp.doc');
AOle.DoVerb(ovShow);
//AOle.LoadFromStream(lStream);
finally
lStream.Free;
end;
end;
读来自数据库的流
我是想在界面上显示客户上传的word文件。我在pagecontrol放了两个olecontainer,用户上传不同的word文件,存入数据库,显示的时候,就显示olecontainer里面。现在出现的问题是,如果数据库里有内容,显示的时候就会报1楼的错误。如果是上传文件的话,这两个olecontainer就显示正常。非常奇怪的问题,我总不能每次都让用户上传一下word文件吧。
另,上传的代码与olecontainer有关的:
lOle.CreateObjectFromFile(OpenDialog1.FileName,False);
lOle.DoVerb(ovShow); |
|