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

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

  6、源程序建立

  1)首先在數(shù)據(jù)庫(kù)中建立如下結(jié)構(gòu)的表blobsave:

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

   id      char(4)   primairy key index

   s_path    char(50)

   pic      binary (50)

  2)在PB建立PBl庫(kù)blobsave.PBl

  3)在PBl庫(kù)blobsave.PBl中建立應(yīng)用blobsave

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

  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動(dòng)作按鈕。

首先創(chuàng)建實(shí)例變量 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("請(qǐng)選擇備注文件",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("請(qǐng)選擇備注文件",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("請(qǐng)選擇備注文件",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,運(yùn)行應(yīng)用程序即可。

  7、三種方法的優(yōu)缺點(diǎn)

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

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

  方法三:在本地用OLE存儲(chǔ)結(jié)構(gòu)存儲(chǔ)備注文件�?梢园阉械亩M(jìn)制文件信息存儲(chǔ)在一個(gè)OLE存儲(chǔ)文件中,管理比較方便。當(dāng)二進(jìn)制文件信息存儲(chǔ)后,可以刪除原來的臨時(shí)文件;因?yàn)榇蜷_存儲(chǔ)文件后不需要每次執(zhí)行服務(wù)器程序來顯示存儲(chǔ)信息,所以存取速度較快。 說明:本文在PB6.5,Sql anywhere數(shù)據(jù)庫(kù)和PB6.5,Sql Server數(shù)據(jù)庫(kù)下,windows98,windows me,NT4.0平臺(tái)上試驗(yàn)通過。

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