需求源頭:
OleContainer操作Excel,想把Excel以二進制方式存入資料庫,并且以二進制方式讀取
存入流:
Procedure SaveToStream(ADOTable1: TAdoTable)
var
vStream: TMemoryStream;
begin
try
try
vStream := TMemoryStream.Create;
vStream.Clear;
OleContainer1.SaveToStream(vStream);
vStream.Position := 0;
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName("BlobField")).LoadFromStream(vStream);
ADOTable1.Post;
finally
FreeAndNil(vStream);
end;
except
exit;
end;
end;
讀取流:
procedure LoadFromStream(ADOTable1: TAdoTable)
//注意:這裡要用TADOBlobStream,如果用TMemoryStream等流類,則會出現錯誤
//OleContainer的二進制流格式和Access的二進制流格式不同
//TADOBlobStream是專門用來Access的流轉化的,TADOBlobStream繼承自TMemoryStream
vStream: TADOBlobStream;
try
vStream := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName("BlobField")), bmread);
if (OleContainer1.State = osOpen) or (OleContainer1.State = osUIActive) then
begin
OleContainer1.DestroyObject;
end;
Olecontainer1.LoadFromStream(vStream);
問題總結:
注意流格式的問題。