數據庫與圖片或者文件的關係如何處理?

VB版

問題:


數據庫與照片/圖片/文件的關係如何處理?
也就是,比如有照片若干,怎樣能在數據庫中存儲並顯示?

 

 

方法一:


把照片放進數據庫,照片的格式最好是bmp,這樣就可以在窗體上顯示出來,不過這樣數據庫的體積會暴增。
詳細的使用方法請參考Access幫助中的 PictureData 屬性(本文末尾有相關幫助)。
而且,你可以直接用 commdlg API 函數來給圖像框賦值,然後直接讀取某個圖像框的 PICTUREDATA 並存儲到某個 IMAGE 字段中。這樣做的優點是顯示、讀取方便,缺點是如果圖片精度高,佔用的硬盤空間會爆大。
詳細示例請參考:
http://access911.net/down/eg/OLEfieldAndPictureData.rar(46KB)

 


方法二:


設一個OLE字段,然後插入對象就行了(對着字段單擊右鍵)。但是要注意的是,用上述方法加入數據庫的圖片只能以手動方式保存,需要用程序讀取的時候會碰到存儲在ole字段中二進制數據與源文件不符的情況。主要是因爲ole引擎在圖片的前面加了一段信息給他自己用。
請參考:
http://access911.net/index.asp?board=4&mode=3&recordid=75FAB21E12DC

 


方法三:


將圖片文件以二進制方式存儲在數據庫中,使用時調用。詳細情況請參考:

使用 ADO 的 STREAM 對象的 LoadFromFile 方法以及 SaveToFile 方法實現:
http://access911.net/index.asp?board=4&mode=3&recordid=74FAB51E13DC

使用 ADO 的 RECORDSET.FIELD 對象的 GetChunk 以及 AppendChunk 方法實現:
http://access911.net/index.asp?board=4&mode=3&recordid=75FAB01E

ASP 中使用的方法:
http://access911.net/index.asp?board=4&mode=3&recordid=79FAB31E

下列例程就是採用這種方法,在顯示的時候把長二進制數據保存爲臨時文件用於顯示
http://access911.net/down/photo.rar(size=308K)

 


方法四:


不把照片放入數據庫,只把照片的路徑保存到數據庫中,動態加載,這樣可以支持很多種圖片格式。作法是在窗體上放一個圖像控件,然後根據員工編號或別的有關聯的字段去找出路徑,用以下語句來加載圖像:
圖像1.Picture =路徑名
路徑名必須包括圖象文件名。
詳細情況你可以參考 access xp 的示例 northwind.mdb 中的僱員窗體
你也可以參考:http://access911.net/down/eg/LinkPicture.rar(61.1KB)

 

 


以下是 PictureData 的參考::

 

PictureData 屬性
請參閱 應用於 示例 特性
使用 PictureData 屬性可以將窗體、報表或控件中的圖片複製到另一個支持 Picture 屬性的對象中。Variant 型,可讀寫。

expression.PictureData

expression 必需。返回"Applies To"列表中的一個對象的表達式。

說明
PictureData 屬性設置值可以是其他圖像控件、命令按鈕、切換按鈕、窗體或報表的 PictureData 屬性。

使用 Visual Basic 可以對該屬性進行設置。

使用該屬性可以根據用戶所執行的操作的不同,在窗體中顯示不同的背景圖片。例如,可以根據"客戶"窗體打開的目的是輸入數據還是瀏覽數據而在打開窗體時使用不同的背景圖片。

另外,將 PictureData 屬性、Timer 事件和 TimerInterval 屬性一起使用,可以在窗體中產生簡單的動態背景效果。

示例
下面的示例使用三個圖像控件實現一隻蝴蝶從窗體中飛過的動態效果。Hidden1 圖像控件包含的圖片是一隻雙翅向上的蝴蝶,Hidden2 圖像控件包含的圖片也是一隻蝴蝶,不過這隻蝴蝶的雙翅是向下的。這兩個控件的 Visible 屬性都設爲 False。TimerInterval 屬性設爲 200。每次發生 Timer 事件時,就通過使用隱藏圖像控件的 PictureData 屬性更改 Visible1 圖像控件中的圖片,並且可見圖像控件向右移動 200 緹。當可見圖像控件的 Left 屬性值大於公用變量 gfrmWidth 中存儲的窗體寬度時,可見圖像控件即重新移回窗體的左邊。gfrmWidth 變量值在窗體的 Open 事件中設爲 Me.Width。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章