602SQL-Úplná dokumentace Index  

TSQL602CondList

Delphi / Kylix

Zjednodušená deklarace třídy:

type TSQL602CondList = class(TSQL602Cond);
published
  property DataSet                : TSQL602DataSet;
  property EmptyMeansAll          : Boolean;
  property Filtrate               : Boolean;
  property FromActive             : Boolean;

public
  property Count                  : Integer;                // pouze pro čtení
  property Items[Index : Integer] : TSQL602Cond; default;
  property WhereCond              : string;                 // pouze pro čtení
  property RecordCount            : trecnum;                // pouze pro čtení
  property BelongsTo              : Boolean;                // pouze pro čtení

  property OnChanged              : TNotifyEvent;           // událost
  property OnShowFlagChanged      : TNotifyEvent;           // událost
  
  constructor Create(AOwner : TComponent);
  destructor  Destroy;

  procedure Clear;
  function Add(aBind : TSQL602CondBind) : TSQL602Cond;
  function Add(aKeyName : string; aKeyValue : Variant; aBind : TSQL602CondBind = cbAND; aOpts : TLocateOptions = []) : TSQL602Cond;
  function Add(aCond : string; aBind : TSQL602CondBind) : TSQL602Cond;
  function Add(aSubConds : TSQL602CondList; aBind : TSQL602CondBind) : TSQL602Cond;
  function Remove(aCondObj : TSQL602Cond) : Boolean;
  function Remove(Index : Integer) : Boolean;
  function Remove(aKeyName : string; aKeyValue : Variant) : Boolean;
  function Remove(aCond : string) : Boolean;

  function AddRecord : TSQL602Cond;
  function RemoveRecord : TSQL602Cond;
  
  function Find(aCondObj : TSQL602Cond) : TSQL602Cond;
  function Find(aKeyName : string; aKeyValue : Variant) : TSQL602Cond;
  function Find(aCond : string) : TSQL602Cond;
  function CondByName(aName : string) : TSQL602Cond;

  function Next  : Boolean;
  function Prev  : Boolean;
  function First : Boolean;
  function Last  : Boolean;

protected
  procedure DoChanged; virtual;
  procedure DoShowFlagChanged; virtual;
  
end;


Popis

Komponenta umožňuje postupně vytvářet obecně strukturovanou výběrovou podmínku nad datasetem. Výsledek lze použít pro zobrazení nebo procházení vybraných dat.



Unit

SQL602



Vlastnosti komponenty

DataSet : TSQL602DataSet;

Zdrojový dataset

Count : Integer;

Vrací počet podpodmínek v seznamu

Items[Index : Integer] : TSQL602Cond; default;

Zpřístupňuje jednotlivé podpodmínky v seznamu

WhereCond : string;

Reprezentuje výslednou výběrovou podmínku. Je-li seznam výběrových podmínek prázdný, závisí hodnota vlastnosti na stavu příznaku EmptyMeansAll. Pokud má příznak hodnotu false, vrací WhereCond 'FALSE', v opačném případě vrací 'TRUE'.

RecordCount : trecnum;

Vrací počet záznamů, které odpovídají výsledné výběrové podmínce. Je-li seznam výběrových podmínek prázdný, závisí hodnota vlastnosti na stavu příznaku EmptyMeansAll. Pokud má příznak hodnotu false, vrací RecordCount nulu, v opačném případě vrací počet všech záznamů ve zdrojovém datasetu.

BelongsTo : Boolean;

Vlastnost indikuje, zda aktuální záznam zdrojového datasetu odpovídá výsledné výběrové podmínce. Je-li seznam výběrových podmínek prázdný, závisí hodnota vlastnosti na stavu příznaku EmptyMeansAll. Pokud má příznak hodnotu false, vrací BelongsTo pro všechny záznamy false, v opačném případě vrací pro všechny záznamy true.

EmptyMeansAll : Boolean;

Příznak indikuje způsob, jakým se má interpretovat prázdný seznam výběrových podmínek. Hodnota false (implicitní) reprezentuje režim, kdy na začátku není vybráno nic a přidáváním výběrových podmínek se bude rozšiřovat množina vybraných záznamů. Hodnota true představuje režim, kdy na začátku je vybráno vše a přídáváním výběrových podmínek se bude výběr zpřesňovat, podobně jako v případě vlastnosti TSQL602DataSet.Filter.

