如何在Delphi中对Access的OLE对象字段进行更新?(50分)

  • 主题发起人 主题发起人 hegyi
  • 开始时间 开始时间
H

hegyi

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表中,有一个OLE对象字段,在插入一条记录时,需要将一个Word文档插入到这个OLE对象字段中,不知道怎么办好。
我的理解是,OLE对象字段应该存的是二进制数据,就像SQL Server中的Image字段一样,于是我将文档中的数据读到一个Buffer:array of Char中,希望用Insert语句写入数据库:
with adoQuery do
begin
close;
sql.clear;
sql.text='insert 表 (Ole字段) values (:p0)';
parameters[0].datatype=ftstring;////这里对吗?
parameters[0].size:=length(buff);
//因为DOC中的数据可能有字串结束码#0,因此,文档中的数据不能按字串来处理。
parameters[0].value=buffer?///这里应该怎么赋值呢?
exesql;
end;

不用这种方法,还有别的方法来更新数据库吗?
 
从库中读入word文档
function Load2: boolean;
var
Blob: TStream;
begin
result := True;
if query.FieldByName('Content').IsNull then
begin
result := False;
exit;
end;
Blob := TMemoryStream.Create;
try
TBlobField(query.FieldByName('Content')).SaveToStream(Blob);
Blob.Seek(0, soFromBeginning);
if Blob.Size = 0 then
begin
result := False;
Exit;
end;
olecontainer2.LoadFromStream(Blob);
finally
Blob.Free;
end;
end;

保存word
procedure TFrmEdit.Save;
var
MemoStream: TMemoryStream;
Blob: TStream;
begin
MemoStream := TMemoryStream.Create;
try
olecontainer1.SaveToStream(MemoStream);
MemoStream.Seek(0,soFromBeginning);
query.Edit;
Blob := query.CreateBlobStream(query.FieldByName('Content'),bmWrite);
try
Blob.Seek(0,soFromBeginning);
Blob.CopyFrom(MemoStream,MemoStream.Size);

finally
Blob.Free;
end;
query.Post;
finally
MemoStream.Free;

end;
end;
 
to 无欲则刚
你好
我在按你的方法做时出现错误:
if fieldByName('DOC').IsNull then exit;
strm:=Tstream.Create;
try
TblobField(fieldByName('DOC')).SaveToStream(strm); //这一句错误:Abstract error
strm.Seek(0,soFromBeginning);
if strm.Size>0 then
oleDoc.LoadFromStream(strm);
finally
strm.Free;
end;
这是为什么? 数据库中的数据是我在Access中直接加进去的,应该没问题。
另外,我在Access中直接插入对象后,显示“Word文档”,而使用你告诉的方法读一个Word文件到Ole对象字段中,显示的“长二进制数据”,两者有什么不同吗?在读到OLeContainner中时要注意什么呢?
 
后退
顶部