Udostępnij za pośrednictwem


SQLSetCursorName, funkcja

zgodności
Wersja wprowadzona: Zgodność ze standardami ODBC 1.0: ISO 92

podsumowania
SQLSetCursorName kojarzy nazwę kursora z aktywną instrukcją. Jeśli aplikacja nie wywołuje SQLSetCursorName, sterownik generuje nazwy kursorów zgodnie z potrzebami na potrzeby przetwarzania instrukcji SQL.

Składnia

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

Argumenty

, instrukcjaHandle
[Dane wejściowe] Uchwyt instrukcji.

CursorName
[Dane wejściowe] Nazwa kursora. W celu wydajnego przetwarzania nazwa kursora nie powinna zawierać żadnych spacji wiodących ani końcowych w nazwie kursora, a jeśli nazwa kursora zawiera identyfikator rozdzielany, ogranicznik powinien być umieszczony jako pierwszy znak w nazwie kursora.

NameLength
[Dane wejściowe] Długość znaków *CursorName.

Zwraca

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy sqlSetCursorName zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, skojarzona wartość SQLSTATE może zostać uzyskana przez wywołanie SQLGetDiagRec za pomocą typu HandleType SQL_HANDLE_STMT oraz StatementHandle. W poniższej tabeli wymieniono wartości SQLSTATE, które są często zwracane przez SQLSetCursorName i objaśniono poszczególne wartości w kontekście tej funkcji; notacja "(DM)" poprzedza opisy obiektów SQLSTATEs zwróconych przez menedżera sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

SQLSTATE Błąd Opis
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
01004 Dane ciągów, prawe obcięte Nazwa kursora przekroczyła maksymalny limit, więc użyto tylko maksymalnej dozwolonej liczby znaków.
24000 Nieprawidłowy stan kursora Instrukcja odpowiadająca StatementHandle była już w stanie wykonanym lub umieszczonym kursorem.
34000 Nieprawidłowa nazwa kursora Nazwa kursora określona w *CursorName była nieprawidłowa, ponieważ przekroczyła maksymalną długość zdefiniowaną przez sterownik lub rozpoczęła się od ciągu "SQLCUR" lub "SQL_CUR".
3C000 Zduplikowana nazwa kursora Nazwa kursora określona wCursorName już istnieje.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego stanu SQLSTATE i dla którego nie zdefiniowano parametru SQLSTATE specyficznego dla implementacji. Komunikat o błędzie zwrócony przez SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY009 Nieprawidłowe użycie wskaźnika o wartości null (DM) Argument CursorName był wskaźnikiem o wartości null.
HY010 Błąd sekwencji funkcji (DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z StatementHandle. Ta funkcja asynchroniczna była nadal wykonywana, gdy wywołano funkcję SQLSetCursorName.

(DM) Asynchronicznie wykonywana funkcja została wywołana dla StatementHandle i nadal była wykonywana, gdy ta funkcja została wywołana.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationslub SQLSetPos została wywołana dla StatementHandle i zwrócona SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY090 Nieprawidłowa długość ciągu lub buforu (DM) Argument NameLength był mniejszy niż 0, ale nie równy SQL_NTS.
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz funkcja SQLEndTran.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik skojarzony z instrukcją Handle nie obsługuje funkcji.

Komentarze

Nazwy kursorów są używane tylko w instrukcjach aktualizacji i usuwania umieszczonych (na przykład UPDATEnazwa tabeli ...GDZIE BIEŻĄCA NAZWA kursora). Aby uzyskać więcej informacji, zobacz Instrukcje aktualizacji i usuwania. Jeśli aplikacja nie wywołuje SQLSetCursorName w celu zdefiniowania nazwy kursora, podczas wykonywania instrukcji zapytania sterownik generuje nazwę rozpoczynającą się od liter SQL_CUR i nie przekracza 18 znaków.

Wszystkie nazwy kursorów w ramach połączenia muszą być unikatowe. Maksymalna długość nazwy kursora jest definiowana przez sterownik. W przypadku maksymalnej współdziałania zaleca się, aby aplikacje ograniczały nazwy kursorów do nie więcej niż 18 znaków. W formacie ODBC 3*.x*, jeśli nazwa kursora jest identyfikatorem cytowanym, jest traktowana w sposób uwzględniający wielkość liter i może zawierać znaki, na które składnia języka SQL nie zezwala lub traktuje się specjalnie, na przykład puste lub zastrzeżone słowa kluczowe. Jeśli nazwa kursora musi być traktowana w sposób uwzględniający wielkość liter, musi zostać przekazana jako identyfikator cytowany.

Nazwa kursora ustawiana jawnie lub niejawnie pozostaje ustawiona do momentu porzucenia instrukcji, z którą jest skojarzona, przy użyciu SQLFreeHandle. SQLSetCursorName można wywołać, aby zmienić nazwę kursora na instrukcji, o ile kursor jest w stanie przydzielonym lub przygotowanym.

Przykład kodu

W poniższym przykładzie aplikacja używa SQLSetCursorName, aby ustawić nazwę kursora dla instrukcji. Następnie używa tej instrukcji do pobierania wyników z tabeli CUSTOMERS. Na koniec wykonuje aktualizację umieszczoną w celu zmiany numeru telefonu Johna Smitha. Należy pamiętać, że aplikacja używa różnych dojść instrukcji dla instrukcji SELECT i UPDATE instrukcji.

Aby zapoznać się z innym przykładem kodu, zobacz 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);  
}  
Aby uzyskać informacje o Widzieć
Wykonywanie instrukcji SQL funkcji SQLExecDirect
Wykonywanie przygotowanej instrukcji SQL funkcji SQLExecute
Zwracanie nazwy kursora funkcji SQLGetCursorName
Ustawianie opcji przewijania kursora sqlSetScrollOptions, funkcja

Zobacz też

dokumentacja interfejsu API ODBC
plików nagłówków ODBC