Filtrate : Boolean;

Indikuje, zda se má zdrojový dataset filtrovat výslednou výběrovou podmínkou. Pokud je vlastnost nastavena ma false (implicitní), "vrací" zdrojový dataset všechny záznamy, má-li vlastnost hodnotu true, připojí se výsledná výběrová podmínka pomocí operace AND k případnému filtru a dataset bude poskytovat pouze vybrané záznamy.



Příklad

Kombinace filtrování datasetu a condlistu:

  DataSet.CommandText := 'Tabulka';
  DataSet.CommandType := dsctTable;
  DataSet.Filter      := 'Mesto = "Praha"';
  DataSet.Filtered    := true;
  
    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka WHERE Mesto = "Praha"
    Žádný záznam není vybraný (ve smyslu CondListu)  
  
  DataSet.CondList.EmptyMeansAll := true;

    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka WHERE Mesto = "Praha"
    Všechny záznamy jsou vybrané  

  DataSet.CondList.Add('Kusu', 5, cbNone);
  
    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka WHERE Mesto = "Praha"
    Vybrané jsou záznamy, pro které platí Kusu = 5
  
  DataSet.CondList.Filtrate := true;
  
    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka WHERE (Mesto = "Praha") AND (Kusu = 5)
    Všechny záznamy jsou vybrané
  
  DataSet.Filtered := false;

    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka WHERE Kusu = 5
    Všechny záznamy jsou vybrané
  
  DataSet.CondList.Filtrate := false;
  
    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka
    Vybrané jsou záznamy, pro které platí Kusu = 5  
  
  DataSet.CondList.Remove('Kusu', 5);
  
    Zdrojem pro dataset bude dotaz: SELECT * FROM Tabulka
    Všechny záznamy jsou vybrané
FromActive : Boolean;

Je-li nastavena, bude první použití metody Next resp. Prev po změně výběrové podmínky vyhledávat odpovídající záznam od aktuální pozice. Není-li nastavena, bude se vyhledávat od začátku datasetu.



Metody komponenty

procedure Clear;

Vyprázdní seznam jednotlivých výběrových podmínek.

function Add(aBind : TSQL602CondBind) : TSQL602Cond;
function Add(aKeyName : string; aKeyValue : Variant; aBind : TSQL602CondBind = cbAND; aOpts : TLocateOptions = []) : TSQL602Cond;
function Add(aCond : string; aBind : TSQL602CondBind) : TSQL602Cond;
function Add(aSubConds : TSQL602CondList; aBind : TSQL602CondBind) : TSQL602Cond;

Přidá novou výběrovou podmínku.

aBindZpůsob připojení nové podmínky ke stávajícímu výběru. Viz vlastnost TSQL602Cond.Bind
aKeyNameJméno sloupce ve zdrojovém datasetu
aKeyValueHodnota sloupce
aOptsPříznaky porovnávání řetězcových hodnot. viz. vlastnost TSQL602Cond.Options
aCondText výběrové podmínky. Podmínka musí mít syntaxi klauzule WHERE SQL příkazu SELECT.
aSubCondsSeznam výběrových podmínek. Výslednou podmínku lze schematicky vyjádřit jako WhereCond AND/OR (aSubConds.WhereCond). Metoda přidává kopii zdrojového seznamu. Pozdější změny ve zdrojovém seznamu nemají na výslednou podmínku vliv.

Metody vracejí novou instanci objektu TSQL602Cond. Odkaz lze použít pro změnu vlastností podmínky, případně jako parametr metody Remove pro odstranění podmínky ze seznamu.



