Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce SQLSTATEs poskytují podrobné informace o příčině upozornění nebo chyby. Funkce SQLSTATEs v této příručce jsou založené na těch, které jsou uvedeny ve specifikaci rozhraní příkazového řádku ISO/IEF, i když tyto funkce SQLSTATEs, které začínají pomocí rychlých zpráv, jsou specifické pro rozhraní ODBC.
Na rozdíl od návratových kódů jsou SQLSTATEs v této příručce doporučeními a ovladače je nemusí vracet. Zatímco ovladače by měly vrátit správnou hodnotu SQLSTATE pro každou chybu nebo upozornění, které jsou schopny rozpoznat, aplikace by se neměly spolehnout na to, že k tomu vždy dochází. Důvody této situace jsou dvojí:
Nekompletnost I když tato příručka uvádí velký počet chyb a varování a možných příčin těchto chyb a varování, není kompletní a pravděpodobně nikdy nebude; implementace ovladačů se jednoduše příliš liší. Jakkýkoli ovladač pravděpodobně nevrátí všechny stavy SQLSTATEs uvedené v této příručce a může vrátit stavy SQLSTATEs, které v této příručce uvedené nejsou.
Složitost Některé databázové stroje – zejména relační databázové stroje – vrací doslova tisíce chyb a upozornění. Ovladače těchto modulů pravděpodobně nemapují všechny tyto chyby a upozornění na SQLSTATEs kvůli úsilí spojenému s tím, nepřesnosti mapování, velkému objemu výsledného kódu a jeho malé hodnotě, což je často kód, který vrací programovací chyby, které by se neměly vyskytovat během běhu programu. Ovladače by proto měly mapovat tolik chyb a upozornění, kolik se zdá rozumné, a nezapomeňte namapovat tyto chyby a upozornění, na kterých může být založena logika aplikace, například SQLSTATE 01004 (Data zkrácena).
Vzhledem k tomu, že stav SQLSTATEs se spolehlivě nevracejí, většina aplikací je jenom zobrazí uživateli spolu s přidruženou diagnostickou zprávou, která je často přizpůsobená konkrétní chybě nebo upozornění, která nastala, a nativnímu kódu chyby. V tomhle případě dochází jen zřídka ke ztrátě funkčnosti, protože aplikace nemohou založit programovací logiku na většině sqlSTATEs. Předpokládejme například, že SQLExecDirect vrátí chybu SQLSTATE 42000 (chyba syntaxe nebo narušení přístupu). Pokud je příkaz SQL, který způsobil tuto chybu, pevně zakódovaný nebo sestavený aplikací, jedná se o programovací chybu a kód je potřeba opravit. Pokud uživatel zadá příkaz SQL, jedná se o chybu uživatele a aplikace udělala vše, co je možné, tím, že informuje uživatele o problému.
Když aplikace zakládají svou programovou logiku na SQLSTATE, měly by být připravené na situaci, kdy se SQLSTATE nemusí vracet, nebo se vrátí jiný SQLSTATE. Přesně to, které SQLSTATEs jsou spolehlivě vráceny, může být založeno pouze na zkušenostech s mnoha ovladači. Obecně však platí, že stavy SQL pro chyby, ke kterým dochází v ovladači nebo Správci ovladačů, na rozdíl od zdroje dat, jsou pravděpodobněji spolehlivě vráceny. Například většina ovladačů pravděpodobně vrátí SQLSTATE HYC00 (volitelná funkce není implementována), zatímco méně ovladačů pravděpodobně vrátí SQLSTATE 42021 (sloupec již existuje).
Následující funkce SQLSTATE označují chyby nebo upozornění za běhu a jsou vhodnými kandidáty, na kterých se má založit programovací logika. Není však zaručeno, že je všichni řidiči vrátí.
01004 (zkrácená data)
01S02 (změněná hodnota možnosti)
HY008 (operace byla zrušena)
HYC00 (volitelná funkce není implementována)
HYT00 (Časový limit vypršel)
SQLSTATE HYC00 (volitelná funkce není implementována) je obzvláště významný, protože je to jediný způsob, jakým může aplikace určit, zda ovladač podporuje konkrétní příkaz nebo atribut připojení.
Úplný seznam funkcí SQLSTATEs a jejich vrácení najdete v dodatku A: Kódy chyb ODBC. Podrobné vysvětlení podmínek, za kterých může každá funkce vrátit konkrétní funkci SQLSTATE, najdete v této funkci.