Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
| 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 |
| 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 |
| 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);
}
Kapcsolódó függvények
| 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