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