全國計(jì)算機(jī)等級考試二級Delphi輔導(dǎo)講義 154

字號:

15.5.2 TDataSource部件的事件
    TDataSource部件具有三個(gè)事件:
    ● OnDataChange事件
    ● OnStateChange
    ● OnUpdataData
    OnDataChange事件:當(dāng)與TDataSource相連的數(shù)據(jù)集中的記錄指針的位置發(fā)生改變時(shí),該事件就被觸發(fā),也就是說當(dāng)程序調(diào)用數(shù)據(jù)集部件的Next、Previous、Insert、Append等方法導(dǎo)致記錄指針的位置發(fā)生改變時(shí),便會觸發(fā)該事件。該事件一般用于保持應(yīng)用中多個(gè)部件之間的同步。
    OnUpdataData事件:當(dāng)數(shù)據(jù)集部件中當(dāng)前記錄將要被修改時(shí),觸發(fā)該事件。例如在程序調(diào)用post方法之后但在修改后的數(shù)據(jù)記錄真正被寫回磁盤中的數(shù)據(jù)庫文件之前觸發(fā)該事件,在應(yīng)用中使用非數(shù)據(jù)瀏覽部件時(shí)要它與數(shù)據(jù)集保持同步時(shí)常使用該事件進(jìn)行相關(guān)的處理。
    OnStateChange事件:當(dāng)與TDataSource部件相連的數(shù)據(jù)集部件的狀態(tài)發(fā)生改變時(shí),便觸發(fā)該事件。因?yàn)閿?shù)據(jù)集部件的State屬性標(biāo)明了數(shù)據(jù)集部件當(dāng)前所處的狀態(tài),當(dāng)數(shù)據(jù)集的狀態(tài)發(fā)生變化時(shí),使用該事件進(jìn)行有關(guān)的處理是很有用的,在一個(gè)具體的應(yīng)用中,數(shù)據(jù)集部件的狀態(tài)常常是頻繁地變化的,為了跟蹤數(shù)據(jù)集部件的狀態(tài)變化,可以用下面例子中的程序代碼將數(shù)據(jù)集部件當(dāng)前的狀態(tài)顯示在一個(gè)標(biāo)簽上:
    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;
    類似地我們也可以通過檢測數(shù)據(jù)集部件的狀態(tài)來控制有關(guān)的按鈕和菜單項(xiàng)是否有效。例如:在一個(gè)應(yīng)用窗體中有一個(gè)InsertBtn按鈕,用于控制向數(shù)據(jù)集部件table1對應(yīng)的數(shù)據(jù)庫表中插入記錄;還有一個(gè)CancelBtn按鈕用于控制是否取消用戶對當(dāng)前記錄的修改或插入新記錄。下面的程序代碼根據(jù)Table1的狀態(tài)來控制這兩個(gè)按鈕的功能(是否有效,在窗體是否變灰暗)。
    Form1.DataSource1OnStateChange(Sender : Tobject);
    begin
    InsertBtn.Enabled := (Table1.State = dsBrowse);
    CancelBtn.Enabled := Table1.State in [dsInsert,dsEdit,dsSetKey]
    end;
    上面的代碼中,當(dāng)Table1處于瀏覽狀態(tài)(Browse狀態(tài)時(shí)),用戶是不能夠向數(shù)據(jù)庫表中插入新記錄的,此時(shí)InsertBtn按鈕將變灰暗即無效。當(dāng)Table1不處于Browse狀態(tài)時(shí),InsertBtn按鈕有效,用戶是可以向表中插入新記錄。同理,只有當(dāng)Table1處于特入狀態(tài)(Insert狀態(tài))或編輯狀態(tài)(Edit狀態(tài))或查找狀態(tài)(SetKey狀態(tài))時(shí),CancelBtn按鈕才有效,也即用戶可以取消當(dāng)前插入的記錄、修改當(dāng)前的記錄以及查找到的結(jié)果等。
    15.6 字段部件和字段編輯器的使用
    字段部件有時(shí)又稱字段對象它對應(yīng)著數(shù)據(jù)庫表中的列即字段,字段對象是不可見的部件,在Delphi中有兩種方式創(chuàng)建字段部件:
    ①在應(yīng)用程序運(yùn)行過程中,隨著數(shù)據(jù)集部件被激活,對應(yīng)于數(shù)據(jù)庫表中每一列的字段部件便動(dòng)態(tài)地被創(chuàng)建。
    ②在設(shè)計(jì)過程中,程序設(shè)計(jì)人員利用字段編輯器(Fields Editor)可以創(chuàng)建永久性的字段部件,即使字段對象對應(yīng)的數(shù)據(jù)庫表的結(jié)構(gòu)發(fā)生了變化時(shí),這些字段部件也不會發(fā)生變化。
    既然字段部件是對應(yīng)于數(shù)據(jù)庫表中的各個(gè)字段的,而數(shù)據(jù)庫表中的字段有多種數(shù)據(jù)類型,所以字段部件相應(yīng)也有多種類型,字段部件的類型與數(shù)據(jù)庫表中的字段的數(shù)據(jù)類型的對應(yīng)關(guān)系如表15.5所示。
    表15.5 字段部件的類型
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    字段部件的類型 對應(yīng)的數(shù)據(jù)類型
    ────────────────────────────
    TStringField 字符串類型的字段
    TSmallIntField 短整數(shù)類型的字段 -32768-32767
    TIntegerField 整數(shù)類型的字段
    TWordField 正整數(shù)類型的字段0-65535
    TBooleanField 布爾型字段
    TFloatField 浮點(diǎn)數(shù)類型的字段
    TCurrenCyField 貨幣型字段
    TDataField 日期型
    TTimeField 時(shí)間型
    TBCDField 小數(shù)位數(shù)固定的浮點(diǎn)數(shù)
    TDataTimeField 日期時(shí)間型字段
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━
    我們在本書中只介紹一些常見類型的字段部件的使用,其他類型字段部件的使用可以參看聯(lián)機(jī)幫助文件。