摘要:在PowerBuilder编程开发中,大文本(或大二进制)数据的存储操作具有一定的特殊性,主要体现在以下三个方面:一是大文本对象不能用一般的字符串函数进行操作,只能用PowerBuilder提供的BLOB编辑函数操作;二是由于所要操纵的文本对象过大,需要编制输出输入函数(或过程)进行预先处理;三是存储BLOB记录对事务对象有特定的要求。文章细述大文本数据操作的方法及需要注意的事项。
关键词:PowerBuilder;大文本;BLOB;数据存储
中图分类号:TP319文献标识码:A文章编号:1009-3044(2011)25-6154-02
1大文本数据的输入与保存
由于PowerBuilder每次读写操作不能超过32K字节,因此需预先编写大文本输入函数,来完成大文本的输入与输出。
函数名:F_file_input
参数:STRING FileName,BLOB lb_total_b
代码如下:
SetPointer(HOURGLASS!)
INT Li_filenum,li_loops,li_counter
LONG Ll_filelen,ll_ll_bytes_read, ll_new_pos
BLOB lb_blob_temp
Ll_filelen=FileLength(FileName) //获取文件的大小
Li_filenum=FileOpen(FileName,STREAMMODE!,READ!,LOCKREAD!) //在读取过程中设定文件为只读,其中Li_filenum为输入文件的句柄。
IFll_filelen>32766 THEN
li_loops=((ll_filelen - 1)/32766)+1
ELSE
li_loops=1
END IF//计算FileRead函数循环次数
//输入文件
FOR li_counter=1 to li_loops
ll_bytes_read=FileRead(li_filenum,lb_ blob_temp)
lb_total_b+= lb_ blob_temp
ll_new_pos+= ll_bytes_read
FileSeek(li_filenum,ll_new_pos,FROMBEGINNING!)
NEXT
FileClose(li_filenum)
Return 0
其中,参数STRING FileName为包函文件绝对路径的输入文件文件名,参数BLOB lb_total_b为生成的大文本数据。若lb_total_b是位图文件,可对其使用SetPicture函数进行图片显示,若lb_total_b是文本文件,可使用string()函数将其转成text文件。
完成数据输入后,可使用UPDATEBLOB函数对输入数据进行数据保存。UPDATEBLBO语法如下:
UPDATEBLOB TableName SET BlobColum=BlobVariable
USING SQLCA;
其中,BlobColum为数据表准备输入的大文本对象列名,该列的数据类型必须为BLOB类型,BlobVariable是PowerScript的BLOB变量,等同于上面的代码中的lb_total_b。
2 大文本数据的文件输出与打开
PowerBuilder提供SELECTBLOB语句进行BLOB输出。其使用格式与SELECT INTO语句基本相同,其语法为:
BLOB lb_blob_var
SELECTBLOB BlobColum INTO:BlobVariable FROM blob_test_table
WHERE blob_id=123
USING SQLCA;
其中,blob_test_table为包含BLOB数据的表名,BlobColum为BLOB列名,BlobVariable为PowerScript的BLOB输出变量,blob_id为该表的主键。
与大文本数据输入一样,大文本的文件输出也需要构造一个输出函数,以32K分段追加的形式进行文件输出。
函数名:F_file_output
参数:STRING FileName,BLOB lb_blob_var
代码如下:
SetPointer(HOURGLASS!)
INT Li_file