PowerBuilder提供的BLOB(Binary Large Object)數據類型可以用來處理大型數據包括圖像大文本Word文檔二進制文件和多媒體等各種數據它的長度可以是~GB字節我們利用BLOB類型的變量可以將數據傳遞給數據庫以大字段方式存儲但是用通常的數據窗口技術無法將BLOB類型數據加入到數據庫中也不能將數據庫中相應字段的數據提取出來即使在程序中直接使用UPDATE和SELECT等SQL語句也是無法對BLOB類型數據進行操作的下面筆者將介紹在PowerBuilder 中操作BLOB類型數據的技巧
程序設計原理
在PB中實現BLOB類型數據的入庫和查詢主要要用到兩條特殊的SQL命令UPDATEBLOB和SELECTBLOB首先定位要進行操作的記錄然後使用UPDATEBLOB命令就可以將BLOB類型變量中存放的數據傳遞給數據庫而使用SELECTBLOB則是將指定記錄中的大字段數據傳遞給BLOB變量
使用BLOB類型變量獲取外界文件的數據內容還必須借助於PB提供的可視化OLE控制對象通過它可以將指定的文件內容顯示成相應的對象(如BMP圖片)雙擊它就可以激活相應的OLE服務器應用程序來編輯修改對象的內容同時也可以讀取對象的數據內容(利用OLE控件的ObjectData屬性)給BLOB類型變量賦值
下面結合一個簡單的程序實例講述如何處理BLOB數據類型在這個例子中BMP圖片將作為一個大字段存儲在數據庫中我們選擇Microsoft Access 作為後台數據庫它的字段類型中包含OLE對象類型(如果選擇MS SQL Server作為數據庫服務器可以使用TEXT或IMAGE類型字段存放大字段數據)這樣就為管理多媒體數據大文件和圖片提供了支持
操作BLOB字段的實現過程
我們在Access中創建一個新的數據庫文件文件名是bmpmdb
各字段的其它設置(如字段寬度等)均采用缺省形式即可
編程前還需要做的一步准備工作是在操作系統的ODBC配置中建立指向bmpmdb數據庫的連接名稱定為bmptable
下面的程序片段實現了數據庫的連接圖片的插入更新刪除和查詢考慮文章的篇幅本文只列出與主題相關的程序源碼
連接Access數據庫
SQLCADBMS = ODBC
// SQLCA為全局transaction事務變量
SQLCAAutoCommit = False
SQLCADBParm = Connectstring=DSN=bmptable;UID=;PWD=
CONNECT USING SQLCA;
If SQLCA SQLCode <> Then
MessageBox (數據庫錯誤 連接失敗!)
Halt close;
End If
將BMP圖片存入數據庫
integer bmpnoicount
//變量bmpno存放給定的圖片編號
string filepathfilename
blob blb_tmp
//…此處對圖片編號bmpno賦值例如bmpno=;可以通過程序實現為彈出對話框窗口提供一個圖片編號
//查詢指定的圖片編號是否已經存在
icount=
SELECT COUNT() INTO :icount
FROM bmptable
WHERE bmptablebmpno=:bmpno
USING SQLCA; //:bmpno為給定的圖片編號
if icount> then
MessageBox(查詢結果string(bmpno)+ 號圖片已經存在請輸入一個新的圖片編號)
return
end if
//在OLE控制對象ole_中插入BMP圖片文件
GetFileOpenName(請選擇一個需要插入的BMP圖片文件filepathfilenameBMPBMP圖片文件(BMP)BMP)
If Len(filepath)= Then
Return
End If
If ole_InsertFile(filepath)<> Then //OLE錯誤
Return
End If
//新圖片入庫
string sql
sql= INSERT INTO bmptable (bmpnobmpdatabmpname) &&
VALUES (&&
+string(bmpno)+&&
+filename+)
EXECUTE IMMEDIATE :sql;
If SQLCASQLDBCode= Then
COMMIT USING SQLCA;
[] []
From:http://tw.wingwit.com/Article/program/PB/201311/24625.html