Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
ODBC definierar diskreta tillstånd för varje miljö, varje anslutning och varje instruktion. Miljön har till exempel tre möjliga tillstånd: Ej allokerad (där ingen miljö allokeras), Allokerad (där en miljö allokeras men inga anslutningar allokeras) och Anslutning (där en miljö och en eller flera anslutningar allokeras). Anslutningar har sju möjliga tillstånd; uttalanden har 13 möjliga tillstånd.
Ett visst objekt, som identifieras av dess handtag, flyttas från ett tillstånd till ett annat när programmet anropar en viss funktion eller funktioner och skickar handtaget till det objektet. En sådan rörelse kallas för en tillståndsövergång. Om du till exempel allokerar miljöns handtag med SQLAllocHandle flyttas miljön från ej allokerad till allokerad, och att frigöra den handtaget med SQLFreeHandle returnerar den från allokerad till ej allokerad. ODBC definierar ett begränsat antal övergångar av juridiska tillstånd, vilket är ett annat sätt att säga att funktioner måste anropas i en viss ordning.
Vissa funktioner, till exempel SQLGetConnectAttr, påverkar inte tillståndet alls. Andra funktioner påverkar tillståndet för ett enskilt objekt. Till exempel flyttar SQLDisconnect en anslutning från ett anslutningstillstånd till ett allokerat tillstånd. Slutligen påverkar vissa funktioner tillståndet för mer än ett objekt. Om du till exempel allokerar ett anslutningshandtag med SQLAllocHandle flyttas en anslutning från ett oallokerat till ett allokerat tillstånd och flyttar miljön från ett Allokerat till ett anslutningstillstånd.
Om ett program anropar en funktion i fel ordning returnerar funktionen ett tillståndsövergångsfel. Om en miljö till exempel är i ett anslutningstillstånd och programmet anropar SQLFreeHandle med den miljöreferensen returnerar SQLFreeHandle SQLSTATE HY010 (funktionssekvensfel), eftersom den bara kan anropas när miljön är i ett allokerat tillstånd. Genom att definiera detta som en ogiltig tillståndsövergång förhindrar ODBC att programmet frigör miljön medan det finns aktiva anslutningar.
Vissa tillståndsövergångar ingår i utformningen av ODBC. Det går till exempel inte att allokera ett anslutningshandtag utan att först allokera ett miljöhandtag, eftersom funktionen som allokerar ett anslutningshandtag kräver ett miljöhandtag. Andra tillståndsövergångar framtvingas av Drivrutinshanteraren och drivrutinerna. SqlExecute kör till exempel en förberedd instruktion. Om instruktionsreferensen som skickas till den inte är i ett förberett tillstånd returnerar SQLExecute SQLSTATE HY010 (funktionssekvensfel).
Från programmets synvinkel är tillståndsövergångar vanligtvis enkla: Juridiska tillståndsövergångar tenderar att gå hand i hand med flödet i ett välskrivet program. Tillståndsövergångar är mer komplexa för Driver Manager och drivrutinerna eftersom de måste spåra tillståndet för miljön, varje anslutning och varje instruktion. Det mesta av det här arbetet utförs av Drivrutinshanteraren, medan det mesta av det arbete som måste utföras av drivrutiner sker genom instruktioner med väntande resultat.
Del 1 och 2 i den här handboken ("Introduktion till ODBC" och "Utveckla program och drivrutiner") brukar inte uttryckligen nämna tillståndsövergångar. I stället beskriver de i vilken ordning funktionerna måste anropas. "Kör instruktioner" anger till exempel att en instruktion måste förberedas med SQLPrepare innan den kan köras med SQLExecute. En fullständig beskrivning av tillstånd och tillståndsövergångar, inklusive vilka övergångar som kontrolleras av drivrutinshanteraren och som måste kontrolleras av drivrutiner, finns i Bilaga B: ODBC-övergångstabeller för tillstånd.