vb如何從Access中提取圖片??高手幫忙啊。。。。。。!!

  • 作者:由 匿名使用者 發表于 書法
  • 2021-10-31

vb如何從Access中提取圖片??高手幫忙啊。。。。。。!! 匿名使用者 1級 2008-08-30 回答

首先我們先來熟悉一下將要使用的物件方法。我們用來獲取上一個頁面傳遞過來的資料一般是使用Request物件。同樣的,我們也可以使用Request物件來獲取上傳上來的檔案資料,使用的方法是Request。BinaryRead()。而我們要從資料庫中讀出來圖片的資料顯示到網頁上面要用到的方法是:

Request。BinaryWrite()。在我們得到了圖片的資料,要儲存到資料庫中的時候,不可以直接使用Insert語句對資料庫進行操作,而是要使用ADO的AppendChunk方法,同樣的,讀出資料庫中的圖片資料,要使用GetChunk方法。各個方法的具體語法如下:

*Request。BinaryRead語法:

variant=Request。BinaryRead(count)

引數

variant

返回值儲存著從客戶端讀取到資料。

count

指明要從客戶端讀取的資料量大小,這個值小於或者等於使用方法Request。TotalBytes得到的資料量。

*Request。BinaryWrite語法:

Request。BinaryWritedata

引數

data

要寫入到客戶端瀏覽器中的資料包。

*Request。TotalBytes語法:

variant=Request。TotalBytes

引數

variant

返回從客戶端讀取到資料量的位元組數。

*AppendChunk語法

將資料追加到大型文字、二進位制資料Field或Parameter物件。

object。AppendChunkData

引數

objectField或Parameter物件

Data變體型,包含追加到物件中的資料。

說明

使用Field或Parameter物件的AppendChunk方法可將長二進位制或字元數

據填寫到物件中。在系統記憶體有限的情況下,可以使用AppendChunk方法對長整型值進行部分而非全部的操作。

*GetChunk語法

返回大型文字或二進位制資料Field物件的全部或部分內容。

variable=field。GetChunk(Size)

返回值

返回變體型。

引數

Size長整型表示式,等於所要檢索的位元組或字元數。

說明

使用Field物件的GetChunk方法檢索其部分或全部長二進位制或字元資料。在系統記憶體有限的情況下,可使用GetChunk方法處理部分而非全部的長整型值。

GetChunk呼叫返回的資料將賦給“變數”。如果Size大於剩餘的資料,則

GetChunk僅返回剩餘的資料而無需用空白填充“變數”。如果欄位為空,則

GetChunk方法返回Null。

每個後續的GetChunk呼叫將檢索從前一次GetChunk呼叫停止處開始的資料。但是,如果從一個欄位檢索資料然後在當前記錄中設定或讀取另一個欄位的值,ADO將認為已從第一個欄位中檢索出資料。如果在第一個欄位上再次呼叫GetChunk方法,ADO將把呼叫解釋為新的GetChunk操作並從記錄的起始處開始讀取。如果其他Recordset物件不是首個Recordset物件的副本,則訪問其中的欄位不會破壞GetChunk操作。

如果Field物件的Attributes屬性中的adFldLong位設定為True,則可以對該欄位使用GetChunk方法。

如果在Field物件上使用Getchunk方法時沒有當前記錄,將產生錯誤3021(無當前記錄)。

接下來,我們就要來設計我們的資料庫了,作為測試我們的資料庫結構如下(access2000):

欄位名稱 型別 描述

id 自動編號 主鍵值

img OLE物件 用來儲存圖片資料

對於在MSSQLServer7中,對應的結構如下:

欄位名稱 型別 描述

id int(Identity) 主鍵值

img image 用來儲存圖片資料

現在開始正式編寫我們的純ASP程式碼上傳部分了,首先,我們有一個提供給使用者的上傳介面,可以讓使用者選擇要上傳的圖片。程式碼如下

(upload。htm):


注意enctype=“multipart/form-data”,一定要在Form中有這個屬性,否則,將無法得到上傳上來的資料。接下來,我們要在process。asp中對從瀏覽器中獲取的資料進行必要的處理,因為我們在process。asp中獲取到的資料不僅僅包含了我們想要的上傳上來的圖片的資料,也包含了其他的無用的資訊,我們需要剔除冗餘資料,並將處理過的圖片資料儲存到資料庫中,這裡我們以access2000為例。具體程式碼如下(process。asp):

<%

response。buffer=true

formsize=request。totalbytes

formdata=request。binaryread(formsize)

bncrlf=chrB(13)&chrB(10)

divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)

datastart=instrb(formdata,bncrlf&bncrlf)+4

dataend=instrb(datastart+1,formdata,divider)-datastart

mydata=midb(formdata,datastart,dataend)

setconnGraph=server。CreateObject(“ADODB。connection”)

connGraph。ConnectionString=“driver={MicrosoftAccessDriver(*。mdb)};DBQ=”&server。MapPath(“images。mdb”)&“;uid=;PWD=;”

connGraph。Open

setrec=server。createobject(“ADODB。recordset”)

rec。Open“SELECT*FROM[images]whereidisnull”,connGraph,1,3

rec。addnew

rec(“img”)。appendchunkmydata

rec。update

rec。close

setrec=nothing

setconnGraph=nothing

%>

好了,這下我們就把上傳來的圖片儲存到了名為images。mdb的資料庫中了,剩下的工作就是要將資料庫中的圖片資料顯示到網頁上面了。一般在HTML中,顯示圖片都是使用標籤,也就是,但是我們的圖片是儲存到了資料庫中,“圖片路徑”是什麼呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:

所以,我們所要做的就是在showimg。asp中從資料庫中讀出來符合條件的

資料,並返回到SRC屬性中就可以了,具體程式碼如下(showimg。asp):

<%

setconnGraph=server。CreateObject(“ADODB。connection”)

connGraph。ConnectionString=“driver={MicrosoftAccessDriver(*。mdb)};DBQ=”&

server。MapPath(“images。mdb”)&“;uid=;PWD=;”

connGraph。Open

setrec=server。createobject(“ADODB。recordset”)

strsql=“selectimgfromimageswhereid=”&trim(request(“id”))

rec。openstrsql,connGraph,1,1

Response。ContentType=“image/*”

Response。BinaryWriterec(“img”)。getChunk(7500000)

rec。close

setrec=nothing

setconnGraph=nothing

%>

注意在輸出到瀏覽器之前一定要指定Response。ContentType=“image/*”,

以便正常顯示圖片。

最後要注意的地方是,我的process。asp中作的處理沒有考慮到第一頁(upload。htm)中還有其他資料,比如等等,如果有這些專案,你的process。asp就要注意處理掉不必要的資料。

vb如何從Access中提取圖片??高手幫忙啊。。。。。。!! 匿名使用者 1級 2008-08-30 回答

access可以儲存圖片嗎?

vb如何從Access中提取圖片??高手幫忙啊。。。。。。!! 匿名使用者 1級 2008-08-30 回答

可以,搜搜有很多

Top