how to handle BLOB field with TADOBlobStream?

I heard that you should use ADOBlobStream instead of BlobStream to handle
the BLOB field if you use ADO to connect the DB.I try to load a olecontainer
with the blob field,but I failed.I know I could do this by using a temp file
,but why can't I load from the stream directly?

var
bs :TADOBlobStream;
begin

bs:=TADOBlobStream.Create(TBlobField(adotable1.fieldbyname('visio'),bmRead);
  showmessage(inttostr(bs.size)); //the size seems correct
  try
  OleContainer1.LoadFromStream(bs);//---show exception??invalid stream
format'
  finally
  bs.free;
  end;
end;