15.4.2 TTable部件的方法及應用
15.4.2.1 設定數據庫表的使用范圍
在我們實際應用中的數據庫表中常常存放著大量的數據信息,其中包含著很多的記錄,而我們的應用程序可能只需對其中一部分記錄進行操作,因此,為應用程序指定一個使用范圍就顯得特別重要了,為方便有效地指定數據庫表的使用范圍Delphi為TTable部件提供了下列方法供用戶使用:
● SetRangeStart和EditRangeStart方法
● SetRangeEnd和EditRangeEnd方法
● SetRange([Start Values],[End Values])方法
● ApplyRange方法
● CancelRange方法
1. SetRangeStart方法
用於指定檢索范圍的起始記錄,調用SetRangeStart方法之後,可以為起始記錄的一個或多個字段指定相應的字段值。SetRangeEnd方法用於指定檢索范圍的結束記錄,調用SetRangeEnd方法之後,可以為結束記錄的一個或多個字段指定相應的字段值。
2. SetRange方法
SetRange方法包含了SetRangeStart和SetRangeEnd方法的功能,它可以同時指定檢索范圍的起始和結束記錄,起始記錄和結束記錄的字段值以數組形式送給SetRange,其基本形式是:
SetRange([起始值],[結束值])
3. ApplyRange方法
根據SetRangeStart,SetRangeEnd或SetRange方法說明的檢索范圍的起始和結束記錄,具體設定一個檢索范圍,調用ApplyRange方法之後,應用程序只能對檢索范圍內的記錄進行有關的操作。
4. CancelRange方法
CancelRange方法的作用與ApplyRange方法的作用是相反的,這是取消為表設定的檢索范圍,調用CancelRange方法之後應用程序可以對表中全部記錄進行有關的操作。
在這裡要注意的是:如果我們使用的是paradox表或dBASE表,在調用SetRangeStart,SetRangeEnd以及SetRange方法時,只能為表中的索引字段或定義的索引指定相應的字段值,以設定檢索范圍。如果使用SQL數據庫服務器中的數據庫表,可以為IndexFieldNames屬性中指定的字段指定相應的字段值。
例如:假設Table1與Customer.DB表相連,Customer.DB中一個索引字段是CustNo,同時應用窗體中有兩個編輯框StartVal和EndVal用於輸入起始、結束記錄的字段CustNo的值,下面的程序代碼便可以為我們設定一個檢索范圍:
Tabel1.SetRangeStart; {指定檢索范圍的起始記錄}
Tabel1CustNo.AsString:= StartVal.Text {為起始記錄的CustNo字段指定字段值}
Tabel1.SetRangeEnd; {指定檢索范圍的結束記錄}
if EndVal.Text <> ' ' then
Tabel1CustNo.AsString := EndVal.Text; {為結束記錄的CustNo 字段指定字段值}
Tabel1.ApplyRange; {根據檢索范圍的起始、結束記錄設定檢索范圍}
注意上面的程序代碼,在為結束記錄的CustNo字段指定字段值時,首先檢查EndVal的值是否為空,如果EndVal的值為空,那麼設定的檢索范圍沒有包含一條記錄,因為沒有任何記錄的字段值小於NIL;如果StartVal的值為空,那麼檢索范圍將從表中的第一條記錄開始,因為表中任何記錄的字段值都大於空(NIL)。
上述代碼可以用SetRange方法改寫成:
If EndVal.Text <>' ' then
Tabel1.SetRane([StartVal.Text].[EndVal.Text]);
Table1.ApplyRange;
EditRangeStart和EditRangeEnd方法的使用完全類似於SetRangeStart和SetRangeEnd方法,只是調這兩個方法是設定一個可編輯的范圍。
又如:假設一個表中的一個索引包含兩個字段LastName和FirstName,我們為索引中的一個字段或多個字段指定相應的字段值,設定數據庫表的使用范圍。
Table1.SetRangeStart;
Table1.FieldByName('LastName').Asstring := 'Smith';
Table1.SetRangeEnd;
Tabel1.ApplyRange;
上述代碼設定的范圍包括LastName字段的值大於或等於Smith的所有記錄。而下面的代碼設定的范圍則包括LastName字段的值大於或等於Smith且FirstName字段的值大於或等於'J'的記錄。
Table1.SetRangeStart;
Table1.FieldByName('LastName').Asstring := 'Smith';
Table1.FieldByName('FirstName').Asstring := 'J';
Table1.SetRangeEnd;
Tabel1.ApplyRange;