新聞中心
在使用VB進(jìn)行開發(fā)的時(shí)候,經(jīng)常會(huì)涉及到圖片的存儲(chǔ)和展示。而如果需要將圖片存儲(chǔ)到數(shù)據(jù)庫中,可能會(huì)比較困難,因?yàn)閳D片的數(shù)據(jù)較大,需要轉(zhuǎn)換成二進(jìn)制再進(jìn)行存儲(chǔ)。本文將為大家介紹如何使用VB實(shí)現(xiàn)數(shù)據(jù)庫圖片存儲(chǔ)的方法。

創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)繁峙,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
1. 圖片格式轉(zhuǎn)換
在將圖片存儲(chǔ)到數(shù)據(jù)庫中之前,我們需要將它轉(zhuǎn)換成二進(jìn)制格式。在VB中,我們可以使用FileSystemObject對(duì)象讀取圖片文件,再使用ADODB.Stream對(duì)象將它轉(zhuǎn)換成二進(jìn)制格式。具體代碼如下:
“`
Dim fs As New FileSystemObject
Dim stream As New ADODB.Stream
stream.Type = adTypeBinary
stream.Open
stream.LoadFromFile “C:\image.png”
Dim byteStream() As Byte
byteStream = stream.Read()
“`
這段代碼首先創(chuàng)建一個(gè)FileSystemObject對(duì)象,用于讀取文件。接著,創(chuàng)建一個(gè)ADODB.Stream對(duì)象,指定它的類型為adTypeBinary,打開并從文件中讀取圖片。將轉(zhuǎn)換后的二進(jìn)制數(shù)據(jù)存儲(chǔ)在byteStream數(shù)組中。
2. 數(shù)據(jù)庫表的設(shè)計(jì)
在將圖片存儲(chǔ)到數(shù)據(jù)庫中之前,我們需要設(shè)計(jì)一個(gè)表用于存儲(chǔ)它。一般來說,這個(gè)表需要包含以下幾個(gè)字段:
– Id:圖片的ID,類型為整數(shù),用于唯一標(biāo)識(shí)一張圖片。
– Name:圖片的名稱,類型為字符串,用于描述圖片的內(nèi)容或者作用。
– Type:圖片的類型,類型為字符串,用于記錄圖片的格式,例如jpeg、png等。
– Data:圖片的數(shù)據(jù),類型為二進(jìn)制,用于存儲(chǔ)圖片的內(nèi)容。
具體的SQL語句如下:
“`
CREATE TABLE Images (
Id INTEGER PRIMARY KEY,
Name TEXT,
Type TEXT,
Data BLOB
);
“`
在這個(gè)表中,我們將使用數(shù)據(jù)類型為BLOB的字段來存儲(chǔ)圖片的二進(jìn)制數(shù)據(jù)。
3. 將圖片存儲(chǔ)到數(shù)據(jù)庫中
當(dāng)我們有了轉(zhuǎn)換后的二進(jìn)制數(shù)據(jù)和數(shù)據(jù)庫表之后,就可以將圖片存儲(chǔ)到數(shù)據(jù)庫中了。在VB中,我們可以使用ADODB.Connection對(duì)象連接數(shù)據(jù)庫,再使用ADODB.Command對(duì)象執(zhí)行SQL語句,將二進(jìn)制數(shù)據(jù)存儲(chǔ)到表中。具體代碼如下:
“`
Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
conn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.mdb;”
conn.Open
cmd.ActiveConnection = conn
cmd.CommandText = “INSERT INTO Images (Name, Type, Data) VALUES (?, ?, ?);”
cmd.Parameters.Append cmd.CreateParameter(“Name”, adVarChar, adParamInput, Len(imageName), imageName)
cmd.Parameters.Append cmd.CreateParameter(“Type”, adVarChar, adParamInput, Len(imageType), imageType)
cmd.Parameters.Append cmd.CreateParameter(“Data”, adBinary, adParamInput, UBound(byteStream) – LBound(byteStream) + 1, byteStream)
cmd.Execute
conn.Close
“`
這段代碼首先創(chuàng)建一個(gè)ADODB.Connection對(duì)象,用于連接數(shù)據(jù)庫。接著,創(chuàng)建一個(gè)ADODB.Command對(duì)象,指定它的ActiveConnection為conn,CommandText為INSERT INTO Images (Name, Type, Data) VALUES (?, ?, ?);,使用CreateParameter方法創(chuàng)建三個(gè)參數(shù),分別對(duì)應(yīng)Name、Type和Data字段。用Execute方法將數(shù)據(jù)存儲(chǔ)到表中,再關(guān)閉連接。
4. 從數(shù)據(jù)庫中獲取圖片
在將圖片存儲(chǔ)到數(shù)據(jù)庫中之后,我們還需要從數(shù)據(jù)庫中獲取它并進(jìn)行展示。在VB中,我們可以使用ADODB.Recordset對(duì)象從表中讀取數(shù)據(jù),再使用PictureBox控件展示它。具體代碼如下:
“`
Dim rs As New ADODB.Recordset
rs.Open “SELECT * FROM Images WHERE Id = ” & imageId, conn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
Dim stream As New ADODB.Stream
stream.Type = adTypeBinary
stream.Open
stream.Write rs.Fields(“Data”).Value
stream.SaveToFile “C:\image.png”, adSaveCreateOverWrite
PictureBox1.Picture = LoadPicture(“C:\image.png”)
End If
rs.Close
“`
這段代碼首先創(chuàng)建一個(gè)ADODB.Recordset對(duì)象,使用Open方法執(zhí)行SQL語句(SELECT * FROM Images WHERE Id = ‘imageId’),讀取圖片數(shù)據(jù)。如果讀取到了數(shù)據(jù),就創(chuàng)建一個(gè)ADODB.Stream對(duì)象,寫入Data字段的值,再將它保存到本地文件。使用LoadPicture方法將圖片加載到PictureBox控件中展示。
由此可見,使用VB實(shí)現(xiàn)數(shù)據(jù)庫圖片存儲(chǔ)并不困難,只需要掌握相關(guān)的技術(shù)和方法即可。希望本文對(duì)您有所幫助。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
VB如何將一張網(wǎng)圖上的圖片寫入數(shù)據(jù)庫
dim aduSave as New ADODB.Recordset
aduSave.Open ” select Picture from tblBUltrasonicCheckPic where PersonID='” & txtInfo(0) & “‘ and ExamineID='” & strExamID & “‘ and PictureID=” & I, conn, adOpenDynamic, adLockBatchOptimistic
DoEvents
saveCPic(aduSave.Fields(“Picture”))
aduSave.UpdateBatch
Public Sub SavePic(adrPic As ADODB.field)
‘–保存圖像
On Error Resume Next
‘On Error GoTo err
Dim bytes() As Byte
Dim file_name As String
Dim file_num As Integer
Dim file_length As Long
Dim num_blocks As Long
Dim left_over As Long
Dim block_num As Long
file_num = FreeFile
Open “c:\photo_pic.jpg” For Binary Access Read As #file_num
file_length = LOF(file_num)
If file_length > 0 Then
num_blocks = file_length / BLOCK_SIZE
left_over = file_length Mod BLOCK_SIZE
ReDim bytes(BLOCK_SIZE)
For block_num = 1 To num_blocks
Get #file_num, , bytes()
adrPic.AppendChunk bytes()
Next block_num
If left_over > 0 Then
ReDim bytes(left_over)
Get #file_num, , bytes()
adrPic.AppendChunk bytes()
End If
Close #file_num
End If
DoEvents: DoEvents: DoEvents
On Error Resume Next
Kill “c:\photo_pic.jpg”
DoEvents
Exit Sub
err:
Debug.Print err.Description
End Sub
Public Sub showPic(ByVal Pic As ADODB.field)
‘–顯示圖像用
On Error Resume Next
Dim bytes() As Byte
Dim file_name As String
Dim file_num As Integer
Dim file_length As Long
Dim num_blocks As Long
Dim left_over As Long
Dim block_num As Long
Dim hgt As Single
DoEvents
file_num = FreeFile
Kill “c:\photo_pic.jpg”
DoEvents
Open “c:\photo_pic.jpg” For Binary As #file_num
file_length = Pic.ActualSize
num_blocks = file_length / BLOCK_SIZE
left_over = file_length Mod BLOCK_SIZE
For block_num = 1 To num_blocks
bytes() = Pic.GetChunk(BLOCK_SIZE)
Put #file_num, , bytes()
Next block_num
If left_over > 0 Then
bytes() = Pic.GetChunk(left_over)
Put #file_num, , bytes()
End If
Close #file_num
End Sub
用LoadPicture直接讀取某資料架圖片,并顯示在Image控件就可以了。
若直接將圖片存入資料庫將導(dǎo)致數(shù)據(jù)存取緩慢和增加資料庫容量。
比如:
Image1.Picture = LoadPicture(“e:\653\” & adotype.Recordset.Fields(“No”).value & “.jpg”)
*儲(chǔ)存圖片名字在資料庫的欄位中就可以了。
建議只存儲(chǔ)圖片的路徑,而且存儲(chǔ)相對(duì)路徑的話,在局域網(wǎng)內(nèi)也可以正常訪問,但要注意的是“不同操作系統(tǒng)的路徑表示方式不同”
但如果要把圖片存到數(shù)據(jù)庫中,好像只能用流來控制,存入還好,取出時(shí)有時(shí)會(huì)取不出來
可以的..讀取文件成為二進(jìn)制格式..然后寫入ACCESS..字段類型必須是二進(jìn)制的兼容格式~
不過一般不這樣做..不能提高速度..也增加服務(wù)器的負(fù)擔(dān)
VB如何拍照后自動(dòng)將圖片保存到數(shù)據(jù)庫
(1)你需要把Command1_Click里面的代碼單獨(dú)提出來寫成一個(gè)過程(或者函數(shù)),類似于這樣的形式:
Private Sub SavePicToDB(ByVal PicFilename as String)
‘這里面是你的代碼,直接復(fù)制進(jìn)來
‘需要稍做修改,把”C:\aa.JPG” 改為 PicFileName
End Sub
(2)然后在cmdStartPhoto_Click方法中,先加兩句:
Dim picFileName as String
picFileName = App.Path & “DataBase/PIctures” XXXXXXXXXXXXXXXXXXX ‘這里我不寫全了,你自己復(fù)制你那一長串代碼
SavePicture XXXXXXXX的行改為:
SavePicture picPhoto.Picture picFileName
并且在下一行加一句:
SavePicToDB(PicFilename)
vb中如何向數(shù)據(jù)庫中存儲(chǔ)圖片的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于vb中如何向數(shù)據(jù)庫中存儲(chǔ)圖片,VB中實(shí)現(xiàn)數(shù)據(jù)庫圖片存儲(chǔ)的方法解析,VB如何將一張網(wǎng)圖上的圖片寫入數(shù)據(jù)庫,VB如何拍照后自動(dòng)將圖片保存到數(shù)據(jù)庫的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220
新聞標(biāo)題:VB中實(shí)現(xiàn)數(shù)據(jù)庫圖片存儲(chǔ)的方法解析(vb中如何向數(shù)據(jù)庫中存儲(chǔ)圖片)
URL地址:http://fisionsoft.com.cn/article/djopeje.html


咨詢
建站咨詢
