 |
 |
在開發(fā)數(shù)據(jù)庫管理系統(tǒng)時,根據(jù)設(shè)計需要,我們往往會設(shè)置BLOB類型的字段,BLOB字段的處理直接影響到系統(tǒng)的靈活性,下面筆者將簡單介紹在PowerBuilder和Delphi編程環(huán)境下使用BLOB字段的方法。
1.BLOB數(shù)據(jù)類型
BLOB全稱為Binary Large Objects,即大型二進制對象。實際上,在一些數(shù)據(jù)庫系統(tǒng)中并不將其稱之為BLOB字段,如Access中的OLE對象和備注類型、VFP中的MEMO類型、Oracle中的LONG BINARY類型、Sybase中的 LONG VARCHAR、SQL Server中的IMAGE等等,但從廣義上講,它們都屬于BLOB類型。我們可以把BLOB區(qū)別為三種形式:聲像數(shù)據(jù)、二進制數(shù)據(jù)和大文本數(shù)據(jù)。因此,最常見的應(yīng)用就是存儲圖形、聲音等對象,此外大型的二進制對象、OLE對象也可以通過BLOB類型存入數(shù)據(jù)庫,如果文本對象過大,超出了文本類型的規(guī)定長度,則必須用BLOB字段進行存儲。我們在經(jīng)常使用的編程環(huán)境中并不能直接支持BLOB字段,因此需要調(diào)用相應(yīng)的函數(shù)完成BLOB的使用。
2.Delphi環(huán)境下的BLOB使用
實現(xiàn)文字材料的數(shù)據(jù)庫管理時,經(jīng)常會遇到特殊字符的輸入和顯示問題,如在檔案管理中,檔案文件名中經(jīng)常會出現(xiàn)類似于 C3I 這樣的上下標(biāo)形式或其它特殊形式和字符,雖然特殊字符部分可以在編輯控件中顯示或瀏覽,但大多數(shù)格式字符如上下標(biāo)、根號等的顯示是不允許的,因此可以利用BLOB字段解決特殊字符輸入和顯示問題。下面以PARADOX數(shù)據(jù)庫環(huán)境為例簡單介紹在Delphi環(huán)境下的BLOB使用方法。
首先考慮到BLOB字段的性質(zhì)是不可能直接進行顯示的,即不能用類型轉(zhuǎn)化之類的方法,但作為數(shù)據(jù)集字段可以調(diào)用諸如LOADFROMFILE或SAVETOFILE之類的函數(shù),這與OLE控件的方法完全類似,因此可以在原文件表中建立一個新的字段,其類型為BLOB,并為此字段生成一個顯示的全局變量。
(1)錄入
首先完成OLE控件的編輯工作,按下錄入按鈕后將其內(nèi)容保存到當(dāng)前記錄的NEW字段中,由于目前是處理編輯狀態(tài),所以標(biāo)識當(dāng)前字段的批示符為“I”。其實現(xiàn)方法是先利用SaveToFile將OLE控件中內(nèi)容保存在臨時文件TEMPOLE.NNN中,再將此文件內(nèi)容調(diào)入到表中的NEW字段中(即BLOB字段),在調(diào)入前必須保證表處理為可編輯狀態(tài)。
procedure TForm1.Button1Click(Sender: TObject);
//錄入按鈕的響應(yīng)事件
begin
ole1.SaveToFile('tempole.nnn');
//保存OLE控件中內(nèi)容到臨時文件中
table1.edit; //設(shè)置表的編輯狀態(tài)
table1new.LoadFromFile('tempole.nnn');
//調(diào)整表中NEW字段的內(nèi)容為臨時文件的內(nèi)容
DBGrid1.Fields[5].AsString:='1';
//調(diào)整表中特殊標(biāo)志字段的內(nèi)容為1
end;
(2)顯示
下面的事件處理是將當(dāng)前記錄的NEW字段內(nèi)容讀出到OLE控件中,以便用戶查看。按下顯示按鈕的作用就是將當(dāng)前記錄對應(yīng)的特殊文件名在下面的OLE控件中進行顯示。
procedure TForm1.Button2Click(Sender: TObject);
begin
if DBGrid1.Fields[5].AsString='1' then
//若含特殊字符
begin
table1new.SaveToFile('tempole.nnn');
//將表NEW字段的內(nèi)容保存為臨時文件
ole1.LoadFromFile('tempole.nnn');
//將OLE控件的內(nèi)容調(diào)整為臨時文件內(nèi)容
end;
end;
(3)瀏覽
實際上瀏覽的實現(xiàn)所采用的方法就是前面的錄入和顯示方法。
在以上方法基礎(chǔ)上就可以方便地實現(xiàn)帶特殊字符的表格式瀏覽了。這里用到了動態(tài)創(chuàng)建OleContainer方法,并根據(jù)是否有特殊字符將內(nèi)容調(diào)入。
procedure TForm1.Button3Click(Sender: TObject);
var
temp:Array[1..100]of TOleContainer;
i:integer;
begin
showole:=not showole;
//是否瀏覽
table1.First;
i:=0;
while not table1.eof do
begin
i:=i+1;
if showole=true then
begin
temp[i]:=TOleContainer.Create(self);
//動態(tài)創(chuàng)建OLE控件
temp[i].parent:=form1;
temp[i].width:=200;
//設(shè)置每個動態(tài)生成的OLE控件的大小、位置
temp[i].height:=25;
temp[i].left:=DBGrid1.Left-200;
temp[i].top:=temp[i].Height*(i-1)+DBGrid1.Top+20;
if(table1ole.AsString='1') then //若含特殊字符
begin
table1new.SaveToFile('tempole.nnn');//取字段內(nèi)容,保存為臨時文件
temp[i].LoadFromFile('tempole.nnn');
//將內(nèi)容調(diào)入到動態(tài)生成的OLE控件中
end
end
else //取消瀏覽
temp[i].visible:=false;
//撤消動態(tài)生成的OLE控件的顯示狀態(tài)
table1.Next;
end;
end;
這里只利用按鈕方式切換瀏覽狀態(tài),要求在瀏覽和取消瀏覽操作之間不要有其它操作,但在實際應(yīng)用中我們是利用多頁面的切換自動完成瀏覽狀態(tài)的切換的。
(3)補充
在以上的作法中,需要聲明一個table1new變量,即根據(jù)表中的NEW字段(BLOB類型)所聲明的一個長久變量table1new:TblobField,在查詢中不可能提前定義好所有可能的字段變量,因此可以用強制類型的方法實現(xiàn)。假設(shè)存在查詢控件query1和OLE控件filename2,則顯示時可以采用以下語句:
with query1.fields.FieldByName('NEW') as TBlobField do savetofile('tempole.nnn');
form1.filename2.LoadFromFile('tempole.nnn');
以上簡要介紹了在Delphi環(huán)境下BLOB數(shù)據(jù)類型的使用方法,希望大家在今后的編程中用好BLOB數(shù)據(jù)類型。
|
作者:未知 | 文章來源:網(wǎng)絡(luò) | 更新時間:2007-10-26 11:07:05
|
|
 |
 |
最新文章 |
|
|
 |