Sdílet prostřednictvím


Přechody stavu

Rozhraní ODBC definuje samostatné stavy pro každé prostředí, každé připojení a každý příkaz. Prostředí má například tři možné stavy: Nepřidělené (ve kterém není přiděleno žádné prostředí), Přiděleno (ve kterém je přiděleno prostředí, ale nejsou přidělena žádná připojení) a Připojení (ve kterém je přiděleno prostředí a jedno nebo více připojení). Připojení mají sedm možných stavů; příkazy mají 13 možných stavů.

Konkrétní položka, jak je identifikováno jejím popisovačem, se přesune z jednoho stavu do druhého, když aplikace volá určitou funkci nebo funkce a předá popisovač této položce. Takový pohyb se nazývá přechod stavu. Například přidělit popisovač prostředí pomocí SQLAllocHandle přesune prostředí z Nepřidělené na Přidělené, a uvolnit tento popisovač pomocí SQLFreeHandle ho vrátí z Přidělené na Nepřidělené. ODBC definuje omezený počet přechodů stavů, což je jiný způsob, jak říci, že funkce musí být volány v určitém pořadí.

Některé funkce, například SQLGetConnectAttr, vůbec neovlivňují stav. Další funkce ovlivňují stav jedné položky. SqlDisconnect například přesune připojení ze stavu připojení do přiděleného stavu. A konečně některé funkce ovlivňují stav více než jedné položky. Například přidělení popisovače připojení pomocí SQLAllocHandle přesune připojení z nepřiděleného do přiděleného stavu a přesune prostředí z přiděleného stavu do stavu připojení.

Pokud aplikace volá funkci mimo pořadí, vrátí funkce chybu přechodu stavu. Pokud je například prostředí ve stavu Připojení a aplikace volá SQLFreeHandle s tímto popisovačem prostředí, SQLFreeHandle vrátí SQLSTATE HY010 (chyba pořadí funkcí), protože ji lze volat pouze tehdy, když je prostředí ve stavu Přiděleno. Když tuto možnost definujete jako neplatný přechod stavu, rozhraní ODBC zabrání aplikaci v uvolnění prostředí v době aktivních připojení.

Některé přechody stavu jsou nedílnou součástí návrhu rozhraní ODBC. Například není možné přidělit popisovač připojení bez prvního přidělení popisovače prostředí, protože funkce, která přiděluje popisovač připojení, vyžaduje popisovač prostředí. Jiné přechody stavu vynucují správce ovladačů a ovladače. Například SQLExecute spustí připravený příkaz. Pokud popisovač příkazu předaný není v připraveném stavu, vrátí SQLExecute SQLSTATE HY010 (chyba sekvence funkcí).

Z pohledu aplikace jsou přechody stavů obvykle jednoduché: Legální přechody stavů mají tendenci jít ruku v ruce s průběhem dobře napsané aplikace. Přechody stavu jsou pro Správce ovladačů a ovladače složitější, protože musí sledovat stav prostředí, každé připojení a každý příkaz. Většinu této práce provádí správce ovladačů; většina práce, kterou musí ovladače provádět, nastává při práci s příkazy, které čekají na výsledky.

Části 1 a 2 této příručky ("Úvod do rozhraní ODBC" a "Vývoj aplikací a ovladačů") nemají tendenci explicitně zmínit přechody stavu. Místo toho popisují pořadí, ve kterém se funkce musí volat. Například "Provádění příkazů" uvádí, že příkaz musí být připravený pomocí sqlPrepare před spuštěním pomocí sqlExecute. Úplný popis stavů a přechodů stavu, včetně přechodů, které správce ovladačů kontroluje a které musí být kontrolovány ovladači, naleznete v dodatku B: Tabulky přechodů stavu ODBC.