如何從ACCESS資料庫中讀取圖形(續)

來源:互聯網
上載者:User
access|資料|資料庫|圖形 注意的是你也可以從一個檔案中建立一個位元影像對象,但使用這樣
的方式儲存在資料庫中的圖形格式是瀏覽器不能夠識別的。
當你往資料庫中儲存圖象時,你應該知道你需要使用什麼格式來儲存
你可以把檔案中的每一個位元組儲存下來,或則通過ACCESS/Foxpro的把圖形儲存
為一個OLE格式。
你使用什麼格式儲存圖象決定了你在ASP中用什麼格式來讀出圖形來。
具體來說,如果你在ACCESS/FoxPro中將圖形儲存為bmp,gif,jpeg(
這個必須要使用到ACCESS/FoxPro的OLE對象,即使用ACCESS的插入對象
對話方塊來完成),這是當你使用
image/bmp時瀏覽器是不能夠解釋的。

現在假設在資料庫中儲存的是你所想要的圖形格式
(GIF, JPEG, BMP, TIFF, 等等等等)現在來看看要怎麼把它們從
資料庫中讀出來。

在ACCESS中使用了兩個關鍵的技術來儲存圖形
1。使用了bmp格式
2。78個位元組的檔案頭

<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = "image/bmp"
%>
接著你要乾的就是去掉那78個位元組的OLE對象的檔案頭。
<%
Const OLEHEADERSIZE = 78
nFieldSize = rs("photo").ActualSize
oleHeader = rs("photo").GetChunk(OLEHEADERSIZE)
imageBytes = rs("photo").GetChunk(nFieldSize - OLEHEADERSIZE)
Response.BinaryWrite imageBytes
%>

現在舉一個例子:
如果你要得到一個職工的資訊,這段資訊包括一個介紹和他的圖象。
並且要同時顯示文字和圖形。
代碼如下:(其中的theImg是一個代理頁面)
theImg.asp
<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = Session("ImageType")
response.BinaryWrite Session("ImageBytes")
Session("ImageType") = ""
Session("ImageBytes") = ""
response.End
%>


Function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
select case contentType
case "gif", "jpeg", "bmp"
contentType = "image/" & contentType
bytes = field.value
case "ole"
contentType = "image/bmp"
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
end select
Session("imageBytes") = bytes
Session("imageType") = contentType
End Function
'注意的是,程式中只使用了4中格式:gif, jpeg, bmp , ole .

<%
sql = "select * from Employees"
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.CursorLocation = 3
oRS.Open sql, "DSN=NW"
SetImageForDisplay oRS("photo"), "ole"
Set oRS.ActiveConnection = Nothing
%>

要顯示圖象的話,只需要在另外一個asp中,假設為getEmpInfo.asp中
<img src="theImg.asp"</img>
但這還有一個問題,因為對每個職工的圖形都使用了同一個"theImg.asp"
檔案,應該再小小修改一下:
<img src="theImg.asp?temp=<%= Request.Form("empLastName")%>"</img>

最後再說一點,如何顯示多幅圖象呢?
也就是說如果資料庫中有多個欄位都儲存了圖形,怎麼辦?
其實解決辦法很簡單,只要給SetImageForDisplay多加一個參數
就是用來儲存圖形的一個session變數。
例如:
SetImageForDisplay oRS1("photo"), "ole", "empPhoto"
SetImageForDisplay oRS2("logo"), "gif", "compLogo"

<img src="theImg2.asp?varName=empPhoto&temp=<%= Request.Form("empLastName")%>">
<img src="theImg2.asp?varName=compLogo&temp=<%= Request.Form("imgCode")%>">

使用這個方法能夠完成下面的功能:
1。能夠從資料庫中取出圖形欄位。(你唯一需要知道的是資料庫中的圖形是什麼格式
bmp?gif?jpeg?ole?)
2.採用session變數 來儲存圖形的位元組數和content type
asp需要這些資訊來連接到<IMG>中的屬性
3。只要把theImg放到你想顯示圖形的地方,就能夠顯示圖象了。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。