|
![]() | TSQL602ODBCConnection | ![]() | Přehled CDK komponent | TSQL602CondList | ![]() |
Zjednodušená deklarace třídy:
type TSQL602DataSet = class(TDataSet) published property Connection : TSQL602Connection; property CommandType : TSQL602CmdType; property CommandText : string; property Filter : string; property Filtered : Boolean; property Order : string; property Ordered : Boolean; property Params : TParams; property ParamDataSet : TDataSet; property MasterSource : TDataSource; property MasterFields : string; property DetailFields : string; property ReadOnly : Boolean; property PrimaryKey : string; property Options : TSQL602DSOptions; property BookmarkType : TBookmarkType; property CondList : TSQL602CondList; property OnFilterChanged : TDatasetNotifyEvent; // události property OnOrderChanged : TDatasetNotifyEvent; property OnJoinedInsert : TOnJoinedInsert; property OnJoinedDelete : TDatasetNotifyEvent; property OnPostDependent : TDatasetNotifyEvent; property OnDeleteDependent : TDatasetNotifyEvent; property OnUnsavedChange : TOnUnsavedEvent; property OnSQL602Event : TOnSQL602Event; property GetRecordIdent : TGetRecordIdent; property OnPreciseCommand : TOnPreciseCommand; property OnCondListChanged : TDatasetNotifyEvent; property OnCondListShowFlagChanged : TDatasetNotifyEvent ; public property Handle : tcursnum; // pouze pro čtení property MyTransaction : Boolean; // pouze pro čtení property MarkedRecords : TList; property SrcTables : TStringList // pouze pro čtení constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure CheckParams; procedure ClearAllParams; function ParamByName(const Value : string) : TParam; procedure RefreshRecord; procedure RefreshTo(Cond : string); function LockRecord(ROptions : TSQL602RLOptions = []) : Boolean; virtual; procedure UnlockRecord; virtual; procedure UnlockRecords; function FieldModified(Field : TField) : Boolean; function OriginalValue(Field : TField) : Variant; function MarkRecord(Value : Boolean) : TBookmark; function IsRecordMarked : Boolean; function Sum(FieldName : string; out aSum : variant; Flags : TSumFlag = SFAll) : Integer; procedure ApplPost; virtual; protected procedure SetConnection(Conn : TSQL602Connection); virtual; procedure SetOrdered(Value: Boolean); virtual; procedure SetOrder(const Value: string); virtual; procedure DoFilterChanged; virtual; procedure DoOrderChanged; virtual; procedure DoPostDependent; virtual; procedure DoDeleteDependent; virtual; procedure DoJoinedDelete; virtual; procedure DoOnSQL602Event(Event : TSQL602Event); virtual; function DoJoinedInsert : string; virtual; function DoUnsavedChange(DfltAct : TUnsavedChange) : TUnsavedChange; virtual; function DoGetRecordIdent : string; virtual; procedure DoPreciseCommand(var Command : string); virtual; end;
TSQL602DataSet je potomkem třídy TDataSet ze standardní knihovny komponent a představuje základní komponentu zpřístupňující data uložená na 602SQL serveru. Její vlastnosti, metody a události zapouzdřují všechny potřebné operace prováděné s tabulkami nebo SQL dotazy. Umožňuje listování v množině záznamů, čtení a přepisování hodnot sloupců, filtrování a třídění množiny záznamů, vyhledávání záznamů atd. Komponenta je pouze zdrojem dat, neposkytuje žádnou vizuální prezentaci, při vytváření formulářů je třeba ji prostřednictvím standardní komponenty TDataSource propojit s běžnými komponentami pro prezentaci databázových dat jako je TDBGrid, TDBEdit, TDBComboBox apod.
Podrobněji popisovány jsou zde pouze významné nebo nově přidané vlastnosti a metody - komponenta implementuje prakticky všechny podstatné vlastnosti a metody rodičovské třídy TDataSet, jako např. práci s bookmarky (záložkami), pohyb po záznamech oběma směry, vyhledávání pomocí Locate či Lookup, počítání záznamů (RecNo či RecordCount) a mnoho dalších. Jejich popis najdete ve standardní nápovědě ke třídě TDataSet.
Spojení na server pomocí TSQL602Connection. Změna této vlastnosti nebo deaktivace spojení s SQL serverem vyvolá deaktivaci datasetu.
Příznak, vede-li dataset do tabulky nebo do dotazu, viz CommandText
Jméno tabulky (resp. dotazu) nebo dotazový výraz SELECT. Vlastnost CommandType může nabývat hodnot dsctTable, pak je hodnota CommandText považována za jméno tabulky (resp. dotazu (v SQL VIEW) uloženého na SQL serveru), nebo dsctQuery, pak CommandText představuje SQL výraz SELECT. Změna vlastností CommandType a CommandText vyvolá deaktivaci datasetu.
Pro vytvoření složitějšího SELECTu lze použít zabudovaný návrhář dotazu (jako Property editor). Na Windows umožňuje interaktivně vybírat tabulky, jejich sloupce, zadávat podmínky apod. Je možné si návrh syntakticky otestovat, prohlédnou si jej v textové podobě, je možné si zobrazit výsledek dotazu. Na Linuxu je k dispozici pouze jednoduchý form pro zadání dotazu v textové podobě.
Filtr, který vybírá podmnožinu záznamů. Výraz má syntaxi podmínky WHERE v SQL dotazovém výrazu SELECT např.:
DataSet.Filter := 'Datum = 1.5.2000 AND Kusu < 5';
Příznak Filtered říká má-li se filtr uplatnit. Je-li příznak nastaven, tak změnou hodnoty Filter se okamžitě změní množina záznamů. Vlastnost Filter je implementována jako SELECT * FROM (CommandText) WHERE Filter, tedy uplatní se současně s případnou podmínkou z CommandText. Při deaktivaci datasetu se Filtered nastaví na FALSE.
Vlastnost Order představuje výraz, který definuje setřídění podmnožiny vybraných záznamů. Výraz má syntaxi podmínky ORDER BY v SELECTu např.:
DataSet.Order := 'Datum';nebo
DataSet.Order := 'Datum DESC, Kusu ASC';
Příznak Ordered říká má-li se setřídění uplatnit. Je-li příznak nastaven, tak změnou vlastnosti Order se okamžitě změní setřídění záznamů. Vlastnost Order nahrazuje případnou klauzuli ORDER BY uvedenou ve vlastnosti CommandText. Je implementována jako SELECT * FROM (CommandText) ORDER BY Order (případné ORDER BY z CommandText se neuplatní). Při deaktivaci datasetu se Ordered nastaví na FALSE.
Seznam parametrů dotazu. SQL dotaz reprezentující dataset může mít proměnné parametry. Jména, datové typy (ft...) a hodnoty parametrů se specifikují ve vlastnosti Params, např.:
DataSet.Params[0].Name := 'Val'; DataSet.Params[0].DataType := ftInteger; DataSet.Params[0].Value := 5; DataSet.CommandType := dsctQuery; DataSet.CommandText := 'SELECT * FROM MojeTabulka WHERE Id > :<Val';
nebo pomocí metod SetParam. Parametry, které odpovídají sloupcům typu CHAR(N) a BINARY(N), musí mít ve vlastnosti Size zadánu délku sloupce např.:
DataSet.Params[0].Name := 'Text'; DataSet.Params[0].DataType := ftString; DataSet.Params[0].Size := 12; DataSet.Params[0].Value := 'Můj text'; DataSet.CommandType := dsctQuery; DataSet.CommandText := 'SELECT * FROM MojeTabulka WHERE Text = :<Text';Pokud je délka hodnoty parametru větší než Size, bude při pokusu aktivovat dataset vyvolána výjimka třídy ESQL602Exception s kódem WBE_PARAMTOOLONG.
DSTel.ParamDataSet := DSKlienti; DSTel.CommandType := dsctQuery; DSTel.CommandText := 'SELECT Telefon FROM Telefony WHERE IDKlienta = :<ID';Hodnota parametru se bere z vlastnosti ParamDataSet, pouze pokud nebyla explicitně nastavena hodnota Value v příslušném parametru, v takovém případě má explicitní hodnota přednost. Na jednotlivé parametry se lze odkazovat pořadovým číslem nebo jménem prostřednictvím metody ParamByName, např.:
DataSet.ParamByName('Hodnota').Value := 5;Je-li ve vlastnosti Options nastaven příznak dsoAutoParams, budou po změně CommandText jména a typy parametrů vyplněny do seznamu Params automaticky. Explicitně lze seznam Params naplnit pomocí metody CheckParams.
MasterSource : TDataSource
MasterFields : string
DetailFields : stringTSQL602DataSet podporuje soustavy formulářů Master - Detail. Stačí u datasetu, který patří podřízenému formuláři nastavit vlastnost MasterSource na jméno DataSource (nikoliv DataSetu!) řídicího formuláře a do MasterFields a DetailFields, zapsat seznam odpovídajících si sloupců (oddělený středníkem). Pomocí Property editoru vyvolaného z MasterFields nebo DetailFileds lze jednodušeji vytvořit vazbu Master-Detail - objeví se seznamy sloupců obou tabulek/dotazů a pomocí Drag&Drop mezi odpovídajícími sloupci vazbu graficky znázorníte. Po zavření editoru se vazba přenese do příslušných properties. Při změně vybraného záznamu v řídicím formuláři se automaticky zaktualizuje podřízený formulář, při vložení nového záznamu do podřízeného datasetu se automaticky vyplní hodnota polí ze seznamu DetailFields hodnotami MasterFields.
Příznak, je-li dataset pouze pro čtení
Jméno sloupce, jehož hodnoty jsou pro každý záznam unikátní, v případě tabulky je nejlépe použít primární index. Sloupec s unikátní hodnotou je mj. potřeba pro práci se záložkami, pro znovunastavení aktuálního záznamu po obnovení a i v různých dalších akcích se mohou komponenty závislé na datasetu na toto spoléhat. Pokud tabulka nebo dotaz nemá unikátní klíč, lze jeho absenci pro potřeby TSQL602DataSet nahradit pomocí reakce na událost GetRecordIdent, případně pomocí virtuální funkce DoGetRecordIdent. Pokud je ve vlastnosti Options nastaven příznak dsoAutoPrimaryKey, bude jméno sloupce zjištěno automaticky při otevírání datasetu (má smysl jen pro tabulky).
Možnosti datasetu. Hodnota vlastnosti může být součtem hodnot:
dsoTransactedPost | Zápis změn do databáze a mazání záznamu bude provedeno v transakci, uvnitř transakce bude vyvolána událost OnPostDependent resp. OnDeleteDependent, aby bylo možné ve stejné transakci uložit související změny v ostatních datasetech. Dojde-li během ukládání změn k výjimce, bude celá transakce odvolána. V rutinách ošetřujících zápis a mazání v databázi lze pomocí vlastností TSQL602Connection.InTransaction a TSQL602DataSet.MyTransaction testovat, zda je transakce již otevřená a byla-li otevřena aktuálním, nebo některým nadřízeným datasetem. |
dsoLockedEdit | Při vstupu do editačního režimu se zamkne aktuální záznam pro zápis. K odemčení dojde po uložení nebo zrušení změn. Pokud je při přechodu do editačního režimu záznam zamčen jiným klientem, je vyvolána výjimka třídy ESQL602Exception s kódem WBE_LOCKFAILED. |
dsoRefreshedEdit | Při vstupu do editačního režimu se znovu načte aktuální záznam z databáze, aby byla jistota, že dataset obsahuje skutečně aktuální hodnoty. |
dsoAutoParams | Po změně vlastnosti CommandText se automaticky zaktualizuje seznam Params a vyplní se jména, typy a délky všech parametrů. Zjištění typů parametrů vyžaduje komunikaci s SQL serverem, při pomalém síťovém spojení může nastavení tohoto příznaku zdržovat otevírání datasetu. |
dsoAutoPrimaryKey | Pro tabulky a dotazy do jedné tabulky bude hodnota vlastnosti PrimaryKey zjištěna automaticky. Pokud má tabulka více unikátních indexů, bude použit primární klíč, pokud primární klíč není, bude použit poslední unikátní index ze seznamu. Zjištění vyžaduje komunikaci s SQL serverem, při pomalém síťovém spojení může nastavení tohoto příznaku zdržovat otevírání datasetu. |
dsoHiddenColumns | Do seznamu sloupců datasetu budou zahrnuty i případné skryté sloupce tabulky (_W5_...). |
dsoAutoRefresh | Má-li dataset nastavenou vlastnost ParamDataSet, pak po změně aktuálního záznamu nebo po změně hodnot v aktuálním záznamu ParamDataSet se dataset automaticky přebuduje podle nových hodnot parametrů. |
Typ záložky (bookmarku) může nabývat jednu z hodnot:
bmtUniKey | Záložka je definovaná jako ukazatel na záznam, který má danou hodnotu klíče specifikovaného vlastností PrimaryKey nebo jinou unikátní identifikaci, kterou poskytne aplikace ošetřením události GetRecordIdent nebo předefinováním virtuální metody DoGetRecordIdent. Pokud unikátní identifikace není k dispozici vyvolá pokus umístit záložku výjimku s chybou WBE_NORECORDIDENT. Na záložky tohoto typu nemá vliv refresh datasetu, změna třídění ani změna filtru. Záložka nezafunguje správně pouze tehdy, pokud se po jejím umístění změní hodnota unikátní identifikace. |
bmtAllValues | Záložka je definovaná jako ukazatel na záznam, který má ve všech sloupcích pevné délky dané hodnoty. Na záložky tohoto typu nemá vliv refresh datasetu, změna třídění ani změna filtru. Záložka nezafunguje správně pokud se po jejím umístění změní hodnota některého sloupce nebo pokud je v datasetu více záznamů, které mají ve všech sloupcích stejné hodnoty. |
bmtRecNO | Záložka je definovaná jako ukazatel na záznam s daným pořadovým číslem. Po refreshi datasetu pravděpodobně, po změně filtru nebo setřídění zcela určitě bude ukazovat na jiný záznam. Význam to má hlavně pro jiné komponenty Delphi, které vyžadují přítomnost bookmarků v datasetu (generátory sestav, grafů apod.), a přitom ale data již netřídí a nefiltrují. |
bmtDefault | Implicitní hodnota, použijí se záložky podle dostupných informací. Je-li specifikována vlastnost PrimaryKey nebo jiná unikátní identifikace záznamu, použijí se záložky typu bmtUniKey. Jinak pokud je zdrojem datasetu editovatelný dotaz, použijí se záložky typu bmtAllValues, jinak se použijí záložky typu bmtRecNO. V needitovatelných dotazech se záložkami typu bmtUniKey se záznam vždy vyhledává sekvenčním procházením celé množiny záznamů, což může být v případě rozsáhlejšího datasetu náročné jak časově tak na síťovou komunikaci. |
Seznam podmínek odlišný od podmínek v datasetu - viz popis TSQL602CondList. Současně s vytvořením datasetu se vytvoří implicitní seznam podmínek jménem CondList. SOučasně s destrukcí datasetu se CondList destruuje.
Představuje číslo kurzoru, kterým je naplněn dataset; je možné ho použít jako příslušný parametr ve funkcích 602SQL API. Nelze změnit.
Vlastnost informuje o tom, zda aktivní dataset otevřel explicitní transakci. Nelze změnit.
Seznam označených záznamů. Značky jsou uloženy ve formě záložky. Aktuální záznam lze označit, případně zrušit označení, pomocí metody MarkRecord. Metoda IsRecordMarked vrací příznak, je-li aktuální záznam označen.
Seznam tabulek, z nichž je sestaven zdrojový dotaz datasetu.
Třída TSQL602DataSet implementuje následující veřejné metody:
Metoda provede analýzu SELECTu z vlastnosti CommandText a vytvoří a naplní seznam Params jmény, typy a délkami parametrů SQL dotazu.
Nastaví hodnotu všech parametrů ze seznamu Params na nil.
Metoda vrací parametr zadaného jména.
function LockRecord(ROptions : TSQL602RLOptions = []) : Boolean; virtual;
type TSQL602RLOptions = set of (rloReadLock, rloRefresh);Pokusí se zamknout aktuální záznam. Je-li zadán příznak rloReadLock bude záznam zamčen pro čtení, tzn. ostatním klientům SQL serveru bude znemožněno zamknout stejný záznam pro přepis, jinak bude záznam zamčen pro přepis. Je-li zadán příznak rloRefresh, načte se po zamčení záznamu jeho obsah znovu z databáze, aby bylo jisté, že v záznamu jsou skutečně aktuální hodnoty. Zamčení záznamu může znemožnit práci ostatním klientům, mělo by tedy trvat jen nezbytně nutnou dobu. Záznam lze odemknout pomocí metod UnlockRecord nebo UnlockRecords, implicitně se všechny zamčené záznamy odemknou při deaktivaci datasetu. Funkce vrací true, pokud se záznam podařilo úspěšně zamknout a false, pokud záznam dříve zamknul jiný klient.
Odemkne aktuální záznam.
Odemkne všechny zamčené záznamy.
Zaktualizuje aktuální záznam tím, že všechny jeho hodnoty načte z databáze.
Přebuduje SQL dotaz, aby se v datasetu objevily případně zmizely záznamy, které přidali resp. zrušili ostatní klienti a nastaví aktuální záznam na záznam specifikovaný argumentem Cond. Argument Cond musí mít syntaxi podmínky WHERE SQL příkazu SELECT a měl by jednoznačně určit požadovaný záznam. Pokud podmínce vyhoví více záznamů, nastaví se jako aktivní první z nich. Pokud nevyhoví žádný, nastaví se první z datasetu.
Vrací true, pokud byla hodnota sloupce Field změněna a ještě není uložená do databáze.
Pokud byla hodnota sloupce Field změněna a ještě nebyla uložená do databáze, vrací jeho původní hodnotu.
Metoda označí resp. zruší označení aktuálního záznamu. Pokud má argument Value hodnotu true, umístí se na aktuálním záznamu záložka, přidá se do seznamu MarkedRecords a metoda ji vrátí jako funkční hodnotu. Pokud má argument Value hodnotu false a aktuální záznam je označen, vyjme ze záložka ze seznamu MarkedRecords, zruší se pomocí zděděné metody FreeBookmark a funkce vrátí nil.
Funkce vrací příznak zda byl aktuální záznam označen pomocí metody MarkRecord.
Provede součet hodnot sloupce FieldName a vrátí počet záznamů.
Argument FieldName je jméno sloupce, jehož hodnoty mají být sečteny. Výstupní argument aSum vrací hodnotu součtu. Pokud sloupec FieldName není numerického typu, bude výsledkem hodnota Unassigned, je-li dataset prázdný nebo se jedná o součet prázdných hodnot, bude výsledkem hodnota Null. Argumentem Flags se určují možnosti součtu podle následující tabulky:
Příznak Flags může nabývat hodnot
SFAll | Součet se provede přes všechny záznamy datasetu |
SFFromBegin | Součet se provede přes záznamy od začátku datasetu do aktuálního včetně |
SFToEnd | Součet se provede přes záznamy od aktuálního včetně do konce datasetu |
Předek třídy TSQL602DataSet třída TdataSet se chová tak, že je-li dataset v editačním nebo insert režimu a uživatel vyvolá změnu aktuálního záznamu, provede se implicitní uložení změn do databáze, pokud uživatel vyvolá deaktivaci datasetu, budou provedené změny zrušeny. To může způsobovat nežádané chování aplikace, případně zanášet nechtěné změny do databáze. Implementace TSQL602DataSet umožňuje na tyto situace reagovat pomocí události OnUnsavedChange nebo pomocí virtuální metody DoUnsavedChange. Metoda ApplPost představuje explicitní nebo vyžádaný post, tedy požadavek na uložení změn do databáze, který nevyvolá událost OnUnsavedChange.
Pro potřeby potomků implementuje třída TSQL602DataSet následující virtuální metody:
Metoda implementuje nastavení vlastnosti Connection. Potomkovi umožňuje provést při nastavování spojení na SQL server další akce.
procedure SetOrdered(Value: Boolean); virtual;
procedure SetOrder(const Value: string); virtual;Metody implementují nastavení vlastností Order a Ordered. Potomkovi umožňují provést při změně setřídění datasetu další akce.
procedure DoFilterChanged; virtual;
procedure DoOrderChanged; virtual;Umožňují v třídě potomka provádět po změně filtru resp. setřídění potřebné akce.
602SQL server nedovoluje vkládat záznamy do SQL kurzorů, které jsou tvořeny joinem několika tabulek. Komponenta TSQL602DataSet umožňuje toto omezení překlenout, umožňuje vkládat záznamy do kurzorů, které splňují určité podmínky:
Pro mazání v kurzorech tvořených joinem několika tabulek platí omezení uvedená v popisu DoJoinedInsert. Implicitní implementace DoJoinedDelete testuje, zda je specifikována obsluha události OnJoinedDelete, pokud ano, zavolá ji, pokud ne, smaže záznam v tabulce, která tvoří kořen stromu joinů.
Metoda se volá z metody Post, uvnitř případné transakce a umožňuje uložit do databáze související změny v ostatních datasetech. Implicitní implementace vyvolá událost OnPostDependent.
Metoda se volá z metody Delete, uvnitř případné transakce a umožňuje zapsat do databáze související změny v ostatních datasetech. Implicitní implementace vyvolá událost OnDeleteDependent.
function DoUnsavedChange(DfltAct : TUnsavedChange) : TUnsavedChange; virtual;
type TUnsavedChange = (ausBack, ausPost, ausCancel);Metoda se volá v situaci, kdy byly v aktuálním záznamu provedeny změny a uživatel vyvolá přechod na jiný záznam nebo deaktivaci datasetu aniž by změny byly pomocí metody ApplPost uloženy do databáze. Umožňuje aplikaci rozhodnout, jak se má se změnami naložit. Implicitní implementace testuje, zda existuje obsluha události OnUnsavedChange, pokud ano, zavolá ji, pokud ne, vrátí hodnotu argumentu DfltAct. Je-li metoda vyvolána přechodem na jiný záznam, má DfltAct hodnotu ausPost, je-li metoda vyvolána deaktivací datasetu, má DfltAct hodnotu ausCancel. Funkční hodnota způsobí:
ausPost | Změny budou uloženy do databáze |
ausCancel | Změny budou odvolány |
ausBack | Probíhající akce bude přerušena tím, že se provede skok na konec posledního try .. finally bloku |
Umožňuje na úrovni datasetu reagovat na databázovou událost. Sledování požadované databázové události musí být zaregistrováno pomocí komponenty TSQL602EventAction, která musí mít nastavený příznak DispatchToDataSets. Argument Event popisuje aktuální událost, ve vlastnostech Param a Count je uložena hodnota parametru události a počet, kolikrát událost nastala od jejího posledního zachycení.
Metoda se volá v situaci, kdy je pro potřeby práce se záložkami nebo pro nastavení původního aktuálního záznamu po přebudování kurzoru zjistit unikátní identifikaci aktuálního záznamu a komponenta nemá specifikovanou vlastnost PrimaryKey např. proto, že jedinečná identifikace závisí na vice než jednom sloupci, který se zadává v PrimaryKey. Funkce musí vrátit řetězec, který má syntaxi podmínky WHERE dotazového výrazu SELECT a jednoznačně identifikuje aktuální záznam. Jestliže podmínce vyhoví více záznamů, bude aktuální záznam nastaven na první z nich. Z důvodu rychlosti odezvy je nanejvýš rozumné, aby podmínka zde zadaná šla vyhodnocovat pomocí indexu. Implicitní implementace vyvolá událost GetRecordIdent.
Metoda umožňuje pozměnit SQL příkaz SELECT před použitím jako zdroj dat otevíraného kurzoru datasetu. Implicitní implementace vyvolá událost OnPreciseCommand.
procedure OnFilterChanged(Sender : TDataSet);
function OnOrderChanged(Sender : TDataSet) : string;Událost umožňuje aplikaci reagovat na požadavek vložit nový záznam do kurzoru tvořeného joinem několika tabulek. Funkce má jako argument dataset, který vložení nového záznamu požaduje a musí vložit nebo modifikovat záznamy v příslušných tabulkách a vrátit unikátní identifikaci vloženého záznamu. Identifikace má syntaxi podmínky WHERE SQL příkazu SELECT. Komponenta TSQL602DataSet pak zajistí přebudování kurzoru a nastavení aktuálního záznamu na záznam určený výstupní hodnotou.
Událost umožňuje aplikaci reagovat na požadavek smazat záznam v kurzoru tvořeném joinem několika tabulek. Procedura má jako argument dataset, který smazání záznamu požaduje a musí smazat nebo modifikovat záznamy v příslušných tabulkách. Komponenta TSQL602DataSet pak zajistí přebudování kurzoru.
Událost je vyvolána z metody Post, uvnitř případné transakce a umožňuje aplikaci uložit do databáze související změny v ostatních datasetech. Argumentem je dataset, který metodu Post vyvolal.
Událost je vyvolána volá z metody Delete, uvnitř případné transakce a umožňuje aplikaci zapsat do databáze související změny v ostatních datasetech. Argumentem je dataset, který metodu Delete vyvolal.
Událost je vyvolána v situaci, kdy byly v aktuálním záznamu provedeny změny a uživatel se pokusí o přechod na jiný záznam nebo o deaktivaci datasetu aniž by změny byly pomocí metody ApplPost uloženy do databáze. Umožňuje aplikaci rozhodnout, jak se má se změnami naložit. Argumentem je dataset, na kterém k události došlo. Funkční hodnota způsobí:
ausPost | Změny budou uloženy do databáze |
ausCancel | Změny budou odvolány |
ausBack | Probíhající akce bude přerušena tím, že se provede skok na konec posledního try .. finally bloku |
Událost umožňuje aplikaci reagovat na databázovou událost. Sledování požadované databázové události musí být zaregistrováno pomocí komponenty TSQL602EventAction, která musí mít nastavený příznak DispatchToDataSets. Událost je pak poručena všem datasetům připojeným k TSQL602EventAction.Connection. Argumentem Sender je aktuální dataset, argument Event popisuje databázovou událost, v jeho vlastnostech Param a Count je uložena hodnota parametru události a počet, kolikrát událost nastala od jejího posledního zachycení.
Událost je vyvolána v situaci, kdy je pro potřeby práce se záložkami nebo pro nastavení původního aktuálního záznamu po přebudování kurzoru zjistit unikátní identifikaci aktuálního záznamu a dataset nemá specifikovanou vlastnost PrimaryKey (např. proto, že jedinečná identifikace závisí na vice než jednom sloupci, který se zadává v PrimaryKey). Argumentem Sender je dataset, na kterém k události došlo. Funkce musí vrátit řetězec, který má syntaxi podmínky WHERE dotazového výrazu SELECT a jednoznačně identifikuje aktuální záznam. Z důvodu rychlosti odezvy je nanejvýš rozumné, aby podmínka zde zadaná šla vyhodnocovat pomocí indexu. Jestliže podmínce vyhoví více záznamů, bude aktuální záznam nastaven na první z nich.
Událost je vyvolána před každým otevření kurzoru. Umožňuje programu v parametru Command pozměnit SQL příkaz (SELECT), který bude použit jako definice zdroje dat.
Událost je vyvolána změnu v seznamu podmínek.
Událost je vyvolána změnou způsobu interpretace condlistu - změnou vlastnosti Filtrate a EmptyMeansAll.
![]() | TSQL602ODBCConnection | ![]() | Přehled CDK komponent | TSQL602CondList | ![]() |