genexus 存取圖片或檔案到資料庫的操作
存取圖片或檔案到資料庫的功能在企業資訊化應用中現在很廣泛了,比如說pdm系統,每個產品編號都對應的產品圖片或工藝檔案
目前有2種方法:1)直接在資料庫表中儲存檔案路徑 2)在資料庫表中儲存檔案內容,即2進位制檔案。
第1種方法比較好解決,直接在表中寫路徑的字串就可以了,但缺點就是檔案都是與本機有關,單機版可以用,如果是聯機的多使用者系統,就不能適用。
我們現在就這個問題,提出了把檔案直接儲存在資料庫,達到圖片或檔案的共享,以更好的管理。
WorkPanel:WkpPict
Event 'SelPict'
//選擇檔案
&initpath = 'c:/'
&extens = 'jpg file (*.jpg,*.jpeg)|*.jpg;*.jpeg|bmp file(*.bmp)|*.bmp|gif file(*.gif)|*.gif|tiff file(*.tiff)|*.tiff'// 檔案過濾,注意書寫法
&buttcap = '確定'
&ret = GxSelFile(&selected, &initpath, &extens, &caption, &buttcap, &butttype)
/*根據返回值
&ret = 1 ,選擇了檔案
&ret = 0 ,取消選擇*/
if &ret = 1
&picbmp = LoadBitmap(&selected)//在窗體上顯示圖片
endif
EndEvent // 'SelPict'
Event 'SavPict'
//儲存到資料庫
&picblob = &selected
PPrcSavPict.Call(&picblob)//新增圖片到資料庫
EndEvent // 'SavPict'
Event 'ReaPict'
//從資料庫讀取圖片到blob
&picblob = ''
PPrcGetPict.Call(&picblob,3)//讀取編號為3的圖片
&picbmp = LoadBitmap(&picblob)
EndEvent // 'ReaPict'
Procedure:PrcSavPict
Rules:
parm(&pblob);
Source:
New//新增圖片到資料庫,編號假設為3
picid = 3
picblob = &pblob
EndNew
Procedure:PrcGetPict
Rulses: parm(&pblob,&pid);
Source:
for each
where picid = &pid
&pblob = picblob
endfor
Transation:TrnPict
*picid n(10)//圖片編號
picbloc blob//圖片2進位制檔案
這樣就可以存取圖片等2進位制檔案了,上述說明只是可以實現簡單的存取的一個例項,具體涉及到各個相關應用,我想大家也應該知道如何操作,我在這裡就拋磚引玉了。
以上的操作例子經測試在 gx 9 + java + microsoft sdk + win + Sqlserver 通過;
在oracle9,10資料庫不能存取,原因是微軟虛擬機器不提供java.sql.Results.getBlob(Int i)方法.
要想在oracle中儲存圖片,只能選擇 sun sdk,Sun Sdk提供Blob的方法當然是no problem了.