Blob对象处理:无界数据在PB中的特殊操作
大文本(Blob)对象处理是PB(Progress 4GL)编程中的一个重要概念,特别是在处理大量或无边界的二进制数据时。Blob类型的数据在PB中具有特殊的地位,因为它没有长度限制,能够存储诸如文本、图像等大型数据。以下是Blob对象处理的关键知识点: 1. **Blob类型定义**: Blob类型代表了在PB中可无限长度的数据,它可以容纳超出常规字段大小的任何信息,这使得它特别适合存储非结构化的大量数据。 2. **应用场景**: - **数据插入与更新**:在插入或更新数据时,可能会用到`Updateblob`操作,比如设置Blob字段的值或通过SQL查询进行更新。这时,必须确保AutoCommit设置为False,以便于批量处理。 - **读取操作**: - a) 当从数据库检索图像(例如,`Selectblob Blob`语句)时,结果会存储在Blob变量中。 - b) `Retrieve`操作可以通过特定的字段路径获取Blob数据,比如`Retrieve gèBlob`。 - **显示和处理**:在用户界面中,Blob数据可能需要转换为可查看的形式,如图片,这就涉及到数据的解码和显示。 3. **注意事项**: - 在使用`Updateblob`时,必须确保事务的原子性,避免数据丢失或不一致。 - 不同的数据库管理系统(DBMS)对Blob的支持可能不同,例如Oracle支持`longraw`,MSSQL Server支持`image`,而DB2/2则可能不支持直接处理Blob。 4. **实例应用**: 实际应用中,如在合同或表单输入场景下,Blob用于存储图片等二进制数据。在处理这类数据时,可能需要在特定事件(如rowfocuschanged)触发时,动态加载Blob数据,例如通过`this.getitems`获取相应Blob字段的值。 5. **数据存储和检索**: Blob数据通常通过指针或特定的变量名(如`bloblbb_pic`)进行存储。在用户界面的交互中,如`ls_htbh`,可能需要根据当前行号选择并显示相应的Blob内容。 大文本Blob对象处理在PB编程中扮演着存储和传输大规模二进制数据的角色,理解其特性、操作方式以及与不同DBMS的兼容性,对于有效管理和使用这类数据至关重要。
Blob类型的数据用来保存象大文本和图象之类的数据,这种数据长度很大、几乎没有限制。而在PB中,没有长度限制的对象仅此一种类型,所以它有特殊的处理方法。
Blob类型的数据没有边界限制,可以保存一些普通类型的字段不能保存的信息。
以下情况下考虑使用Blob类型的字段:
a)要保存OLE对象(如图形、声音等)时;
b)将大型的二进制对象存入数据库中时:
c)当文本对象过大,以至于一般的字符串函数无法对其操作时;
d)数据库中有PB不能支持的数据类型时。
普通类型的字段使用数据窗口,通过调用函数Update和Commit事务管理语句就可以保
存数据了。但Blod类型的数据非常庞大,所以这种类型字段的更新不能像普通的字段,只能用其特有的语句进行更新。Updateblob的语法格式如下:
Updateblob 表名 set Blob类型字段名 = :Blob类型变量 where 子句;
上面的语法和Update语法类似,除了使用关键字Updateblob外,其他和Update语法都相同。
普通类型的字段显示是通过数据窗口,调用Retrieve即可。但是,由于Blob类型的数据非常庞大,客户端的主缓存区开辟多么大的空间都不合适。PowerBuilder的解决方法是,不允许在数据窗口中放置Blob类型的字段,而是提供专用的提取Blob类型数据的语句。该语句语法如下:
Selectblob Blob类型的列名 into :Blob类型变量 from 表名 where 子句;
上面的语法同Select语句类似,只是使用了关键字Selectblob。另外,Selectblob和
Updateblob中的where子句都必须只能返回一行数据,也就是说,一次只能处理一个Blob类
型的数据。
关于Blob类型的处理只能通过上面的两个语句来进行。不像普通类型的字段那样数据
的更新可以通过Insert语句实现。所以,在使用Updateblob语句之前,符合where子句条件
的数据已经存在了,并且只存在一条数据。因此,如果想把大文本或者图像等Blob类型的数据写入数据库,必须首先插入这条记录的其他部分,然后再通过修改记录的方式将Blob类型数据写入。
*因为大文本对象特别庞大,当使用Updateblob时应该将事务对象的Autocommit设置为True,这很容易理解。因为这么庞大的数据量要求一次提交,显然多大的缓冲内存都不合适,只能让事务对象在合适的时候自动提交了。
*DBMS中的数据类型可以在PowerScript中与Blob数据类型相对应,如在Oracle对应为longraw,raw。在MS SQL Server中对应为image,text。在DB2/2中对应为N/A。
**实例
假设在一个应用系统中,进行合同管理时要保存合同的原样,以便以后的责任审查。用图像扫描设备将合同扫描成图形文件,以图像方式保存到数据库中,这就涉及了Blob类型的处理该软件实现时,最重要的首先是图像的保存,然后是图像的显示问题。
假设在窗口w_contract上左边是dw_1,在dw_1上显示合同中的相关数据,用户选择不同的数据行时,对应的合同文本显示在picture控件p_1上;用户点击“录入合同文本”按钮时打开w_htwb_input窗口选择合同文本对应的图形文件名称,返回后根据该文件大小进行相关处理,并保存到数据库中。
数据窗口dw_1从contract数据表中提取数据,该数据窗口中不包括Blob类型的字段htwb,其主键为合同编号(htbh)。当数据窗口的行焦点改变时读取该行中的合同文本,并显示在picture控件p_1上。在数据窗口的rowfocuschanged事件中编写脚本如下:
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zlib-1.2.12压缩包解析与技术要点
- 微信小程序滑动选项卡源码模版发布
- Unity虚拟人物唇同步插件Oculus Lipsync介绍
- Nginx 1.18.0版本WinSW自动安装与管理指南
- Java Swing和JDBC实现的ATM系统源码解析
- 掌握Spark Streaming与Maven集成的分布式大数据处理
- 深入学习推荐系统:教程、案例与项目实践
- Web开发者必备的取色工具软件介绍
- C语言实现李春葆数据结构实验程序
- 超市管理系统开发:asp+SQL Server 2005实战
- Redis伪集群搭建教程与实践
- 掌握网络活动细节:Wireshark v3.6.3网络嗅探工具详解
- 全面掌握美赛:建模、分析与编程实现教程
- Java图书馆系统完整项目源码及SQL文件解析
- PCtoLCD2002软件:高效图片和字符取模转换
- Java开发的体育赛事在线购票系统源码分析