針對大量資料,限定處理範圍能大幅提升效能。TTable 提供五大方法:
| 方法 | 功能 |
|---|---|
SetRangeStart / EditRangeStart | 指定起始記錄(可多欄位) |
SetRangeEnd / EditRangeEnd | 指定結束記錄(可多欄位) |
SetRange([StartVals], [EndVals]) | 單行同時指定起迄值(陣列參數) |
ApplyRange | 套用範圍,後續僅能存取範圍內記錄 |
CancelRange | 取消範圍,恢復全表存取 |
IndexFieldNames 指定欄位指定值Table1.SetRangeStart;
Table1CustNo.AsString := StartVal.Text; // 起始值
Table1.SetRangeEnd;
if EndVal.Text <> '' then
Table1CustNo.AsString := EndVal.Text; // 結束值(空值會導致無記錄)
Table1.ApplyRange;
空值陷阱:EndVal 為空 → 範圍無記錄(無值 < NIL);StartVal 為空 → 從第一筆開始(所有值 > NIL)。
if EndVal.Text <> '' then
Table1.SetRange([StartVal.Text], [EndVal.Text]);
Table1.ApplyRange;
// 僅指定 LastName ≥ 'Smith'
Table1.SetRangeStart;
Table1.FieldByName('LastName').AsString := 'Smith';
Table1.ApplyRange;
// 指定 LastName ≥ 'Smith' 且 FirstName ≥ 'J'
Table1.SetRangeStart;
Table1.FieldByName('LastName').AsString := 'Smith';
Table1.FieldByName('FirstName').AsString := 'J';
Table1.ApplyRange;
EditRangeStart/End 用法相同,差別在建立可編輯範圍。善用範圍過濾可避免全表掃描,顯著改善大資料量應用效能。