知识大全 在PowerBuilder中操作BLOB数据的技巧[1]
Posted 知
篇首语:书史足自悦,安用勤与劬。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在PowerBuilder中操作BLOB数据的技巧[1]相关的知识,希望对你有一定的参考价值。
在PowerBuilder中操作BLOB数据的技巧[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
PowerBuilder提供的BLOB(Binary Large Object)数据类型可以用来处理大型数据 包括图像 大文本 Word文档 二进制文件和多媒体等各种数据 它的长度可以是 ~ GB字节 我们利用BLOB类型的变量可以将数据传递给数据库以大字段方式存储 但是用通常的数据窗口技术无法将BLOB类型数据加入到数据库中 也不能将数据库中相应字段的数据提取出来 即使在程序中直接使用UPDATE和SELECT等SQL语句也是无法对BLOB类型数据进行操作的 下面笔者将介绍在PowerBuilder 中操作BLOB类型数据的技巧
程序设计原理
在PB中实现BLOB类型数据的入库和查询 主要要用到两条特殊的SQL命令 UPDATEBLOB和SELECTBLOB 首先定位要进行操作的记录 然后使用UPDATEBLOB命令就可以将BLOB类型变量中存放的数据传递给数据库 而使用SELECTBLOB则是将指定记录中的大字段数据传递给BLOB变量
使用BLOB类型变量获取外界文件的数据内容 还必须借助于PB提供的可视化OLE控制对象 通过它可以将指定的文件内容显示成相应的对象(如BMP图片) 双击它就可以激活相应的OLE服务器应用程序 来编辑修改对象的内容 同时也可以读取对象的数据内容(利用OLE控件的ObjectData属性) 给BLOB类型变量赋值
下面结合一个简单的程序实例 讲述如何处理BLOB数据类型 在这个例子中 BMP图片将作为一个大字段存储在数据库中 我们选择Microsoft Access 作为后台数据库 它的字段类型中包含 OLE对象 类型(如果选择MS SQL Server作为数据库服务器 可以使用TEXT或IMAGE类型字段存放大字段数据) 这样就为管理多媒体数据 大文件和图片提供了支持
操作BLOB字段的实现过程
我们在Access中创建一个新的数据库文件 文件名是bmp mdb
各字段的其它设置(如字段宽度等) 均采用缺省形式即可
编程前还需要做的一步准备工作是在操作系统的ODBC配置中建立指向bmp mdb数据库的连接 名称定为bmptable
下面的程序片段实现了数据库的连接 图片的插入 更新 删除和查询 考虑文章的篇幅 本文只列出与主题相关的程序源码
连接Access数据库
SQLCA DBMS = ODBC
// SQLCA为全局transaction事务变量
SQLCA AutoCommit = False
SQLCA DBParm = Connectstring= DSN=bmptable;UID=;PWD=
CONNECT USING SQLCA;
If SQLCA SQLCode <> Then
MessageBox ( 数据库错误 连接失败! )
Halt close;
End If
将BMP图片存入数据库
integer bmpno icount
//变量bmpno存放给定的图片编号
string filepath filename
blob blb_tmp
//…此处对图片编号bmpno赋值 例如bmpno= ;可以通过程序实现为弹出对话框窗口提供一个图片编号
//查询指定的图片编号是否已经存在
icount=
SELECT COUNT() INTO :icount
FROM bmptable
WHERE bmptable bmpno=:bmpno
USING SQLCA; //:bmpno为给定的图片编号
if icount> then
MessageBox( 查询结果 string(bmpno)+ 号图片已经存在 请输入一个新的图片编号 )
return
end if
//在OLE控制对象ole_ 中插入BMP图片文件
GetFileOpenName( 请选择一个需要插入的BMP图片文件 filepath filename BMP BMP图片文件( BMP) BMP )
If Len(filepath)= Then
Return
End If
If ole_ InsertFile(filepath)<> Then //OLE错误
Return
End If
//新图片入库
string sql
sql= INSERT INTO bmptable (bmpno bmpdata bmpname) &&
VALUES ( &&
+string(bmpno)+ &&
+filename+ )
EXECUTE IMMEDIATE :sql;
If SQLCA SQLDBCode= Then
MIT USING SQLCA;
cha138/Article/program/PB/201311/24625相关参考