首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務員 | 報關員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師
注冊資產評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質量工程師 | 物業(yè)管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師
設備監(jiān)理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

數(shù)據(jù)庫工程師:在PB中用OLE存取blob類型數(shù)據(jù)(三)

  6、源程序建立

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

   字段名稱  數(shù)據(jù)類型  備注

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

   s_path  char(50)

   pic   binary (50)

  2)在PB建立PBl庫blobsave.PBl

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

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

  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) 建立數(shù)據(jù)窗口dw_blobsave

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

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

首先創(chuàng)建實例變量 OLEstorage stor1

  然后如圖建立窗口w_path,其中數(shù)據(jù)窗口控件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

  其中數(shù)據(jù)窗口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,改變數(shù)據(jù)窗口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

  改變數(shù)據(jù)窗口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") //打開或創(chuàng)建ole文件
  在窗口w_OLEblob的close事件中寫入以下代碼:
  destroy stor1

  改變數(shù)據(jù)窗口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

  改變數(shù)據(jù)窗口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、三種方法的優(yōu)缺點

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

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

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

文章搜索
軟件水平考試欄目導航
版權聲明:如果軟件水平考試網(wǎng)所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉載本軟件水平考試網(wǎng)內容,請注明出處。