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

在PB中用OLE存取blob类型数据(三),第1张

源程序建立

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

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

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

 s_pathchar( )

 pic binary ( )

)在PB建立PBl库blobsave PBl

)在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)

) 建立数据窗口dw_blobsave

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

其中 add del save cancel retrieve等分别为数据窗口dw_blobsave的append row delete row update retrieve动作按钮

首先创建实例变量 OLEstorage stor

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

long row_num row_num=dw_ getrow() if row_num >then ole_ insertfile(dw_ object s_path[row_num]) end if

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

if dwo name= cbselect then long row_num row_num=dw_ getrow() string filepath filename getfileopenname( 请选择备注文件 filepath filename) dw_ object s_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_ object id[row_num] sqlca automit=true selectblob pic into :text from blobsave where id = :id ole_ objectdata=text sqlca automit=false end if

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

long row_num if dwo name= cbselect then row_num=dw_ getrow() string filepath filename getfileopenname( 请选择备注文件 filepath filename) dw_ object s_path[row_num]=filepath ole_ insertfile(filepath) end if if dwo name= cbsave then string id sqlca automit = true blob text text = ole_ objectdata dw_ update() mit row_num=dw_ getrow() id=dw_ object id[row_num] updateblob blobsave set pic = :text where id = :id mit sqlca automit = FALSE dw_ retrieve() dw_ scrolltorow(row_num) end if 保存窗口w_dbblob

)建立窗口w_OLEblob

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

stor = create olestorage stor open( c:\p ole ) //打开或创建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_ object id[row_num] ole_ open(stor w +id) end if

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

long row_num if dwo name= cbselect then row_num=dw_ getrow() string filepath filename getfileopenname( 请选择备注文件 filepath filename) dw_ object s_path[row_num]=filepath ole_ insertfile(filepath) end if if dwo name= cbsave then string id row_num=dw_ getrow() id=dw_ object id[row_num] ole_ saveas(stor w +id) stor save() end if

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

三种方法的优缺点

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

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

lishixinzhi/Article/program/SQL/201311/16227

①首先要在窗口的open事件中写如下一句.dw_1.settransobject(sqlca)//譬如您要保存的数据窗口名字为dw_1;这计划的意义在于时刻保持与数据窗口月数据库表的连接. 亦或者双击Dw_1对象。选择 constructor事件 写下以上语句即可.

②然后在数据窗口中修改 或者添加数据.随后创建一个按钮或者事件 都行.用于保存.当然可以对应您的相应需要的校验都通过后才可保存.写如下代码进行保存数据.

if dw_1.update() >o then//更新保存数据1 -成功-1-失败

commit//提交数据

else

rollback//回滚数据

end if

同时要注意 在数据窗口对象控件 即在 dw_1所用到的数据窗口对象编辑画板中的update properties 设置正常(即更新属性). 具体查看 打开rows选单-update properties-Allow updates挑对勾!-upateable columns 选中要可以提交更新保存的字段.随后点击ok保存配置 即可

可以用动态的数据窗口来实现将数据表中的信息存放到文本文件和dbf文件进行备份,然后再进行导入即数据恢复。具体的做法为:

1、在窗口中添加一个数据窗口控件,如数据窗口控件命名为dw_pip

2、在窗口中添加一个名为SAVE的保存按钮。在SAVE按钮中添加程序如下:

string sql_syntax,dwsyntax_str

string errors,S_filnam

string table_name

//编写数据查寻条件

sql_syntax=查询条件

//检索数据窗口内容

dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax,"style(type=grid)" , ERRORS)

dw_pip.Create(dwsyntax_str, ERRORS)

dw_pip.SetTransObject(SQLCA)

dw_pip.retrieve()

S_filnam="d:\del\test_del.txt" //要存放的文件名(自己可以设定,但必须保证该路径存在),若存为dbf类型,则将.txt后缀改为.dbf后缀

dw_pip.SaveAs(S_filnam, Text! , FALSE)

3、在窗口中添加名为import导入按钮,在本按钮中添加以下程序

string sql_syntax,dwsyntax_str

string errors,S_filnam

sql_syntax =要插入的数据表检索条件

dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax,"style(type=grid)" , ERRORS)

dw_pip.Create(dwsyntax_str, ERRORS)

dw_pip.SetTransObject(SQLCA)

dw_pip.retrieve()

//导入文件内容

ii=dw_pip.ImportFile("D:\del\test_del.TXT") //文件名为SAVE按钮中生成的文件名

dw_pip.update(true,true)

4、结束,调试运行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10843236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存