熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

在PB中用OLE存取blob類型數據(三)

2013-11-13 12:36:17  來源: SQL語言 

  源程序建立

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

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

   id  char()  primairy key index

   s_path  char(

   pic   binary (

  )在PB建立PBl庫blobsavePBl

  )在PBl庫blobsavePBl中建立應用blobsave

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

  SQLCADBMS = ODBC
  SQLCAAutoCommit = False
  SQLCADBParm = 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)

  ) 建立數據窗口dw_blobsave

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

  其中adddelsavecancelretrieve等分別為數據窗口dw_blobsave的append rowdelete rowupdateretrieve動作按鈕

首先創建實例變量 OLEstorage stor

  然後如圖建立窗口w_path其中數據窗口控件dw_的rowfocuschanged中的代碼如下

  long row_num
  row_num=dw_getrow()
  if row_num > then
  ole_insertfile(dw_objects_path[row_num])
  end if

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

  if dwoname=cbselect then
  long row_num
  row_num=dw_getrow()
  string filepathfilename
  getfileopenname(請選擇備注文件filepathfilename)
  dw_objects_path[row_num]=filepath
  ole_insertfile(filepath)
  end if

  保存窗口w_path

  )建立窗口w_dbblob

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

  blob text
  long row_num
  row_num=dw_getrow()
  if row_num> then
  string id
  id = dw_objectid[row_num]
  sqlcaautocommit=true
  selectblob pic into :text from blobsave where id = :id
  ole_objectdata=text
  sqlcaautocommit=false
  end if

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

  long row_num
  if dwoname=cbselect then
  row_num=dw_getrow()
  string filepathfilename
  getfileopenname(請選擇備注文件filepathfilename)
  dw_objects_path[row_num]=filepath
  ole_insertfile(filepath)
  end if
  if dwoname=cbsave then
  string id
  sqlcaautocommit = true
  blob text
  text = ole_objectdata
  dw_update()
  commit
  row_num=dw_getrow()
  id=dw_objectid[row_num]
  updateblob blobsave
  set pic = :text
  where id = :id
  commit
  sqlcaautocommit = FALSE
  dw_retrieve()
  dw_scrolltorow(row_num)
  end if
  保存窗口w_dbblob

  )建立窗口w_OLEblob

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

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

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

  blob text
  long row_num
  row_num=dw_getrow()
  if row_num> then
  string id
  id = dw_objectid[row_num]
  ole_open(storw+id)
  end if

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

  long row_num
  if dwoname=cbselect then
  row_num=dw_getrow()
  string filepathfilename
  getfileopenname(請選擇備注文件filepathfilename)
  dw_objects_path[row_num]=filepath
  ole_insertfile(filepath)
  end if
  if dwoname=cbsave then
  string id
  row_num=dw_getrow()
  id=dw_objectid[row_num]
  ole_saveas(storw+id)
  storsave()
  end if

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

  三種方法的優缺點

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

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

  方法三在本地用OLE存儲結構存儲備注文件可以把所有的二進制文件信息存儲在一個OLE存儲文件中管理比較方便當二進制文件信息存儲後可以刪除原來的臨時文件因為打開存儲文件後不需要每次執行服務器程序來顯示存儲信息所以存取速度較快 說明本文在PBSql anywhere數據庫和PBSql Server數據庫下windowswindows meNT平台上試驗通過


From:http://tw.wingwit.com/Article/program/SQL/201311/16227.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.