国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

在PowerBuilder中操作BLOB數(shù)據(jù)的技巧

2024-07-21 02:10:00
字體:
供稿:網(wǎng)友

powerbuilder提供的blob(binary large object)數(shù)據(jù)類型可以用來處理大型數(shù)據(jù),包括圖像、大文本、word文檔、二進(jìn)制文件和多媒體等各種數(shù)據(jù),它的長度可以是0~2gb字節(jié),我們利用blob類型的變量可以將數(shù)據(jù)傳遞給數(shù)據(jù)庫以大字段方式存儲。但是用通常的數(shù)據(jù)窗口技術(shù)無法將blob類型數(shù)據(jù)加入到數(shù)據(jù)庫中,也不能將數(shù)據(jù)庫中相應(yīng)字段的數(shù)據(jù)提取出來,即使在程序中直接使用update和select等sql語句也是無法對blob類型數(shù)據(jù)進(jìn)行操作的。下面筆者將介紹在powerbuilder 7.0中操作blob類型數(shù)據(jù)的技巧。

程序設(shè)計(jì)原理

在pb中實(shí)現(xiàn)blob類型數(shù)據(jù)的入庫和查詢,主要要用到兩條特殊的sql命令--updateblob和selectblob,首先定位要進(jìn)行操作的記錄,然后使用updateblob命令就可以將blob類型變量中存放的數(shù)據(jù)傳遞給數(shù)據(jù)庫,而使用selectblob則是將指定記錄中的大字段數(shù)據(jù)傳遞給blob變量。

使用blob類型變量獲取外界文件的數(shù)據(jù)內(nèi)容,還必須借助于pb提供的可視化ole控制對象,通過它可以將指定的文件內(nèi)容顯示成相應(yīng)的對象(如bmp圖片),雙擊它就可以激活相應(yīng)的ole服務(wù)器應(yīng)用程序,來編輯修改對象的內(nèi)容,同時(shí)也可以讀取對象的數(shù)據(jù)內(nèi)容(利用ole控件的objectdata屬性),給blob類型變量賦值。

下面結(jié)合一個簡單的程序?qū)嵗v述如何處理blob數(shù)據(jù)類型。在這個例子中,bmp圖片將作為一個大字段存儲在數(shù)據(jù)庫中。我們選擇microsoft access 2000作為后臺數(shù)據(jù)庫,它的字段類型中包含“ole對象”類型(如果選擇ms sql server作為數(shù)據(jù)庫服務(wù)器,可以使用text或image類型字段存放大字段數(shù)據(jù)),這樣就為管理多媒體數(shù)據(jù)、大文件和圖片提供了支持。

操作blob字段的實(shí)現(xiàn)過程

我們在access中創(chuàng)建一個新的數(shù)據(jù)庫文件,文件名是bmp.mdb,在其中定義bmp圖片數(shù)據(jù)表bmptable如下:

各字段的其它設(shè)置(如字段寬度等),均采用缺省形式即可。

列名
 字段類型
 能否為空
 備注
 
bmpno
 數(shù)字
 否
 圖片編號(關(guān)鍵字)
 
bmpname
 文本
 能
 圖片名稱
 
bmpdata
 ole對象
 能
 圖片(bmp)
 


編程前還需要做的一步準(zhǔn)備工作是在操作系統(tǒng)的odbc配置中建立指向bmp.mdb數(shù)據(jù)庫的連接,名稱定為bmptable。

下面的程序片段實(shí)現(xiàn)了數(shù)據(jù)庫的連接,圖片的插入、更新、刪除和查詢??紤]文章的篇幅,本文只列出與主題相關(guān)的程序源碼。

1. 連接access數(shù)據(jù)庫


