Delphi - Tartomány kijelölése egy adattáblában

forráskód letöltése
Lehetőségünk van arra, hogy egy adattáblából olyan adatokat nyerjünk ki, melyek egy megadott tartományon belül esnek. Ezután csak a tartományban szereplő rekordok lesznek elérhetők és szerkeszthetők. A következő bemutatásra kerülő függvényekkel mindezt egyszerűen megvalósíthatjuk, és a mellékelt példaprogram segítségével ki is próbálhatjuk.
Első lépésként beállítjuk az adattáblánk paramétereit:
  Table1.DatabaseName := 'DBDemos';
  Table1.TableName := 'Customer.db';
  Table1.Active := True;
  Table1.IndexName := 'ByCompany';
  Table1.First;
A Customer táblát a cégek nevei alapján index-eljük.
A tartomány kezdeti értéket a SetRangeStart, míg végértékét a SetRangeEnd függvényekkel állíthatjuk be.
  with Table1 do
  begin
    SetRangeStart;
    FieldByName('Company').AsString := Edit1.Text;
    SetRangeEnd;
    FieldByName('Company').AsString := Edit2.Text;
    ApplyRange;
  end;
A parancsok hatására az adattáblánk dsSetKey állapotba kerül, és törlődik minden, előzőleg a tartományra beállított kezdeti és végérték. A táblázat FieldByName tulajdonsága mutat az új kezdő és végértékekre a Company oszlopban.
A tartomány beállításai az ApplyRange metódus meghívása után kerülnek módosításra.
Figyeljük meg, hogy eredményként olyan adathalmazt kapunk, melynek értékei a megadott tartományon belül esnek, azonban az általunk megadott végérték már nem szerepel a tartományban. Tehát az eredményhalmaz mindig a megadott végérték előtti rekorddal zárul.
Vegyük észre azt is, hogy szűrési feltételként nem kell a pontos nevet (esetünkben a cég nevét) megadnunk, elég annak töredékét is. Minél pontosabban adjuk meg a kezdeti és végértéket, annál jobban szűkíthetjük a tartományt.
A tartomány beállításait a CancelRange metódus segítségével törölhetjük. Meghívása után eredményül a teljes adathalmazt kapjuk vissza.
  Table1.CancelRange;
  Table1.Refresh;
Egy már beállított tartomány kezdő- és végértékét szerkeszthetjük is az EditRangeStart illetve EditRangeEnd utasításokkal.
A módosítások szintén az ApplyRange meghívásával lépnek érvénybe.
  with Table1 do
  begin
    EditRangeStart;
    FieldByName('Company').AsString := Edit1.Text;
    EditRangeEnd;
    FieldByName('Company').AsString := Edit2.Text;
    ApplyRange;
  end;
A tartomány beállítását egyetlen utasítás segítségével is elvégezhetjük, ez pedig a SetRange.
A példaprogramban ezt így valósítottuk meg:
  Table1.SetRange([Edit1.Text],[Edit2.Text]);
A SetRange egyetlen eljárásban ötvözi a SetRangeStart, SetRangeEnd és ApplyRange metódusokat.
Meghívása után az adattáblát dsSetKey módba állítja, majd törli a már előzőleg beállított kezdeti, illetve végértéket, majd ezeket módosítja az új beállításokra, végül érvénybe lépteti azokat.
Végül figyeljük meg, hogy az ApplyRange, illetve a SetRange függvények meghívása után a rekordmutató mindig a tartomány első elemére pozícionál.
A fentiekben ismertetett függvények Paradox és dBASE táblák esetében csak index-elt mezőkre működnek, míg SQL adatbázisoknál minden olyan oszlop leszűrhető, mely szerepel az IndexFieldNames tulajdonságban.