如何在powerbuilder中将ole对象(包含jpg,excel,pdf文件)保存到文件中

时间:2015-03-01 11:32:20

标签: oracle blob ole powerbuilder

我使用oracle中的powerbuilder ole控件以blob格式保存数据。

现在我们要将这些blob转换为文件, 文件格式不同(PDF,JPG,EXCEL,TEXT,DOC)

有超过1百万个文件,因此使用olecontrol手动打开和保存并不容易。

我们可以通过脚本自动保存blob到powerbuilder中的文件来实现吗

1 个答案:

答案 0 :(得分:1)

是的,有可能:

  1. 在PowerBuilder嵌入式SQL中编写游标,为blob表中的每条记录获取密钥和文件扩展名(如果有的话)。这种事情的语法如下:

    Long ll_Key
    String ls_Ext
        DECLARE GetBlobCursor CURSOR FOR  
        SELECT blob_key,   
               blob_extension  
          FROM blob_table  ;
    /* need to loop here while SQLCA.SQLCode is good */
         FETCH GetBlobCursor   
          INTO :ll_Key,   
               :ls_Ext  ;
    
  2. 使用SELECTBLOB嵌入式SQL语句将blob数据转换为PowerBuilder BLOB变量:

        Blob lblob_File
    SELECTBLOB fileblob 
      INTO :lblob_File 
      FROM blobtable 
     WHERE blob_key = :ll_Key ;
    
  3. 使用FileOpen和FileWrite编写具有有效文件名和扩展名的Blob:

    Long ll_Loops, ll_Step
    Int li_File
    String ls_Path
    ls_Path = "<where do you want me?>." + String(ll_Key) + "." + ls_Ext
    li_File = FileOpen(ls_Path, StreamMode!, Write!, LockWrite!, Append!)
    If li_File > 0 Then
        // Determine how many times to call FileWrite
        ll_FileLen = Len(lblob_File)
        If ll_FileLen > 32765 Then
            If Mod(ll_FileLen, 32765) = 0 Then
                ll_Loops = ll_FileLen/32765
            Else
                ll_Loops = (ll_FileLen/32765) + 1
            End If
        Else
            ll_Loops = 1
        End If
        For ll_Step = 1 To ll_Loops
            FileWrite(li_File,BlobMid(lblob_File,((ll_Step - 1)*32765) + 1, 32765))
        Next
    Else
        //log the error, or handle
    End If
    FileClose(li_File)
    
  4. 希望能让你开始。