• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在PB中用OLE存取blob類型數據(三)

    發表于:2008-04-22來源:作者:點擊數: 標簽:blobOLE存取類型數據
    6、源程序建立 1)首先在 數據庫 中建立如下結構的表blobsave: 字段名稱? 數據類型?? 備注 id???? char(4)? primairy key index s_path?? char(50) pic??? binary (50) 2)在PB建立PBl庫blobsave.PBl 3)在PBl庫blobsave.PBl中建立應用bl
    6、源程序建立

      1)首先在數據庫中建立如下結構的表blobsave:

       字段名稱?  數據類型??  備注

       id????  char(4)?  primairy key index

       s_path??  char(50)

       pic???   binary (50)

      2)在PB建立PBl庫blobsave.PBl

      3)在PBl庫blobsave.PBl中建立應用blobsave

      在應用的open事件中設置數據庫連接程序(本程序中采用的是odbc方式連接數據庫,讀者可根據自己所建立的數據庫的不同選用不同的連接方式,以下連接數據庫的代碼也有所改動,至于連接不同的數據庫的方法,請參考有關資料,本文不做詳細介紹):

      SQLCA.DBMS = "ODBC"
      SQLCA.AutoCommit = False
      SQLCA.DBParm = "Connectstring="DSN=blob""
      connect;
      open(w_main)

      其中命令按鈕cb_path的clicked中的代碼格式如下:open(w_path)

      其中命令按鈕cb_dbblob的clicked中的代碼格式如下:open(w_dbblob)

      其中命令按鈕cb_OLEblob的clicked中的代碼格式如下:open(w_OLEblob)

      4) 建立數據窗口dw_blobsave

      按照上文中建立數?荽翱詰腷lob列的方法建立數據窗口dw_blobsave如圖所示:

      其中:add,del,save,cancel,,retrieve等分別為數據窗口dw_blobsave的append row,delete row,update,retrieve動作按鈕。

    首先創建實例變量 OLEstorage stor1

      然后如圖建立窗口w_path,其中數據窗口控件dw_1的rowfocuschanged中的代碼如下:

      long row_num
      row_num=dw_1.getrow()
      if row_num >0 then
      ole_1.insertfile(dw_1.object.s_path[row_num])
      end if

      其中數據窗口dw_1的buttonclicked中的代碼如下:

      if dwo.name="cbselect" then
      long row_num
      row_num=dw_1.getrow()
      string filepath,filename
      getfileopenname("請選擇備注文件",filepath,filename)
      dw_1.object.s_path[row_num]=filepath
      ole_1.insertfile(filepath)
      end if

      保存窗口w_path

      6)建立窗口w_dbblob

      打開w_path,把其另存為w_dbblob,改變數據窗口dw_1的rowfocuschanged中的代碼如下:

      blob text1
      long row_num
      row_num=dw_1.getrow()
      if row_num>0 then
      string id
      id = dw_1.object.id[row_num]
      sqlca.autocommit=true
      selectblob pic into :text1 from blobsave where id = :id;
      ole_1.objectdata=text1
      sqlca.autocommit=false
      end if

      改變數據窗口dw_1的buttonclicked中的代碼如下:

      long row_num
      if dwo.name="cbselect" then
      row_num=dw_1.getrow()
      string filepath,filename
      getfileopenname("請選擇備注文件",filepath,filename)
      dw_1.object.s_path[row_num]=filepath
      ole_1.insertfile(filepath)
      end if
      if dwo.name="cbsave" then
      string id
      sqlca.autocommit = true
      blob text1
      text1 = ole_1.objectdata
      dw_1.update()
      commit;
      row_num=dw_1.getrow()
      id=dw_1.object.id[row_num]
      updateblob blobsave
      set pic = :text1
      where id = :id ;
      commit;
      sqlca.autocommit = FALSE
      dw_1.retrieve()
      dw_1.scrolltorow(row_num)
      end if
      保存窗口w_dbblob

      7)建立窗口w_OLEblob

      打開w_path,把其另存為w_OLEblob,在窗口w_OLEblob的open事件中寫入以下代碼:

      stor1 = create olestorage
      stor1.open("c:\p1.ole") //打開或創建ole文件
      在窗口w_OLEblob的close事件中寫入以下代碼:
      destroy stor1

      改變數據窗口dw_1的rowfocuschanged中的代碼如下:

      blob text1
      long row_num
      row_num=dw_1.getrow()
      if row_num>0 then
      string id
      id = dw_1.object.id[row_num]
      ole_1.open(stor1,"w"+id)
      end if

      改變數據窗口dw_1的buttonclicked中的代碼如下:

      long row_num
      if dwo.name="cbselect" then
      row_num=dw_1.getrow()
      string filepath,filename
      getfileopenname("請選擇備注文件",filepath,filename)
      dw_1.object.s_path[row_num]=filepath
      ole_1.insertfile(filepath)
      end if
      if dwo.name="cbsave" then
      string id
      row_num=dw_1.getrow()
      id=dw_1.object.id[row_num]
      ole_1.saveas(stor1,"w"+id)
      stor1.save()
      end if

      保存窗口w_OLEblob,運行應用程序即可。

      7、三種方法的優缺點

      方法一:文件保存在固定的路徑下,數據庫中存取文件路徑和名稱可以節省數據空間,避免了數據庫過分膨脹,但備注文件必須在一定的目錄下,不能丟失,且同一目錄下文件不能重名,對文件的管理造成一定的困難,另外,在OLE控件中瀏覽顯示備注文件時,由于每次都要調用服務器程序,所以速度較慢。

      方法二:在數據庫中用blob類型或者varbinary類型字段存儲備注文件,當文件存儲在數據庫中以后,就可以刪除硬盤上原來的臨時文件,不需要復雜的二進制文件管理,且數據庫可以存儲在網絡服務器上,對數據的共享非常方便。

      方法三:在本地用OLE存儲結構存儲備注文件??梢园阉械亩M制文件信息存儲在一個OLE存儲文件中,管理比較方便。當二進制文件信息存儲后,可以刪除原來的臨時文件;因為打開存儲文件后不需要每次執行服務器程序來顯示存儲信息,所以存取速度較快。 說明:本文在PB6.5,Sql anywhere數據庫和PB6.5,Sql Server數據庫下,windows98,windows me,NT4.0平臺上試驗通過。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>