1. 程式人生 > >genexus 存取圖片或檔案到資料庫的操作

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'// 檔案過濾,注意書寫法

    &caption = '選擇圖片檔案'
    &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了.