数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

在PB中用OLE存取blob类型数据(三)


发布日期:2020年06月30日
 
在PB中用OLE存取blob类型数据(三)

源程序建立

)首先在数据库中建立如下结构的表blobsave

字段名称数据类型备注

idchar()primairy key index

s_pathchar(

pic binary (

)在PB建立PBl库blobsavePBl

)在PBl库blobsavePBl中建立应用blobsave

在应用的open事件中设置数据库连接程序(本程序中采用的是odbc方式连接数据库读者可根据自己所建立的数据库的不同选用不同的连接方式以下连接数据库的代码也有所改动至于连接不同的数据库的方法请参考有关资料本文不做详细介绍)

SQLCADBMS = ODBC

SQLCAAutoCommit = False

SQLCADBParm = Connectstring=DSN=blob

connect

open(w_main)

其中命令按钮cb_path的clicked中的代码格式如下open(w_path)

其中命令按钮cb_dbblob的clicked中的代码格式如下open(w_dbblob)

其中命令按钮cb_OLEblob的clicked中的代码格式如下open(w_OLEblob)

) 建立数据窗口dw_blobsave

按照上文中建立数?荽翱诘腷lob列的方法建立数据窗口dw_blobsave如图所示

其中adddelsavecancelretrieve等分别为数据窗口dw_blobsave的append rowdelete rowupdateretrieve动作按钮

首先创建实例变量 OLEstorage stor

然后如图建立窗口w_path其中数据窗口控件dw_的rowfocuschanged中的代码如下

long row_num

row_num=dw_getrow()

if row_num > then

ole_insertfile(dw_objects_path[row_num])

end if

其中数据窗口dw_的buttonclicked中的代码如下

if dwoname=cbselect then

long row_num

row_num=dw_getrow()

string filepathfilename

getfileopenname(请选择备注文件filepathfilename)

dw_objects_path[row_num]=filepath

ole_insertfile(filepath)

end if

保存窗口w_path

)建立窗口w_dbblob

打开w_path把其另存为w_dbblob改变数据窗口dw_的rowfocuschanged中的代码如下

blob text

long row_num

row_num=dw_getrow()

if row_num> then

string id

id = dw_objectid[row_num]

sqlcaautocommit=true

selectblob pic into :text from blobsave where id = :id

ole_objectdata=text

sqlcaautocommit=false

end if

改变数据窗口dw_的buttonclicked中的代码如下

long row_num

if dwoname=cbselect then

row_num=dw_getrow()

string filepathfilename

getfileopenname(请选择备注文件filepathfilename)

dw_objects_path[row_num]=filepath

ole_insertfile(filepath)

end if

if dwoname=cbsave then

string id

sqlcaautocommit = true

blob text

text = ole_objectdata

dw_update()

commit

row_num=dw_getrow()

id=dw_objectid[row_num]

updateblob blobsave

set pic = :text

where id = :id

commit

sqlcaautocommit = FALSE

dw_retrieve()

dw_scrolltorow(row_num)

end if

保存窗口w_dbblob

)建立窗口w_OLEblob

打开w_path把其另存为w_OLEblob在窗口w_OLEblob的open事件中写入以下代码

stor = create olestorage

storopen(c:\pole) //打开或创建ole文件

在窗口w_OLEblob的close事件中写入以下代码

destroy stor

改变数据窗口dw_的rowfocuschanged中的代码如下

blob text

long row_num

row_num=dw_getrow()

if row_num> then

string id

id = dw_objectid[row_num]

ole_open(storw+id)

end if

改变数据窗口dw_的buttonclicked中的代码如下

long row_num

if dwoname=cbselect then

row_num=dw_getrow()

string filepathfilename

getfileopenname(请选择备注文件filepathfilename)

dw_objects_path[row_num]=filepath

ole_insertfile(filepath)

end if

if dwoname=cbsave then

string id

row_num=dw_getrow()

id=dw_objectid[row_num]

ole_saveas(storw+id)

storsave()

end if

保存窗口w_OLEblob运行应用程序即可

三种方法的优缺点

方法一文件保存在固定的路径下数据库中存取文件路径和名称可以节省数据空间避免了数据库过分膨胀但备注文件必须在一定的目录下不能丢失且同一目录下文件不能重名对文件的管理造成一定的困难另外在OLE控件中浏览显示备注文件时由于每次都要调用服务器程序所以速度较慢

方法二在数据库中用blob类型或者varbinary类型字段存储备注文件当文件存储在数据库中以后就可以删除硬盘上原来的临时文件不需要复杂的二进制文件管理且数据库可以存储在网络服务器上对数据的共享非常方便

方法三在本地用OLE存储结构存储备注文件可以把所有的二进制文件信息存储在一个OLE存储文件中管理比较方便当二进制文件信息存储后可以删除原来的临时文件因为打开存储文件后不需要每次执行服务器程序来显示存储信息所以存取速度较快 说明本文在PBSql anywhere数据库和PBSql Server数据库下windowswindows meNT平台上试验通过

               

上一篇:如何找出引起ORA-1652的SQL

下一篇:在PB中如何实现数据模糊查询(四)