程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第二十章-開發Delphi對象式數據管理功能(二)(2)

第二十章-開發Delphi對象式數據管理功能(二)(2)

編輯:Delphi

4. 析構方法Destroy

該方法產生給資源解鎖,然後釋放該資源,最後調用繼承的Destroy方法釋放ResourceStream。其實現如下:

destructor TResourceStream.Destroy;

begin

UnlockResource(HGlobal);

FreeResource(HResInfo);

inherited Destroy;

end;

回顧Initialize方法,我們不難發現:

● ResourceStream沒有額外地給資源重新分配內存,而是直接使用HGlobal句柄所指 的內存域

● ResourceStream中的資源在流的生存期,始終是Lock狀態,因此要根據Windows 的內存使用規則合理安排ResourceStream的使用

● ResourceStream只是用於訪問應用程序和動態鏈接庫中的資源的

在Classes在單元中提供了InternalReadComponentRes函數,該函數使用了TResourceStream對象從Delphi應用程序中讀取部件。Delphi是將窗體和部件信息放在模塊資源的RCDATA段的。

20.1.7 TBlobStream對象

從Delphi 數據庫開發平台這個意義上說,TBlobStream 對象是個很重要的對象。TBlobStream對象提供了修改TBlobField、TBytesField或TVarBytesField中數據的技術。開發者可以象對待文件或流那樣在數據庫域中讀寫數據。

傳統數據庫發展的一個重要趨向是往多媒體數據庫發展。目前比較著名和流行的數據庫都支持多媒體功能,多媒體數據存儲中的一大難點是數據結構不規則,數據量大。各大數據庫產品是采用BLOB技術解決多媒體數據存儲中的問題。Delphi的TBlobStream對象的意義就在於:一方面可以使Delphi應用程序充分利用多媒體數據庫的數據管理能力;另一方面又能利用Object Pascal的強大程序設計能力給多媒體數據庫提供全方向的功能擴展余地。

使用TBlobStream對象可以在多媒體數據庫的BLOB字段存儲任意格式的數據。一般說來,許多多媒體數據庫只能支持圖像、語音或者OLE服務器支持的數據。利用TBlobStream則不同,只要是程序能夠定義的數據格式,它都能在BLOB字段中讀寫,而不需要其它輔助工具。

TBlobStream用構造方法Create建立數據庫域和BLOB流的聯接。用Read或Write 方法訪問和改變域中的內容;用Seek方法,在域中定位;用Truncate方法刪除域中當前位置起所有的數據。

20.1.7.1 TBlobStream的屬性和方法

TBlobStream對象從TStream直接繼承,沒有增添新的屬性。它覆蓋了Read、Write 和Seek方法,提供了對BLOB字段的訪問操作;它增添了Truncate方法以實現BLOB字段中的刪除操作。

1. Read方法

聲明:function Read(var Buffer; Count: Longint): Longint;

Read方法從數據庫域的當前位置起復制Count個字節的內容到Buffer中。Buffer也必須至少分配Count個字節。Read方法返回實際傳輸的字節數,因為傳輸的字節數可能小於Count,所以需要選擇符的邊界判斷。

2. Write方法

聲明:function Write(const Buffer; Count: Longint); override; Longint;

Write方法從Buffer中向數據庫域的當前位置復制Count個字節的內容。Buffer必須分配有Count個字節的內存空間,函數返回實際傳輸的字節數,傳輸過程也要進行選擇符邊界判斷。

3. Seek方法

聲明:function Seek(Offset: Longint; Origin: Word): Longint;

Seek方法重新設置BLOB流中的指針位置。如果Origin的值是soFromBeginning,則新的指針位置是Offset; 如Origin的值是soFromCurrent,則新的指針位置是Position+Offset;如果Origin的值是SoFromCurrent,則新的指針位置是Size+Offset。函數返回新的指針位置值。當Origin為0(SoFromBegin)時,Offset的值必須大於等於零; 當Origin的值為2(SoFromEnd),Offset的值必須小於等於零。

4. Truncate方法

聲明:procedure Truncate;

Truncate方法撤消TBlobField、TBytesField或TVarBytesField中從當前位置起的數據。

5. Create方法

聲明:constructor Create(Field: TBlobField; Mode: TBlobStreamMode);

Create方法使用Field參數建立BLOB流與BLOB字段的聯接。Mode 的值可為bmRead、bmWrite和bmReadWrite。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved