色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

PB中想要上傳一個WORD文檔或excel文檔入數據庫,用blob字段.有高手給段代碼嗎?

呂致盈2年前12瀏覽0評論

很久沒用過PB了,網上找了一篇,大致看了一下,應該沒什么問題

--轉自51CTO論壇

在PowerBuilder里面操作BLOB數據地靈活技術

PowerBuilder提供的BLOB(BinaryLargeObject)數據類型可以用來處理大型數據,包括圖像、大文本、Word文檔、二進制文件和多媒體等各種數據,它的長度可以是0~2GB字節,我們利用BLOB類型的變量可以將數據傳遞給數據庫以大字段方式存儲。但是用通常的數據窗口技術無法將BLOB類型數據加入到數據庫中,也不能將數據庫中相應字段的數據提取出來,即使在程序中直接使用UPDATE和SELECT等SQL語句也是無法對BLOB類型數據進行操作的。下面筆者將介紹在PowerBuilder7.0中操作BLOB類型數據的技巧。

程序設計原理

在PB中實現BLOB類型數據的入庫和查詢,主要要用到兩條特殊的SQL命令——UPDATEBLOB和SELECTBLOB,首先定位要進行操作的記錄,然后使用UPDATEBLOB命令就可以將BLOB類型變量中存放的數據傳遞給數據庫,而使用SELECTBLOB則是將指定記錄中的大字段數據傳遞給BLOB變量。

使用BLOB類型變量獲取外界文件的數據內容,還必須借助于PB提供的可視化OLE控制對象,通過它可以將指定的文件內容顯示成相應的對象(如BMP圖片),雙擊它就可以激活相應的OLE服務器應用程序,來編輯修改對象的內容,同時也可以讀取對象的數據內容(利用OLE控件的ObjectData屬性),給BLOB類型變量賦值。

下面結合一個簡單的程序實例,講述如何處理BLOB數據類型。在這個例子中,BMP圖片將作為一個大字段存儲在數據庫中。我們選擇MicrosoftAccess2000作為后臺數據庫,它的字段類型中包含“OLE對象”類型(如果選擇MSSQLServer作為數據庫服務器,可以使用TEXT或IMAGE類型字段存放大字段數據),這樣就為管理多媒體數據、大文件和圖片提供了支持。

操作BLOB字段的實現過程

我們在Access中創建一個新的數據庫文件,文件名是bmp.mdb,在其中定義BMP圖片數據表bmptable如下:

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

編程前還需要做的一步準備工作是在操作系統的ODBC配置中建立指向bmp.mdb數據庫的連接,名稱定為bmptable。

下面的程序片段實現了數據庫的連接,圖片的插入、更新、刪除和查詢。考慮文章的篇幅,本文只列出與主題相關的程序源碼。

1.連接Access數據庫

SQLCA.DBMS="ODBC"

//SQLCA為全局transaction事務變量

SQLCA.AutoCommit=False

SQLCA.DBParm="Connectstring='DSN=bmptable;UID=WD='"

CONNECTUSINGSQLCA;

IfSQLCA.SQLCode<>0Then

MessageBox("數據庫錯誤","連接失敗!")

Haltclose;

EndIf

2.將BMP圖片存入數據庫

integerbmpno,icount

//變量bmpno存放給定的圖片編號

stringfilepath,filename

blobblb_tmp

//…此處對圖片編號bmpno賦值,例如bmpno=101;可以通過程序實現為彈出對話框窗口提供一個圖片編號

//查詢指定的圖片編號是否已經存在

icount=0

SELECTCOUNT()INTO:icount

FROMbmptable

WHEREbmptable.bmpno=:bmpno

USINGSQLCA;//:bmpno為給定的圖片編號

ificount>0then

MessageBox("查詢結果",string(bmpno)+"號圖片已經存在,請輸入一個新的圖片編號")

return

endif

//在OLE控制對象ole_1中插入BMP圖片文件

GetFileOpenName("請選擇一個需要插入的BMP圖片文件",filepath,filename,"BMP","BMP圖片文件(.BMP),.BMP")

IfLen(filepath)=0Then

Return

EndIf

Ifole_1.InsertFile(filepath)<>0Then//OLE錯誤

Return

EndIf

//新圖片入庫

stringsql

sql="INSERTINTObmptable(bmpno,bmpdata,bmpname)&&

VALUES("&&

+string(bmpno)+",'','"&&

+filename+"')"

EXECUTEIMMEDIATE:sql;

IfSQLCA.SQLDBCode=0Then

COMMITUSINGSQLCA;

//提交事務

Else

MessageBox("數據庫錯誤","插入失敗")

ROLLBACKUSINGSQLCA;

//事務回滾

Return

EndIf

Blb_tmp=ole_1.ObjectData

UPDATEBLOBbmptableSETbmpdata=:blb_tmp

WHEREbmptable.bmpno=:bmpno

USINGSQLCA;//更新存放圖片的字段

IfSQLCA.SQLDBCode=0Then

COMMITUSINGSQLCA;

//提交事務

MessageBox("插入成功","圖片入庫成功")

Else

MessageBox("數據庫錯誤","更新圖片失敗")

ROLLBACKUSINGSQLCA;

//事務回滾

Return

EndIf

3.從數據庫中刪除BMP圖片

UPDATEbmptableSETbmpdata=''

WHEREbmptable.bmpno=:bmpno

USINGSQLCA;

//bmpno為要刪除的圖片編號

IfSQLCA.SQLDBCode=0Then

COMMITUSINGSQLCA;

//提交事務

Else

MessageBox("數據庫錯誤","更新失敗")

ROLLBACKUSINGSQLCA;

//事務回滾

Return

EndIf

DELETEFROMbmptable

WHEREbmptable.bmpno=:bmpno

USINGSQLCA;

IfSQLCA.SQLDBCode=0Then

COMMITUSINGSQLCA;

//提交事務

MessageBox("刪除成功","圖片刪除成功")

Else

MessageBox("數據庫錯誤","刪除失敗")

ROLLBACKUSINGSQLCA;

//事務回滾

Return

EndIf

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

//需要提供一個圖片編號存放在變量bmpno中

SetNull(blb_tmp)

SELECTBLOBbmptable.bmpdataINTO:blb_tmp

FROMbmptable

WHEREbmptable.bmpno=:bmpno

USINGSQLCA;

IfNotIsNull(blb_tmp)Then

ole_1.ObjectData=blb_tmp

//雙擊OLE控制喚醒OLE服務器即可編輯圖片

EndIf

使用PB編程時,每次對數據庫進行操作后要注意檢查返回結果,以保證程序的可靠性。以上程序只是對操作BLOB數據類型的關鍵技術進行探討,通過畫板設計相應的用戶界面,即可形成一個完整的基于Client/Server結構的數據庫應用程序。