源程序建立
)首先在數據庫中建立如下結構的表blobsave
字段名稱 數據類型 備注
id char() primairy key index
s_path char()
pic binary ()
)在PB建立PBl庫blobsavePBl
)在PBl庫blobsavePBl中建立應用blobsave
在應用的open事件中設置數據庫連接程序(本程序中采用的是odbc方式連接數據庫讀者可根據自己所建立的數據庫的不同選用不同的連接方式以下連接數據庫的代碼也有所改動至於連接不同的數據庫的方法請參考有關資料本文不做詳細介紹)
SQLCADBMS = ODBC
SQLCAAutoCommit = False
SQLCADBParm = Connectstring=DSN=blob
connect
open(w_main)
其中命令按鈕cb_path的clicked中的代碼格式如下open(w_path)
其中命令按鈕cb_dbblob的clicked中的代碼格式如下open(w_dbblob)
其中命令按鈕cb_OLEblob的clicked中的代碼格式如下open(w_OLEblob)
) 建立數據窗口dw_blobsave
按照上文中建立數?荽翱诘腷lob列的方法建立數據窗口dw_blobsave如圖所示
其中adddelsavecancelretrieve等分別為數據窗口dw_blobsave的append rowdelete rowupdateretrieve動作按鈕
首先創建實例變量 OLEstorage stor
然後如圖建立窗口w_path其中數據窗口控件dw_的rowfocuschanged中的代碼如下
long row_num
row_num=dw_getrow()
if row_num > then
ole_insertfile(dw_objects_path[row_num])
end if
其中數據窗口dw_的buttonclicked中的代碼如下
if dwoname=cbselect then
long row_num
row_num=dw_getrow()
string filepathfilename
getfileopenname(請選擇備注文件filepathfilename)
dw_objects_path[row_num]=filepath
ole_insertfile(filepath)
end if
保存窗口w_path
)建立窗口w_dbblob
打開w_path把其另存為w_dbblob改變數據窗口dw_的rowfocuschanged中的代碼如下
blob text
long row_num
row_num=dw_getrow()
if row_num> then
string id
id = dw_objectid[row_num]
sqlcaautocommit=true
selectblob pic into :text from blobsave where id = :id
ole_objectdata=text
sqlcaautocommit=false
end if
改變數據窗口dw_的buttonclicked中的代碼如下
long row_num
if dwoname=cbselect then
row_num=dw_getrow()
string filepathfilename
getfileopenname(請選擇備注文件filepathfilename)
dw_objects_path[row_num]=filepath
ole_insertfile(filepath)
end if
if dwoname=cbsave then
string id
sqlcaautocommit = true
blob text
text = ole_objectdata
dw_update()
commit
row_num=dw_getrow()
id=dw_objectid[row_num]
updateblob blobsave
set pic = :text
where id = :id
commit
sqlcaautocommit = FALSE
dw_retrieve()
dw_scrolltorow(row_num)
end if
保存窗口w_dbblob
)建立窗口w_OLEblob
打開w_path把其另存為w_OLEblob在窗口w_OLEblob的open事件中寫入以下代碼
stor = create olestorage
storopen(c:\pole) //打開或創建ole文件
在窗口w_OLEblob的close事件中寫入以下代碼
destroy stor
改變數據窗口dw_的rowfocuschanged中的代碼如下
blob text
long row_num
row_num=dw_getrow()
if row_num> then
string id
id = dw_objectid[row_num]
ole_open(storw+id)
end if
改變數據窗口dw_的buttonclicked中的代碼如下
long row_num
if dwoname=cbselect then
row_num=dw_getrow()
string filepathfilename
getfileopenname(請選擇備注文件filepathfilename)
dw_objects_path[row_num]=filepath
ole_insertfile(filepath)
end if
if dwoname=cbsave then
string id
row_num=dw_getrow()
id=dw_objectid[row_num]
ole_saveas(storw+id)
storsave()
end if
保存窗口w_OLEblob運行應用程序即可
三種方法的優缺點
方法一文件保存在固定的路徑下數據庫中存取文件路徑和名稱可以節省數據空間避免了數據庫過分膨脹但備注文件必須在一定的目錄下不能丟失且同一目錄下文件不能重名對文件的管理造成一定的困難另外在OLE控件中浏覽顯示備注文件時由於每次都要調用服務器程序所以速度較慢
方法二在數據庫中用blob類型或者varbinary類型字段存儲備注文件當文件存儲在數據庫中以後就可以刪除硬盤上原來的臨時文件不需要復雜的二進制文件管理且數據庫可以存儲在網絡服務器上對數據的共享非常方便
方法三在本地用OLE存儲結構存儲備注文件可以把所有的二進制文件信息存儲在一個OLE存儲文件中管理比較方便當二進制文件信息存儲後可以刪除原來的臨時文件因為打開存儲文件後不需要每次執行服務器程序來顯示存儲信息所以存取速度較快 說明本文在PBSql anywhere數據庫和PBSql Server數據庫下windowswindows meNT平台上試驗通過
From:http://tw.wingwit.com/Article/program/SQL/201311/16227.html