PowerBuilder 大文本数据的存取操作详解

2011-12-31 00:00:00邢小
电脑知识与技术 2011年25期


  摘要:在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