一、概述
Delphi作為Windows下的快速開發工具,不僅能開發一般的Windows應用程序,而且還具有強大的資料庫應用程式開發功能。 Delphi本身提供了對BDE,ODBC,ADO和InterBase幾種資料庫驅動的支持,能夠滿足不同應用對資料庫程式開發的需求。
然而,在發布用Delphi開發的資料庫程式時,除了安裝應用程式之外,還需要同時發布資料庫驅動程式。這對於一些只涉及單一或多個簡單表格資料儲存的單機應用程式來說,就顯得有點點頭重腳輕的感覺了。況且,有些應用程式本身需要儲存大量數據,但本身又要求結果短小精悍的話,用Delphi常規開發資料庫的方法就不能滿足需求了。
那麼,有沒有辦法解決上述矛盾,開發出能脫離龐大的資料庫驅動程式的」瘦」資料庫單機應用程式呢? Delphi5在Midas控制面板中提供了一個TClientDataSet控件,可以很好地解決這個問題。
二、TClientDataSet使用要點
TClientDataSet控制項繼承自TDataSet,其資料儲存檔案格式副檔名為.cds,是基於檔案型資料儲存和操作的控制項。此控制項封裝了對資料進行操作處理的介面和功能,而本身並不依賴上述幾種資料庫驅動程序,基本上能滿足單機」瘦」資料庫應用程式的需要。
1. TClientDataSet的基本屬性與方法介紹
1). FieldDefs: 欄位定義清單屬性
開發者可透過點選屬性編輯器中該屬性編輯按鈕,或在該控制項上按一下右鍵選擇彈出式功能表中的”Fields Editor”功能表進行欄位編輯。設定完此屬性後,實際上就相當於定義了表的結構;如果想裝入已有的數據表的結構和數據,可透過點擊右鍵選擇彈出式選單中的”Assign Local Data」選單,從彈出對話方塊中選取目前表單中已與資料庫連接好的資料集控制項名稱即可(目前窗體中必須已放置好要套用的資料集控制項並開啟啟動)。
使用注意:
對於自訂的欄位名表,該屬性編輯完後,該控制項仍然無法開啟。必須右鍵單擊該控件,選擇彈出式選單中的”Create DataSet”選單,讓該控件以上述編輯的欄位清單為依據,在建立資料集後,才能夠被啟動開啟和使用。否則,會出現類似”ClientDataSet1: Missing data PRovider or data packet.”的錯誤(包括在運行期,運行期可呼叫該控制項的CreateDataSet方法,從而動態定義欄位和表)。
2). FileName屬性
說明:資料儲存檔案的名稱。
因該控件是基於文件型的資料操作控件,因此,必須指定所操作的資料檔案名稱(預設為擴充名稱.cds),從而開啟和啟動該控件,進而進行資料編輯。
例1:利用此屬性開啟指定的.cds文件
var
Path: string;
begin
Path := ExtractFilePath(application.ExeName); //取得可執行檔路徑
CDataSet1.FileName := Path + 'test.cds';
CDataSet1.Open;
end;
3). CreateDataSet方法
說明:此方法以FieldDefs中的欄位名表為結構建立資料集,常用來進行動態定義表。
例2:動態建立一具有姓名和年齡兩個欄位的資料集。
//建立欄位名表
CDataSet.FieldDefs.Clear;
with CDataSet.FieldDefs.AddFieldDef do
begin
Name := 'Name';
Size := 10;
DataType := ftString;
end;
with CDataSet.FieldDefs.AddFieldDef do
begin
Name := 'Age';
DataType := ftInteger;
end;
//動態建立資料集
CDataSet.CreateDataSet;
//啟動並開啟該資料集
CDataSet.Open;
4). Open方法
說明: 開啟和啟動資料集控件,從而進行資料編輯。
a. 如果指定了FileName屬性,直接用Open方法即可開啟和啟動該控制項,請參閱例1。
b. 若未指定FileName屬性,可使用例2方法動態建立和開啟資料集,進而操作資料。
5). LoadFromFile和SaveToFile
說明:從文件中裝入表格結構和資料以及儲存資料到檔案。此方法類似於Word中的開啟新檔案和另存為的功能。
例3:將資料集的資料儲存到指定檔案中
CDataSet.SaveToFile('c:/windows/desktop/test.cds');
6).First(到首),Prior(向前),Next(向後),Last(到尾),Edit(編輯),CanCel(取消編輯),Post(保存),Insert(插入記錄),Append (新增記錄),Delete(刪除),Refresh(資料刷新)等資料集常用方法
說明:當指定了FileName屬性時,其Post方法可將資料存入指定的檔案中,類似其SaveToFile方法;如果未指定儲存檔案名,則Post方法只將資料儲存在RAM中。其它方法,同一般資料集控制項使用方法,略。
7).Filter, Filtered: 過濾篩選屬性
說明:用於篩選指定條件的記錄,用法同一般資料集控制項,略。
例4:在已經啟動開啟的資料集中篩選性別為男性的記錄
CDataSet.Close;
CDataSet.Filter := '性別=''' + '男' + '''';
CDataSet.Filtered := True;
CDataSet.Open;
2.使用TClientDataSet控制項的應用程式發佈的注意事項:
如前所述,使用TClientDataSet控制項的程式發佈時不需要任何資料庫驅動程序,大大節省了安裝檔案的大小。但是,在發佈程式時別忘了將Windows系統目錄下midas.dll(257KB)與應用程式一起發布(運行必須),否則,程式仍然無法正常運作。
三、結束語
透過使用Delphi中TClientDataSet控件,既實現了應用程式可徹底脫離資料庫驅動程序,也實現了常規資料集控件簡單易用的特性,為編寫」瘦」資料庫應用程式提供了一種技術方法和手段。
上述程式在Pwindows98,Delphi5下測試通過。