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

字號:

4、處理blob類型數(shù)據(jù)
    對于大二進制數(shù)據(jù),在PB Script中是用blob數(shù)據(jù)類型表示并加以處理。標準SQL語句中的select、insert和update語句無法直接查詢blob類型的數(shù)據(jù),在PB中操作blob類型的數(shù)據(jù)只能用專用的語句,從數(shù)據(jù)庫中查詢blob類型的數(shù)據(jù)的命令是:
    selectblob restofselectstatement {using transactionobject};
    更新數(shù)據(jù)庫中blob類型數(shù)據(jù)的格式是:
    updateblob tablename
    set blobcolumn = blobvarible  
    restofupatestatement {using transctionobject};
    如連接的數(shù)據(jù)庫是sybase或者Sql,則selectblob和updateblob語句要求數(shù)據(jù)庫的自動提交方式為true,所以在在每次調(diào)用selectblob和updateblob語句以前必須用命令 Sqlca.autocommit=true,把數(shù)據(jù)庫的自動提交方式設(shè)置為true,在updateblob語句的結(jié)束后,再用命令Sqlca.autocommit = false,把自動提交方式設(shè)置為false。 索數(shù)據(jù)的參數(shù)(如flag),然后在可修改列的Protect后的框中輸入(user_name是該DataWindow中的一列,代表輸入者的名稱):
    5、數(shù)據(jù)窗口的blob列
    5.1 數(shù)據(jù)窗口blob列的功能
    在PB 的datawindow畫板中DBOLE控件允許用戶利用這個控件瀏覽和操作數(shù)據(jù)庫中的大二進制數(shù)據(jù),即通過DBOLE控件可以作如下操作:
    往數(shù)據(jù)庫中存儲大二進制數(shù)據(jù),如:excel工作表、word文檔、視頻文件、圖片文件等各種格式的文件;
    從數(shù)據(jù)庫中檢索數(shù)據(jù)到datawindow對象; 
    使用OLE服務(wù)器程序察看修改數(shù)據(jù); 
    將修改后的數(shù)據(jù)保存回數(shù)據(jù)庫;
    5.2 在數(shù)據(jù)窗口中添加blob列的的步驟
    1)選擇具有二進制字段的數(shù)據(jù)表作為數(shù)據(jù)源建立一新的數(shù)據(jù)窗口(該窗口可以至少需要包含非數(shù)據(jù)庫表的標識列)
    2)選擇insert -control-OLE database blob 菜單,在數(shù)據(jù)窗口的detail節(jié)中要插入blob列的位置單擊鼠標,這時將顯示如圖1所示的對話框
    下面解釋這些屬性的具體含義
    1)client class: 客戶類名,默認為datawindow
    2)client name:客戶名,默認為untitled
    3)table: 選擇含有blob列的數(shù)據(jù)庫表,所選表的字段將出現(xiàn)在右側(cè)的large binary/text column列表框中。
    4)large binary/text column:選擇一個blob類型的字段列
    5)key clause:檢索和更新blob數(shù)據(jù)的關(guān)鍵字表達式其中使用帶冒號前綴的變量指出是數(shù)據(jù)窗口對象的列,如 表達式 id=:id,id是數(shù)據(jù)庫表中的列,變量指出數(shù)據(jù)窗口對象的列
    6)filetemplate :如果需要OLE應(yīng)用服務(wù)器每次打開相同的文件,則在filetemplate框中輸入文件名。
    7)OLE class :如果不需要OLE應(yīng)用服務(wù)器每次打開相同的文件,則在OLE class框中選擇一個OLE類,如Pbrush。
    8)Client name expression:顯示在OLE服務(wù)器應(yīng)用程序窗口標題的文字,可以輸入為:"對應(yīng)記錄的id號是"+id
    單擊ok按鈕關(guān)閉對話框,將dbole列添加到適當?shù)奈恢茫4鏀?shù)據(jù)窗口。
    預覽則可以對數(shù)據(jù)庫中的blob數(shù)據(jù)進行存取,但是在新建的記錄中只能存取OLE class框中選擇的一種格式的blob數(shù)據(jù),不能存儲多種格式的數(shù)據(jù);但如果數(shù)據(jù)庫中存有多種格式的數(shù)據(jù),可以預覽各種格式的數(shù)據(jù)。