genexus 存取图片或文件到数据库的操作

来源:互联网 发布:德国dm淘宝旗舰店 编辑:程序博客网 时间:2024/04/28 20:58

 存取图片或文件到数据库的功能在企业信息化应用中现在很广泛了,比如说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了.