其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

在PowerBuilder中操作BLOB数据的技巧[1]


发布日期:2023年03月24日
 
在PowerBuilder中操作BLOB数据的技巧[1]

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中创建一个新的数据库文件文件名是bmpmdb

各字段的其它设置(如字段宽度等)均采用缺省形式即可

编程前还需要做的一步准备工作是在操作系统的ODBC配置中建立指向bmpmdb数据库的连接名称定为bmptable

下面的程序片段实现了数据库的连接图片的插入更新删除和查询考虑文章的篇幅本文只列出与主题相关的程序源码

连接Access数据库

SQLCADBMS = ODBC

// SQLCA为全局transaction事务变量

SQLCAAutoCommit = False

SQLCADBParm = Connectstring=DSN=bmptable;UID=;PWD=

CONNECT USING SQLCA;

If SQLCA SQLCode <> Then

MessageBox (数据库错误 连接失败!

Halt close;

End If

将BMP图片存入数据库

integer bmpnoicount

//变量bmpno存放给定的图片编号

string filepathfilename

blob blb_tmp

//…此处对图片编号bmpno赋值例如bmpno=;可以通过程序实现为弹出对话框窗口提供一个图片编号

//查询指定的图片编号是否已经存在

icount=

SELECT COUNT() INTO :icount

FROM bmptable

WHERE bmptablebmpno=:bmpno

USING SQLCA; //:bmpno为给定的图片编号

if icount> then

MessageBox(查询结果string(bmpno)+ 号图片已经存在请输入一个新的图片编号

return

end if

//在OLE控制对象ole_中插入BMP图片文件

GetFileOpenName(请选择一个需要插入的BMP图片文件filepathfilenameBMPBMP图片文件(BMP)BMP

If Len(filepath)= Then

Return

End If

If ole_InsertFile(filepath)<> Then //OLE错误

Return

End If

//新图片入库

string sql

sql= INSERT INTO bmptable (bmpnobmpdatabmpname) &&

VALUES (&&

+string(bmpno)+&&

+filename+

EXECUTE IMMEDIATE :sql;

If SQLCASQLDBCode= Then

COMMIT USING SQLCA;

[] []

               

上一篇:在PowerBuilder中操作BLOB数据的技巧[2]

下一篇:基于Delphi的组件设计之简单实例