[转载]OleContainer操作Excel以二进制方式读写数据库
<p>信息来源:<a id="ArticleTitle1_ArticleTitle1_AuthorLink" href="/user/shuaihj">shuaihj</a>Blog </p><p>需求源头:<br />OleContainer操作Excel,想把Excel以二进制方式存入数据库,并且以二进制方式读取<br />存入流:<br />Procedure SaveToStream(ADOTable1: TAdoTable)<br />var<br /> vStream: TMemoryStream;<br />begin<br />try<br /> try<br /> vStream := TMemoryStream.Create;<br /> vStream.Clear;<br /> OleContainer1.SaveToStream(vStream);<br /> vStream.Position := 0;<br /> ADOTable1.Append;<br /> TBlobField(ADOTable1.FieldByName("BlobField")).LoadFromStream(vStream);<br /> ADOTable1.Post; <br /> finally<br /> FreeAndNil(vStream);<br /> end;<br /> except<br /> exit;<br /> end;<br />end;<br />读取流:<br />procedure LoadFromStream(ADOTable1: TAdoTable)<br />var<br /> //注意:这里要用TADOBlobStream,如果用TMemoryStream等流类,则会出现错误 <br /> //OleContainer的二进制流格式和Access的二进制流格式不同<br /> //TADOBlobStream是专门用来Access的流转化的,TADOBlobStream继承自TMemoryStream<br /> vStream: TADOBlobStream;<br />begin<br /> try <br /> vStream := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName("BlobField")), bmread);<br /> if (OleContainer1.State = osOpen) or (OleContainer1.State = osUIActive) then<br /> begin<br /> OleContainer1.DestroyObject;<br /> end;<br /> vStream.Position := 0;<br /> Olecontainer1.LoadFromStream(vStream);<br /> except<br /> end;<br />end;<br />问题总结:<br />注意流格式的问题。<br />注:附件里有我的一个小工具,用来帮助自己平时操作Excel在Access中的读取。<a href="http://www.delphibbs.com/keylife/iblog_show.asp?xid=21941">[url]http://www.delphibbs.com/keylife/iblog_show.asp?xid=21941[/url]</a></p>页:
[1]
