Megosztás a következőn keresztül:


SQLSetCursorName függvény

megfelelőségi
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92

összefoglaló
SQLSetCursorName egy kurzornevet társít egy aktív utasításhoz. Ha egy alkalmazás nem hívja meg SQLSetCursorName, az illesztőprogram szükség szerint létrehozza a kurzorneveket az SQL-utasítás feldolgozásához.

Szintaxis

  
SQLRETURN SQLSetCursorName(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CursorName,  
     SQLSMALLINT   NameLength);  

Érvek

StatementHandle
[Bemenet] Utasításkezelő.

CursorName
[Bemenet] Kurzor neve. A hatékony feldolgozás érdekében a kurzor nevének nem szabad bevezető vagy záró szóközöket tartalmaznia a kurzor nevében, és ha a kurzor neve tagolt azonosítót tartalmaz, a határolót a kurzor nevének első karaktereként kell elhelyezni.

NameLength
[Bemenet] *CursorNamekaraktereinek hossza.

Visszatér

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR vagy SQL_INVALID_HANDLE.

Diagnosztika

Ha SQLSetCursorName SQL_ERROR vagy SQL_SUCCESS_WITH_INFO ad vissza, a társított SQLSTATE-érték az SQLGetDiagRec meghívásával SQL_HANDLE_STMT HandleType és StatementHandle . Az alábbi táblázat a SQLSetCursorName által gyakran visszaadott SQLSTATE-értékeket sorolja fel, és a függvény kontextusában ismerteti azokat; a(z) "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATES-ek leírását. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.

SQLSTATE Hiba Leírás
01000 Általános figyelmeztetés Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01004 Sztringadatok, jobb csonkolt A kurzornév túllépte a maximális korlátot, ezért csak a maximálisan megengedett számú karaktert használta.
24000 Érvénytelen kurzorállapot A StatementHandle megfelelő utasítás már végrehajtott vagy kurzorhoz igazított állapotban volt.
34000 Érvénytelen kurzornév A *CursorName megadott kurzornév érvénytelen volt, mert túllépte az illesztőprogram által meghatározott maximális hosszt, vagy "SQLCUR" vagy "SQL_CUR" néven indult.
3C000 Ismétlődő kurzornév A *CursorName megadott kurzornév már létezik.
HY000 Általános hiba Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát.
HY001 Memóriafoglalási hiba Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát.
HY009 Érvénytelen null mutató használata (DM) A CursorName argumentum null mutató volt.
HY010 Függvényütemezési hiba (DM) A rendszer aszinkron módon végrehajtó függvényt hívott meg a StatementHandletársított kapcsolati leíróhoz. Ez az aszinkron függvény továbbra is a SQLSetCursorName függvény meghívásakor lett végrehajtva.

(DM) A StatementHandle aszinkron módon végrehajtó függvényt hívott meg, és a függvény meghívása után is futtatta.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationsvagy SQLSetPos meghívást kapott az StatementHandle, és visszaadta SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg.
HY013 Memóriakezelési hiba A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt.
HY090 Érvénytelen sztring vagy puffer hossza (DM) A NameLength argumentum kisebb, mint 0, de nem egyenlő SQL_NTS.
HY117 A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. (DM) További információ a felfüggesztett állapotról: SQLEndTran függvény.
HYT01 A kapcsolat időtúllépése lejárt A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Az illesztőprogram nem támogatja ezt a függvényt (DM) A StatementHandle illesztőprogramja nem támogatja a függvényt.

Megjegyzések

A kurzornevek csak a pozícióban lévő frissítési és törlési utasításokban használatosak (például UPDATEtáblanév ...A kurzornévaktuális helye). További információ: Pozícióban lévő frissítési és törlési utasítások. Ha az alkalmazás nem hívja meg SQLSetCursorName a kurzornév definiálásához, a lekérdezési utasítás végrehajtásakor az illesztő létrehoz egy nevet, amely a SQL_CUR betűkkel kezdődik, és nem haladja meg a 18 karakter hosszúságot.

A kapcsolaton belüli összes kurzornévnek egyedinek kell lennie. A kurzornév maximális hosszát az illesztőprogram határozza meg. A maximális együttműködési képesség érdekében ajánlott, hogy az alkalmazások legfeljebb 18 karakter hosszúságú kurzorneveket korlátozzanak. Az ODBC 3*.x*-ban, ha egy kurzornév idézett azonosító, akkor a rendszer kis- és nagybetűkre érzékeny módon kezeli, és olyan karaktereket tartalmazhat, amelyeket az SQL szintaxisa nem tenne lehetővé vagy kezelne speciálisan, például üres vagy fenntartott kulcsszavakat. Ha a kurzornevet kis- és nagybetűk megkülönböztetésével kell kezelni, akkor idézett azonosítóként kell átadni.

A explicit vagy implicit módon beállított kurzornév mindaddig be van állítva, amíg a hozzá társított utasítás el nem kerül, SQLFreeHandlehasználatával. SQLSetCursorName meghívható egy utasítás kurzorának átnevezéséhez, amennyiben a kurzor lefoglalt vagy előkészített állapotban van.

Példa kódra

Az alábbi példában egy alkalmazás SQLSetCursorName használatával állítja be az utasítás kurzornevét. Ezt az utasítást használja az ÜGYFELEK táblából származó eredmények lekérésére. Végül egy pozíciófrissítést hajt végre, amely módosítja John Smith telefonszámát. Vegye figyelembe, hogy az alkalmazás különböző utasításkezelőket használ a SELECT és UPDATE utasításokhoz.

További példakód: SQLSetPos.

#define NAME_LEN 50  
#define PHONE_LEN 10  
  
SQLHSTMT     hstmtSelect,  
SQLHSTMT     hstmtUpdate;  
SQLRETURN    retcode;  
SQLHDBC      hdbc;  
SQLCHAR      szName[NAME_LEN], szPhone[PHONE_LEN];  
SQLINTEGER   cbName, cbPhone;  
  
/* Allocate the statements and set the cursor name. */  
  
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmtSelect);  
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmtUpdate);  
SQLSetCursorName(hstmtSelect, "C1", SQL_NTS);  
  
/* SELECT the result set and bind its columns to local buffers. */  
  
SQLExecDirect(hstmtSelect,  
      "SELECT NAME, PHONE FROM CUSTOMERS",  
      SQL_NTS);  
SQLBindCol(hstmtSelect, 1, SQL_C_CHAR, szName, NAME_LEN, &cbName);  
SQLBindCol(hstmtSelect, 2, SQL_C_CHAR, szPhone, PHONE_LEN, &cbPhone);  
  
/* Read through the result set until the cursor is */  
/* positioned on the row for John Smith. */  
  
do  
 retcode = SQLFetch(hstmtSelect);  
while ((retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) &&  
   (strcmp(szName, "Smith, John") != 0));  
  
/* Perform a positioned update of John Smith's name. */  
  
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
   SQLExecDirect(hstmtUpdate,  
   "UPDATE EMPLOYEE SET PHONE=\"2064890154\" WHERE CURRENT OF C1",  
   SQL_NTS);  
}  
További információ: Lát
SQL-utasítás végrehajtása SQLExecDirect függvény
Előkészített SQL-utasítás végrehajtása SQLExecute függvény
Kurzornév visszaadása SQLGetCursorName függvény
A kurzor görgetési beállításainak beállítása SQLSetScrollOptions függvény

Lásd még:

ODBC API-referencia
ODBC-fejlécfájlok