15.5.1 TDataSource部件的屬性
TDataSource部件除了其他部件都擁有的Name屬性和Tag屬性之外,主要有下面幾個屬性:
DataSet屬性:該屬性說明TDataSource部件從中獲取數據的數據集的名字,它可以是TTable部件的名字,也可以是TQuery部件的名字,甚至還可以指定其他窗體內的數據集作為該屬性的值,如在下面的程序中我們指定窗體Form2中的table1作為窗體Form1中的DataSource1的DataSet屬性值:
TForm1.Formcreate(Sender : Tobject);
Begin
DataSource1.DataSet := Form2.Table1;
end;
Enable屬性:Enable屬性可以暫時性地切斷TDataSource部件和與之相連的數據集部件的連接。這是一個布爾型變量。當它的值為False時,TDataSource部件和數據集部件的連接被切斷,且所有與TDataSource部件相連的數據浏覽部件中將變為一片空白,不顯示任何數據信息。當Enabled的值變為True時,TDataSource部件和數據集部件的連接恢復,且與TDataSource部件相連的數據浏覽部件恢復顯示數據。不過要實現上述這些功能,一般不使用TDataSource部件的Enabled屬性,而是調用數據集部件的DisableControls方法和EnableControls 方法,因為調用這兩個方法可以方便地控制與數據集部件相連的所有TDataSource部件以及與TDataSource部件相連的數據浏覽部件。
AutoEdit屬性:這是一個布爾型變量,它用於說明是否將與TDataSource部件相連的數據集置於編輯狀態。當AutoEdit的值為True時,應用程序運行時,與TDataSource相連的數據集部件自動地被設置成編輯狀態,當用戶在與TDataSource部件相連的數據浏覽部件中輸入新的值時,數據集部件中的記錄也隨之改變。如果AutoEdit的值為False,用戶想通過數據浏覽部件或程序修改數據集中的記錄,必須要調用數據集部件的Edit方法,將其置為編輯狀態之後才能夠進行。
15.5.2 TDataSource部件的事件
TDataSource部件具有三個事件:
● OnDataChange事件
● OnStateChange
● OnUpdataData
OnDataChange事件:當與TDataSource相連的數據集中的記錄指針的位置發生改變時,該事件就被觸發,也就是說當程序調用數據集部件的Next、Previous、Insert、Append等方法導致記錄指針的位置發生改變時,便會觸發該事件。該事件一般用於保持應用中多個部件之間的同步。
OnUpdataData事件:當數據集部件中當前記錄將要被修改時,觸發該事件。例如在程序調用post方法之後但在修改後的數據記錄真正被寫回磁盤中的數據庫文件之前觸發該事件,在應用中使用非數據浏覽部件時要它與數據集保持同步時常使用該事件進行相關的處理。
OnStateChange事件:當與TDataSource部件相連的數據集部件的狀態發生改變時,便觸發該事件。因為數據集部件的State屬性標明了數據集部件當前所處的狀態,當數據集的狀態發生變化時,使用該事件進行有關的處理是很有用的,在一個具體的應用中,數據集部件的狀態常常是頻繁地變化的,為了跟蹤數據集部件的狀態變化,可以用下面例子中的程序代碼將數據集部件當前的狀態顯示在一個標簽上:
TForm1.DataSource1OnStateChange(Sender : Tobject);
var
S : String;
begin
Case Table1,State of
dsInactive : S := 'Inactive';
dsBrowse : S := 'Browse';
dsEdit : S := 'Edit';
dsInsert : S := 'SetKey';
dsSetKey : S := 'SetKey';
end;
Label1.Caption := S;
end;
類似地我們也可以通過檢測數據集部件的狀態來控制有關的按鈕和菜單項是否有效。例如:在一個應用窗體中有一個InsertBtn按鈕,用於控制向數據集部件table1對應的數據庫表中插入記錄;還有一個CancelBtn按鈕用於控制是否取消用戶對當前記錄的修改或插入新記錄。下面的程序代碼根據Table1的狀態來控制這兩個按鈕的功能(是否有效,在窗體是否變灰暗)。
Form1.DataSource1OnStateChange(Sender : Tobject);
begin
InsertBtn.Enabled := (Table1.State = dsBrowse);
CancelBtn.Enabled := Table1.State in [dsInsert,dsEdit,dsSetKey]
end;
上面的代碼中,當Table1處於浏覽狀態(Browse狀態時),用戶是不能夠向數據庫表中插入新記錄的,此時InsertBtn按鈕將變灰暗即無效。當Table1不處於Browse狀態時,InsertBtn按鈕有效,用戶是可以向表中插入新記錄。同理,只有當Table1處於特入狀態(Insert狀態)或編輯狀態(Edit狀態)或查找狀態(SetKey狀態)時,CancelBtn按鈕才有效,也即用戶可以取消當前插入的記錄、修改當前的記錄以及查找到的結果等。
15.6 字段部件和字段編輯器的使用
字段部件有時又稱字段對象它對應著數據庫表中的列即字段,字段對象是不可見的部件,在Delphi中有兩種方式創建字段部件:
①在應用程序運行過程中,隨著數據集部件被激活,對應於數據庫表中每一列的字段部件便動態地被創建。
②在設計過程中,程序設計人員利用字段編輯器(Fields Editor)可以創建永久性的字段部件,即使字段對象對應的數據庫表的結構發生了變化時,這些字段部件也不會發生變化。
既然字段部件是對應於數據庫表中的各個字段的,而數據庫表中的字段有多種數據類型,所以字段部件相應也有多種類型,字段部件的類型與數據庫表中的字段的數據類型的對應關系如表15.5所示。
表15.5 字段部件的類型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字段部件的類型 對應的數據類型
────────────────────────────
TStringField 字符串類型的字段
TSmallIntField 短整數類型的字段 -32768-32767
TIntegerField 整數類型的字段
TWordField 正整數類型的字段0-65535
TBooleanField 布爾型字段
TFloatField 浮點數類型的字段
TCurrenCyField 貨幣型字段
TDataField 日期型
TTimeField 時間型
TBCDField 小數位數固定的浮點數
TDataTimeField 日期時間型字段
━━━━━━━━━━━━━━━━━━━━━━━━━━━
我們在本書中只介紹一些常見類型的字段部件的使用,其他類型字段部件的使用可以參看聯機幫助文件。