Megosztás:


Fogantyúk

A kulcsok átlátszatlan, 32 bites értékek, amelyek egy adott elemet azonosítanak; az ODBC-ben ez az elem lehet környezet, kapcsolat, utasítás vagy leíró. Amikor az alkalmazás meghívja az SQLAllocHandle-t, az Illesztőprogram-kezelő vagy az illesztőprogram létrehoz egy új elemet a megadott típusból, és visszaadja a leíróját az alkalmazásnak. Az alkalmazás később a leíró segítségével azonosítja az elemet az ODBC-függvények meghívásakor. Az illesztőprogram-kezelő és az illesztőprogram a fogantyúval keresi meg az elem adatait.

Az alábbi kód például két utasításkezelőt (hstmtOrder és hstmtLine) használ az értékesítési rendelések és az értékesítési rendeléssorok eredménykészletének létrehozásához szükséges utasítások azonosítására. Később ezekkel a leírókkal határozza meg, melyik eredményhalmazból olvassa be az adatokat.

SQLHSTMT      hstmtOrder, hstmtLine; // Statement handles.  
SQLUINTEGER   OrderID;  
SQLINTEGER    OrderIDInd = 0;  
SQLRETURN     rc;  
  
// Prepare the statement that retrieves line number information.  
SQLPrepare(hstmtLine, "SELECT * FROM Lines WHERE OrderID = ?", SQL_NTS);  
  
// Bind OrderID to the parameter in the preceding statement.  
SQLBindParameter(hstmtLine, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,  
               &OrderID, 0, &OrderIDInd);  
  
// Bind the result sets for the Order table and the Lines table. Bind  
// OrderID to the OrderID column in the Orders table. When each row is  
// fetched, OrderID will contain the current order ID, which will then be  
// passed as a parameter to the statement tofetch line number  
// information. Code not shown.  
  
// Create a result set of sales orders.  
SQLExecDirect(hstmtOrder, "SELECT * FROM Orders", SQL_NTS);  
  
// Fetch and display the sales order data. Code to check if rc equals  
// SQL_ERROR or SQL_SUCCESS_WITH_INFO not shown.  
while ((rc = SQLFetch(hstmtOrder)) != SQL_NO_DATA) {  
   // Display the sales order data. Code not shown.  
  
   // Create a result set of line numbers for the current sales order.  
   SQLExecute(hstmtLine);  
  
   // Fetch and display the sales order line number data. Code to check  
   // if rc equals SQL_ERROR or SQL_SUCCESS_WITH_INFO not shown.  
   while ((rc = SQLFetch(hstmtLine)) != SQL_NO_DATA) {  
      // Display the sales order line number data. Code not shown.  
   }  
  
   // Close the sales order line number result set.  
   SQLCloseCursor(hstmtLine);  
}  
  
// Close the sales order result set.  
SQLCloseCursor(hstmtOrder);  

A leírók csak az őket létrehozó ODBC-összetevő számára értelmezhetők; azaz csak az illesztőprogram-kezelő tudja értelmezni az illesztőprogram-kezelő leíróit, és csak az illesztőprogram tudja értelmezni a saját leíróit.

Tegyük fel például, hogy az előző példában szereplő illesztő lefoglal egy struktúrát egy utasítás információinak tárolásához, és az utasításkezelőként erre a struktúrára mutató mutatót ad vissza. Amikor az alkalmazás meghívja az SQLPrepare-t, átad egy SQL-utasítást és az értékesítési rendeléssorszámokhoz használt utasítás leíróját. Az illesztőprogram elküldi az SQL-utasítást az adatforrásnak, amely előkészíti és visszaad egy hozzáférési terv azonosítót. Az illesztőprogram a fogantyút használja az azonosító tárolására szolgáló struktúra megkereséséhez.

Később, amikor az alkalmazás meghívja az SQLExecute-et, hogy létrehozza egy adott értékesítési rendeléshez tartozó eredményhalmazt, ugyanazt a leírót adja át. Az illesztőprogram a fogantyúval kéri le a hozzáférési terv azonosítóját a struktúrából. Elküldi az azonosítót az adatforrásnak, hogy megmondja, melyik tervet kell végrehajtania.

Az ODBC két fogópontszinttel rendelkezik: Az Illesztőprogram-kezelő fogópontjai és az illesztőprogram-leírók. Az alkalmazás az ODBC-függvények hívása során illesztőprogram-kezelői leírókat használ, mivel az illesztőprogram-kezelőben meghívja ezeket a függvényeket. Az Illesztőprogram-kezelő ezzel a leíróval keresi meg a megfelelő illesztőprogram-leírót, és az illesztőprogram-leírót használja a függvény illesztőprogramban való meghívásakor. Az illesztőprogramok és az Illesztőprogram-kezelő kezeléseinek használatára példa: Illesztőprogram-kezelő szerepköre a kapcsolati folyamatban.

A kezelők két szintje az ODBC-architektúra egy jelensége; a legtöbb esetben nem releváns sem az alkalmazás, sem az illesztőprogram szempontjából. Bár erre általában nincs ok, lehetséges, hogy az alkalmazás az SQLGetInfo meghívásával határozza meg az illesztőprogram-leírókat.

Ez a szakasz a következő témaköröket tartalmazza.