论文部分内容阅读
摘 要:探讨了用PB存取SQL Server数据库中二进制文件(如图片或Word文档等)的方式,并给出了员工信息管理系统中图片资料保存和显示的程序代码,强调了程序代码的关键点。
关键词:大对象数据类型;信息系统
1 引言
在开发信息管理系统(Mis)时,经常会涉及图片处理,例如:需要处理员工照片,需要处理扫描后的档案资料等。在基于C/S结构开发的SQL Server数据库系统中,图片存取的方式主要有三种。①图片文件保存在固定的路径下,数据库中只保存文件的路径和名称,优点是可以节省磁盘空间,缺点是图片文件必须放在固定的目录下,不能丢失损坏,且同一目录下文件不能重名,图片文件比较零散,管理不便;②在SQL Server数据库中用Image类型字段保存图片文件,数据库若存放在网络服务器上,用户对数据的共享访问方便;③在本地用OLE存储结构存储备注文件。
我们在开发信息管理系统时,经常使用PowerBuilder作为前台开发工具,SQL Server作为后台数据库管理平台,采用C/S结构,用SQL Server数据库中Image类型字段来保存图片文件。有关员工的信息管理系统中都包括人员基本信息,人员基本信息中有照片(图片)。在SQL Server数据库中建立表tab_ryxx,tab_ryxx包含字段m_sfzh(员工的身份证号码),类型是Varchar(18),m_photo(员工的照片),类型是Image,其它字段(略)等。该表可以用PB在前台直接创建,也可以用CREAT命令在后台创建。
2 PB和SQL SERVER数据库的连接
PB在访问数据库之前,必须首先要与SQL Server数据库建立连接关系。PB与SQL Server数据库的连接通过数据库接口来实现。我们在开发Mis系统时,经常将连接参数写到配置文件当中,如下:
[Database]
DBMS=MSS Microsoft SQL Server 6.x
ServeName=[服务器名称]
Database=[数据库名称]
Logid=[用户名称]
Logpass=[密码]
AutoCommit=0
3 PB处理大对象数据类型
对于大二进制数据,在PB Script中是用Blob数据类型表示并加以处理。标准SQL语句中的select、insert和update语句无法直接处理Image类型的数据,在PB中操作Image类型的数据只能用专用的语句,从数据库中查询Image类型的数据的命令是:
selectblob restofselectstatement {using transactionobjcot);
updateblob tablename
set blObeolumn
restofupatestatement{using transctionobject};
4 将图片文件保存到数据库的方法
人员信息录入界面有二个功能按钮,一个是“预览图片”按钮,另一个是“保存图片”按钮。
“预览图片”是用来把存在计算机中的图形文件(如文件后缀是“.BMP”、“.JPG”等图形文件)指定给该员工,因PB每次只能处理32KB的二进制信息,所以要利用循环语句将大图片分块读取。
“保存图片”主要用UPDATEBLOB语句将照片文件存入数据库,如下:
int fh,li_c,i
string s_filepath
blob bb_pic, bb_tmp
long ll_len,ll_mid
s_filepath=p_1.picturename
if s_filepath<>’’ then
ll_mid=dw_1.object.m_id[dw_1.getrow()]
sqlca.autocommit=true
ll_len = Filelength(s_filepath)
li_c = (ll_len/32765)+1
fh = fileopen(s_filepath, StreamMode!,read!,lockread!)
For i = 1 To li_c
FileRead(fh, bb_tmp)
bb_pic = bb_pic + bb_tmp
Next
fileclose(fh)
UPDATEBLOB tab_main SET m_photo = :bb_pic WHERE m_id = :ll_mid;
if sqlca.sqlcode <> 0 then
messagebox(“保存图片信息”, “失败!~r~n” + sqlca.sqlerrtext)
end if
sqlca.autocommit=false
END IF
5 显示数据库中的图片
显示数据库中的图片主要用SELECTBLOB语句,具体代码如下:
blob bb_pic1
SQLCA.AUTOCOMMIT=TRUE
SELECTBLOB m_photo INTO :bb_pic1 FROM tab_main WHERE m_id = :Ll_MID;
if sqlca.sqlNROWS > 0 then
f_write_bloltofile(bb_pic1,”temp.gif”)
p_1.picturename=”temp.gif”
p_1.setpicture(bb_pic1)
end if
sqlca.autocommit=false
6 结论
人员信息管理系统中的照片资料的最佳存储方式是用SQL Server数据库中的Image数据类型,它不需要字符集的转换,传输的效率也比较高,且不容易出现乱码现象,便于在客户端和服务器之间进行数据传输,用PB对数据库中的图片资料进行存取,不能直接用标准的SQL语句,必须用专门的UPDATEBLOB和SELECTBLOB命令。
参考文献:
[1]李劲.对PB访问数据库中大对象数据类型方法的研究.《微计算机信息》,2006年第21期
[2]李玉东、马琳.PowerBuilder8.0控件与对象大全.电子工业出版社,2002年
关键词:大对象数据类型;信息系统
1 引言
在开发信息管理系统(Mis)时,经常会涉及图片处理,例如:需要处理员工照片,需要处理扫描后的档案资料等。在基于C/S结构开发的SQL Server数据库系统中,图片存取的方式主要有三种。①图片文件保存在固定的路径下,数据库中只保存文件的路径和名称,优点是可以节省磁盘空间,缺点是图片文件必须放在固定的目录下,不能丢失损坏,且同一目录下文件不能重名,图片文件比较零散,管理不便;②在SQL Server数据库中用Image类型字段保存图片文件,数据库若存放在网络服务器上,用户对数据的共享访问方便;③在本地用OLE存储结构存储备注文件。
我们在开发信息管理系统时,经常使用PowerBuilder作为前台开发工具,SQL Server作为后台数据库管理平台,采用C/S结构,用SQL Server数据库中Image类型字段来保存图片文件。有关员工的信息管理系统中都包括人员基本信息,人员基本信息中有照片(图片)。在SQL Server数据库中建立表tab_ryxx,tab_ryxx包含字段m_sfzh(员工的身份证号码),类型是Varchar(18),m_photo(员工的照片),类型是Image,其它字段(略)等。该表可以用PB在前台直接创建,也可以用CREAT命令在后台创建。
2 PB和SQL SERVER数据库的连接
PB在访问数据库之前,必须首先要与SQL Server数据库建立连接关系。PB与SQL Server数据库的连接通过数据库接口来实现。我们在开发Mis系统时,经常将连接参数写到配置文件当中,如下:
[Database]
DBMS=MSS Microsoft SQL Server 6.x
ServeName=[服务器名称]
Database=[数据库名称]
Logid=[用户名称]
Logpass=[密码]
AutoCommit=0
3 PB处理大对象数据类型
对于大二进制数据,在PB Script中是用Blob数据类型表示并加以处理。标准SQL语句中的select、insert和update语句无法直接处理Image类型的数据,在PB中操作Image类型的数据只能用专用的语句,从数据库中查询Image类型的数据的命令是:
selectblob restofselectstatement {using transactionobjcot);
updateblob tablename
set blObeolumn
restofupatestatement{using transctionobject};
4 将图片文件保存到数据库的方法
人员信息录入界面有二个功能按钮,一个是“预览图片”按钮,另一个是“保存图片”按钮。
“预览图片”是用来把存在计算机中的图形文件(如文件后缀是“.BMP”、“.JPG”等图形文件)指定给该员工,因PB每次只能处理32KB的二进制信息,所以要利用循环语句将大图片分块读取。
“保存图片”主要用UPDATEBLOB语句将照片文件存入数据库,如下:
int fh,li_c,i
string s_filepath
blob bb_pic, bb_tmp
long ll_len,ll_mid
s_filepath=p_1.picturename
if s_filepath<>’’ then
ll_mid=dw_1.object.m_id[dw_1.getrow()]
sqlca.autocommit=true
ll_len = Filelength(s_filepath)
li_c = (ll_len/32765)+1
fh = fileopen(s_filepath, StreamMode!,read!,lockread!)
For i = 1 To li_c
FileRead(fh, bb_tmp)
bb_pic = bb_pic + bb_tmp
Next
fileclose(fh)
UPDATEBLOB tab_main SET m_photo = :bb_pic WHERE m_id = :ll_mid;
if sqlca.sqlcode <> 0 then
messagebox(“保存图片信息”, “失败!~r~n” + sqlca.sqlerrtext)
end if
sqlca.autocommit=false
END IF
5 显示数据库中的图片
显示数据库中的图片主要用SELECTBLOB语句,具体代码如下:
blob bb_pic1
SQLCA.AUTOCOMMIT=TRUE
SELECTBLOB m_photo INTO :bb_pic1 FROM tab_main WHERE m_id = :Ll_MID;
if sqlca.sqlNROWS > 0 then
f_write_bloltofile(bb_pic1,”temp.gif”)
p_1.picturename=”temp.gif”
p_1.setpicture(bb_pic1)
end if
sqlca.autocommit=false
6 结论
人员信息管理系统中的照片资料的最佳存储方式是用SQL Server数据库中的Image数据类型,它不需要字符集的转换,传输的效率也比较高,且不容易出现乱码现象,便于在客户端和服务器之间进行数据传输,用PB对数据库中的图片资料进行存取,不能直接用标准的SQL语句,必须用专门的UPDATEBLOB和SELECTBLOB命令。
参考文献:
[1]李劲.对PB访问数据库中大对象数据类型方法的研究.《微计算机信息》,2006年第21期
[2]李玉东、马琳.PowerBuilder8.0控件与对象大全.电子工业出版社,2002年