sqlca.dbms = "odbc"
// sqlca為全局transaction事務(wù)變量
sqlca.autocommit = false
sqlca.dbparm = "connectstring='dsn=bmptable;uid=;pwd='"
connect using sqlca;
if sqlca. sqlcode <> 0 then
messagebox ("數(shù)據(jù)庫錯誤", "連接失?。?)
halt close;
end if


2. 將bmp圖片存入數(shù)據(jù)庫


integer bmpno,icount
//變量bmpno存放給定的圖片編號
string filepath,filename
blob blb_tmp
//…此處對圖片編號bmpno賦值,例如bmpno=101;可以通過程序?qū)崿F(xiàn)為彈出對話框窗口提供一個圖片編號
//查詢指定的圖片編號是否已經(jīng)存在
icount=0
select count() into :icount
from bmptable
where bmptable.bmpno=:bmpno
using sqlca; //:bmpno為給定的圖片編號
if icount>0 then
messagebox("查詢結(jié)果",string(bmpno)+" 號圖片已經(jīng)存在,請輸入一個新的圖片編號")
return
end if
//在ole控制對象ole_1中插入bmp圖片文件
getfileopenname("請選擇一個需要插入的bmp圖片文件",filepath,filename,"bmp","bmp圖片文件(.bmp),.bmp")
if len(filepath)=0 then
return
end if
if ole_1.insertfile(filepath)<>0 then //ole錯誤
return
end if
//新圖片入庫
string sql
sql= "insert into bmptable (bmpno,bmpdata,bmpname) &&
values ("&&
+string(bmpno)+",'','"&&
+filename+"')"
execute immediate :sql;
if sqlca.sqldbcode=0 then
commit using sqlca;
//提交事務(wù)
else
messagebox("數(shù)據(jù)庫錯誤","插入失敗")
rollback using sqlca;
//事務(wù)回滾
return
end if
blb_tmp=ole_1.objectdata
updateblob bmptable set bmpdata=:blb_tmp
where bmptable.bmpno=:bmpno
using sqlca; //更新存放圖片的字段
if sqlca.sqldbcode=0 then
commit using sqlca;
//提交事務(wù)
messagebox("插入成功","圖片入庫成功")
else
messagebox("數(shù)據(jù)庫錯誤","更新圖片失敗")
rollback using sqlca;
//事務(wù)回滾
return
end if


3. 從數(shù)據(jù)庫中刪除bmp圖片


update bmptable set bmpdata=''
where bmptable.bmpno=:bmpno
using sqlca;
//bmpno為要刪除的圖片編號
if sqlca.sqldbcode=0 then
commit using sqlca;
//提交事務(wù)
else
messagebox("數(shù)據(jù)庫錯誤","更新失敗")
rollback using sqlca;
//事務(wù)回滾
return
end if
delete from bmptable
where bmptable.bmpno=:bmpno
using sqlca;
if sqlca.sqldbcode=0 then
commit using sqlca;
//提交事務(wù)
messagebox("刪除成功","圖片刪除成功")
else
messagebox("數(shù)據(jù)庫錯誤","刪除失敗")
rollback using sqlca;
//事務(wù)回滾
return
end if


4. 按圖片編號查詢圖片信息


//需要提供一個圖片編號存放在變量bmpno中
setnull(blb_tmp)
selectblob bmptable.bmpdata into :blb_tmp
from bmptable
where bmptable.bmpno=:bmpno
using sqlca;
if not isnull(blb_tmp) then
ole_1.objectdata=blb_tmp
//雙擊ole控制喚醒ole服務(wù)器即可編輯圖片
end if


使用pb編程時(shí),每次對數(shù)據(jù)庫進(jìn)行操作后要注意檢查返回結(jié)果,以保證程序的可靠性。以上程序只是對操作blob數(shù)據(jù)類型的關(guān)鍵技術(shù)進(jìn)行探討,通過畫板設(shè)計(jì)相應(yīng)的用戶界面,即可形成一個完整的基于client/server結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序。

注:作者沒有解決大于32k的圖片處理問題。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 民和| 石河子市| 玛曲县| 胶州市| 长汀县| 胶州市| 济南市| 信阳市| 衡阳县| 威远县| 云梦县| 昭平县| 黄大仙区| 盐源县| 湘潭县| 南涧| 六盘水市| 洪江市| 米脂县| 贺州市| 岢岚县| 青神县| 亚东县| 东乌珠穆沁旗| 奉节县| 山西省| 本溪市| 金平| 抚松县| 全南县| 霍林郭勒市| 新丰县| 瑞丽市| 水城县| 彰武县| 中牟县| 安国市| 华安县| 南康市| 无为县| 三江|