|
![]() | TSQL602DataSet | ![]() | Přehled CDK komponent | TSQL602DataSetFind | ![]() |
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;
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.
Zdrojový dataset
Vrací počet podpodmínek v seznamu
Zpřístupňuje jednotlivé podpodmínky v seznamu
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'.
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.
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.
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.
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.
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é
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.
Vyprázdní seznam jednotlivých výběrových podmínek.
Přidá novou výběrovou podmínku.
aBind | Způsob připojení nové podmínky ke stávajícímu výběru. Viz vlastnost TSQL602Cond.Bind |
aKeyName | Jméno sloupce ve zdrojovém datasetu |
aKeyValue | Hodnota sloupce |
aOpts | Příznaky porovnávání řetězcových hodnot. viz. vlastnost TSQL602Cond.Options |
aCond | Text výběrové podmínky. Podmínka musí mít syntaxi klauzule WHERE SQL příkazu SELECT. |
aSubConds | Seznam 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.
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)
Odstraní dříve přidanou podmínku ze seznamu výběrových podmínek. Pokud podmínka v seznamu není, vrací false
aCondObj | Odkaz na podmínku, který vrátila metoda Add. |
Index | Index podmínky v seznamu (počínaje od 0) |
aKeyName | Jméno sloupce ve zdrojovém datasetu |
aKeyValue | Hodnota sloupce |
aCond | Text výběrové podmínky |
DataSet.CondList.Remove('EXTRACT (YEAR FROM Datum) >= 2000'); DataSet.CondList.Remove('Jmeno', 'Nov'); DataSet.CondList.Remove(co3);
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.
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.
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.
aCondObj | Odkaz na podmínku, který vrátila metoda Add. |
aKeyName | Jméno sloupce ve zdrojovém datasetu |
aKeyValue | Hodnota sloupce |
aCond | Text výběrové podmínky |
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.
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.
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.
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.
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.
Umožňuje potomku třídy TSQL602CondList reagovat na změnu v seznamu podmínek. Implicitní instance vyvolává událost OnChanged.
Umožňuje potomku třídy TSQL602CondList reagovat na změnu v příznaku ShowFlag. Implicitní instance vyvolává událost OnShowFlagChanged.
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.
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.
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;
Seznam subsekcí:
![]() | TSQL602DataSet | ![]() | Přehled CDK komponent | TSQL602DataSetFind | ![]() |