Příklad

  co1 := DataSet.CondList.Add('EXTRACT (YEAR FROM Datum) >= 2000', cbNone);
  co2 := DataSet.CondList.Add('Jmeno', 'Nov', cbOR, [loCaseInsensitive, loPartialKey]);
  co3 := DataSet.CondList.Add('Kusu', 5, cbAllAND);
    
  Výsledkem bude podmínka: (EXTRACT (YEAR FROM Datum) >= 2000 OR UPPER(Jmeno) .= UPPER('Nov')) AND Kusu = 5

  DataSet.CondList.Add('EXTRACT (YEAR FROM Datum) >= 2000', cbNone);
  cl := DataSet.CondList.Add(cbAND);
  cl.SubConds.Add('Jmeno', 'Nov', cbNone, [loCaseInsensitive, loPartialKey]);
  cl.SubConds.Add('Kusu', 5, cbOR);
    
  Výsledkem bude podmínka: EXTRACT (YEAR FROM Datum) >= 2000 AND (UPPER(Jmeno) .= UPPER('Nov') OR Kusu = 5)

        

function Remove(aCondObj : TSQL602Cond) : Boolean;
function Remove(Index : Integer) : Boolean;
function Remove(aKeyName : string; aKeyValue : Variant) : Boolean;
function Remove(aCond : string) : Boolean;

Odstraní dříve přidanou podmínku ze seznamu výběrových podmínek. Pokud podmínka v seznamu není, vrací false


aCondObjOdkaz na podmínku, který vrátila metoda Add.
IndexIndex podmínky v seznamu (počínaje od 0)
aKeyNameJméno sloupce ve zdrojovém datasetu
aKeyValueHodnota sloupce
aCondText výběrové podmínky


Příklad

  DataSet.CondList.Remove('EXTRACT (YEAR FROM Datum) >= 2000');
  DataSet.CondList.Remove('Jmeno', 'Nov');
  DataSet.CondList.Remove(co3);

function AddRecord : TSQL602Cond;

Pokud aktuální záznam v připojeném datasetu neodpovídá stávající výsledné výběrové podmínce, přidá funkce do seznamu podmínku, aby byl aktuální záznam do výběru zahrnut. Typ podmínky záleží na nastavení datasetu, je-li definovaná vlastnost PrimaryKey, použije se k vytvoření podmínky daný sloupec, je-li definovaná událost GetRecordIdent nebo virtuální funkce DoGetRecordIdent, použije se jako podmínka výstupní hodnota těchto funkcí, jinak se podmínka vytvoří pomocí hodnot všech sloupců pevné délky. Pokud aktuální záznam odpovídá stávající podmínce, vrací funkce nil, jinak vrací odkaz na nově přidanou podmínku. Odkaz lze použít pro změnu vlastností podmínky, případně jako parametr metody Remove pro odstranění podmínky ze seznamu.

function RemoveRecord : TSQL602Cond;

Pokud aktuální záznam v připojeném datasetu vyhovuje stávající výsledné výběrové podmínce, pokusí se funkce najít v seznamu podmínku, která záznam do výběru zahrnuje, jestliže takovou podmínku nalezne, vyřadí ji ze seznamu, v opačném případě přidá funkce do seznamu takovou podmínku, která aktuální záznam ze seznamu vyřadí. Typ přidávané podmínky záleží na nastavení datasetu, je-li definovaná vlastnost PrimaryKey, použije se k vytvoření podmínky daný sloupec, je-li definovaná událost GetRecordIdent nebo virtuální funkce DoGetRecordIdent, použije se jako podmínka výstupní hodnota těchto funkcí, jinak se podmínka vytvoří pomocí hodnot všech sloupců pevné délky. Pokud operace skončí přidáním podmínky, vrací funkce odkaz na nově přidanou podmínku, jinak vrací nil. Odkaz lze použít pro změnu vlastností podmínky, případně jako parametr metody Remove pro odstranění podmínky ze seznamu.

function Find(aCondObj : TSQL602Cond) : TSQL602Cond;
function Find(aKeyName : string; aKeyValue : Variant) : TSQL602Cond;
function Find(aCond : string) : TSQL602Cond;

Funkce hledá zadnou podmínku v seznamu výběrových podmínek. Vrací odkaz na nalezenou podmínku, pokud podmínka v seznamu není, vrací nil.

aCondObjOdkaz na podmínku, který vrátila metoda Add.
aKeyNameJméno sloupce ve zdrojovém datasetu
aKeyValueHodnota sloupce
aCondText výběrové podmínky

function CondByName(aName : string) : TSQL602Cond;

Třída TSQL602Cond zdědila po třídě TComponent vlastnost Name, která umožňuje jednotlivé instance pojmenovat. Metoda CondByName umožňuje vyhledat jednotlivé podmínky podle jména. Pokud podmínka s daným jménem v seznamu není, vrací nil.

function Next : Boolean;

Nastaví dataset DataSet na další záznam odpovídající výslednéné vyhledávací podmínce, pokud další takový záznam neexistuje vrátí false. Je-li nastavena vlastnost FromActive, začíná se hledat od aktuální pozice, jinak od začátku datasetu. Je-li výběrová podmínka prázdná, záleží výsledek na nastavení příznaku EmptyMeansAll.

function Prev : Boolean;

Nastaví dataset DataSet na předchozí záznam odpovídající výslednéné vyhledávací podmínce, pokud takový záznam neexistuje vrátí false. Je-li nastavena vlastnost FromActive, začíná se hledat od aktuální pozice, jinak od začátku datasetu. Je-li výběrová podmínka prázdná, záleží výsledek na nastavení příznaku EmptyMeansAll.

function First : Boolean;

Nastaví dataset DataSet na první záznam odpovídající výslednéné vyhledávací podmínce, pokud takový záznam neexistuje vrátí false. Je-li výběrová podmínka prázdná, záleží výsledek na nastavení příznaku EmptyMeansAll.

function Last : Boolean;

Nastaví dataset DataSet na poslední záznam odpovídající výslednéné vyhledávací podmínce, pokud takový záznam neexistuje vrátí false. Je-li výběrová podmínka prázdná, záleží výsledek na nastavení příznaku EmptyMeansAll.

procedure DoChanged; virtual;

Umožňuje potomku třídy TSQL602CondList reagovat na změnu v seznamu podmínek. Implicitní instance vyvolává událost OnChanged.

procedure OnShowFlagChanged; virtual;

Umožňuje potomku třídy TSQL602CondList reagovat na změnu v příznaku ShowFlag. Implicitní instance vyvolává událost OnShowFlagChanged.



Události komponenty

procedure OnChanged(Sender : TObject);

Umožňuje aplikaci reagovat na změnu v seznamu podmínek. Této události odpovídá v připojeném datasetu událost TSQL602DataSet.OnCondListChanged.

procedure OnShowFlagChanged(Sender : TObject);

Umožňuje aplikaci reagovat na změny příznaků EmptyMeansAll a Filtrate. Této události odpovídá ve připojeném datasetu událost TSQL602DataSet.OnCondListShowFlagChanged.



Příklad

V reakci na stisknutí tlačítka, přidat nebo odebrat aktuální záznam z výběru.
procedure TMyForm.OnSelButtonClick(Sender: TObject);
begin
  if MyDataSet.CondList.BelongsTo then
    MyDataSet.CondList.Remove(MyDataSet.PrimaryKey, MyDataSet.FieldByName(MyDataSet.PrimaryKey).Value)
  else
    MyDataSet.CondList.Add(MyDataSet.PrimaryKey, MyDataSet.FieldByName(MyDataSet.PrimaryKey).Value, cbOR);
end;
Zobrazení vybraných záznamů v gridu, pomocí události TDBGrid.OnDrawColumnCell.
procedure TMyForm.OnMyDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if MyDataSet.CondList.BelongsTo then begin
    MyDBGrid.Canvas.Brush.Color := clBlue;
    MyDBGrid.Canvas.FillRect(Rect);
    MyDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;
Zobrazení vybraných záznamů v gridu, pomocí vypočítávaného sloupce a události TField.OnGetText.
procedure TMyForm.OnMyCalcFieldGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  if MyDataSet.CondList.BelongsTo then
    Text := 'Ano'
  else
    text := 'Ne';
end;
Uložení výběru do databáze a opětovné načtení.

  aStream := SelDataSet.CreateBlobStream(SelDataSet.FieldByName('SelCond'), bmWrite);
  MyDataSet.CondList.Save(aStream);
  aStream.Destroy;
  .
  .
  .
  aStream := SelDataSet.CreateBlobStream(SelDataSet.FieldByName('SelCond'), bmRead);
  MyDataSet.CondList.Load(aStream);
  aStream.Destroy;
  MyDBGrid.Invalidate;

Viz

Seznam subsekcí: