首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 第 20 章:開發物件導向資料管理功能(二)─ TBlobStream 截斷方法與 Filer 物件詳解

     編輯:Delphi

TBlobStream.Truncate 方法實作解析

Truncate 方法透過呼叫 BDE API 函數 DbiTruncateBlob 實作,其核心程式碼如下:

procedure TBlobStream.Truncate;
begin
  if FOpened then
  begin
    Check(DbiTruncateBlob(FDataSet.Handle, FRecord, FFieldNo, FPosition));
    FModified := True;
  end;
end;

此方法會從 BLOB 流的目前位置開始刪除所有後續資料,並將修改旗標 FModified 設為 True。在 Delphi VCL 中,許多資料庫元件(特別是 Data Access 與 Data Control 類別)皆以 BDE API 函數為基礎封裝而成,簡化了資料庫存取操作。BDE API 更提供繞過 BDE 設定工具、直接在程式中管理 Alias(建立、修改、刪除)的函數支援,這在 Delphi 資料庫應用程式的安裝部署中極為重要。詳細的 BDE API 函數說明請參閱 Delphi 2.0 Client/Server Suite 附帶的 BDE API 線上說明文件。

20.2 讀寫物件(Filer)的實作原理與應用

讀寫物件包含 TFiler、TReader 與 TWriter 三個類別。TFiler 是檔案讀寫的基底類別,實際應用中主要使用 TReader 與 TWriter,兩者皆直接繼承自 TFiler。TFiler 定義了 Filer 物件的基本屬性與方法。

Filer 物件的兩大核心功能

  • 儲存與讀取表單檔案(DFM)及其中的元件
  • 提供資料緩衝機制,加速讀寫操作

20.2.1 TFiler 物件深度解析

TFiler 是 TReader 與 TWriter 的抽象類別,定義了元件儲存所需的基本屬性與方法。其中 Root 屬性指向被讀寫元件樹的根物件;建構子接受 Stream 物件作為參數,建立與串流的關聯,實際讀寫操作由 Stream 物件執行。因此,任何 Stream 物件可存取的媒介,皆可透過 Filer 物件進行元件存取。

TFiler 另提供 DefineProperty 與 DefineBinaryProperty 兩個方法,使物件能讀寫未定義於 published 區塊的屬性。

DFM 檔案結構與樹狀階層

DFM 檔案用於儲存 Delphi 表單。表單是 Delphi 視覺化設計的核心,對應應用程式視窗;表單上的視覺元件對應介面元素,非視覺元件(如 TTable、TOpenDialog)對應特定功能。Delphi 應用程式設計以表單設計為中心,故 DFM 檔案佔重要地位,包含表單本身及所有元件的屬性值。

視窗介面元素以擁有關係(Ownership)串聯,自然形成樹狀結構;表單元件同樣以樹狀組織,DFM 檔案邏輯上亦以樹狀結構表達此關係。DFM 實體以二進位儲存,但 Delphi 編輯器支援以文字模式檢視。以下為 DFM 文字表示範例:

object Form1: TForm1
  Left = 72
  Top = 77
  ActiveControl = DBImage1
  ...
  object Panel1: TPanel
    Left = 6
    ...
    object DBLabel1: TDBText
      ...
    end
    object DBImage1: TDBImage
      ...
    end
  end
  object Panel2: TPanel
    Left = 6
    ...
    object Label1: TLabel
      ...
    end
  end
  object Panel3: TPanel
    Left = 6
    ...
    object DBLabel2: TDBText
      ...
    end
  end
end

關於 DFM 儲存屬性值的規則,請參閱「自訂元件開發」章節。

TFiler 關鍵屬性對照

  • Root:元件樹的根節點(即表單)
  • Ancestor:根節點的祖先物件
  • IgnoreChildren:讀取元件時忽略根節點的子節點

許多 Filer 方法皆以 Root 為起點遍歷整棵元件樹。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved