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

  • Post author:
  • Post category:其他


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



版权声明:本文为ningbowxj3原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。