搜索
您的当前位置:首页正文

Oracle在PB中用OLE存取blob类型数据

来源:独旅网
PB中用OLE存取blob类型数据

1、源程序建立

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

字段名称  数据类型   备注

id     char(4)  primairy key index s_path   char(50) pic    binary (50)

2)在PB建立PBl库blobsave.PBl

3)在PBl库blobsave.PBl中建立应用blobsave

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

SQLCA.DBMS = \"ODBC\"

SQLCA.AutoCommit = False

SQLCA.DBParm = \"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) 4) 建立数据窗口dw_blobsave

按照上文中建立数?荽翱诘腷lob列的方法建立数据窗口dw_blobsave如图所示: 其中:add,del,save,cancel,,retrieve等分别为数据窗口dw_blobsave的append row,delete row,update,retrieve动作按钮。

首先创建实例变量 OLEstorage stor1

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

long row_num

row_num=dw_1.getrow() if row_num >0 then

ole_1.insertfile(dw_1.object.s_path[row_num]) end if

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

if dwo.name=\"cbselect\" then long row_num

row_num=dw_1.getrow() string filepath,filename

getfileopenname(\"请选择备注文件\

dw_1.object.s_path[row_num]=filepath ole_1.insertfile(filepath) end if

保存窗口w_path 6)建立窗口w_dbblob

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

blob text1

long row_num

row_num=dw_1.getrow() if row_num>0 then string id

id = dw_1.object.id[row_num] sqlca.autocommit=true

selectblob pic into :text1 from blobsave where id = :id;

ole_1.objectdata=text1 sqlca.autocommit=false end if

改变数据窗口dw_1的buttonclicked中的代码如下: 保存窗口w_dbblob 7)建立窗口w_OLEblob

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

stor1 = create olestorage

stor1.open(\"c:\\p1.ole\") //打开或创建ole文件 在窗口w_OLEblob的close事件中写入以下代码:

   destroy stor1

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

blob text1 long row_num

row_num=dw_1.getrow() if row_num>0 then string id

id = dw_1.object.id[row_num] ole_1.open(stor1,\"w\"+id) end if

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

long row_num

if dwo.name=\"cbselect\" then row_num=dw_1.getrow() string filepath,filename

getfileopenname(\"请选择备注文件\

dw_1.object.s_path[row_num]=filepath ole_1.insertfile(filepath) end if

if dwo.name=\"cbsave\" then string id

row_num=dw_1.getrow() id=dw_1.object.id[row_num] ole_1.saveas(stor1,\"w\"+id) stor1.save() end if

保存窗口w_OLEblob,运行应用程序即可。 2、三种方法的优缺点

方法一:文件保存在固定的路径下,数据库中存取文件路径和名称可以节省数据空间,避免了数据库过分膨胀,但备注文件必须在一定的目录下,不能丢失,且同一目录下文件不能重名,

对文件的管理造成一定的困难,另外,在OLE控件中浏览显示备注文件时,由于每次都要调用服务器程序,所以速度较慢。

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

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top