Aracılığıyla paylaş


SQLSetCursorName İşlevi

uyumluluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92

Özeti
SQLSetCursorName bir imleç adını etkin bir deyimle ilişkilendirir. Bir uygulama SQLSetCursorNameçağırmazsa, sürücü SQL deyiminin işlenmesi için gereken imleç adlarını oluşturur.

Sözdizimi

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

Bağımsız değişken

StatementHandle
[Giriş] Deyim tanıtıcısı.

CursorName
[Giriş] İmleç adı. Verimli işleme için, imleç adı imleç adında baştaki veya sondaki boşlukları içermemelidir ve imleç adı sınırlandırılmış bir tanımlayıcı içeriyorsa, sınırlayıcı imleç adında ilk karakter olarak konumlandırılmalıdır.

NameLength
[Giriş] *CursorNamekarakterlerinde uzunluk.

Döndürür

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR veya SQL_INVALID_HANDLE.

Tanılama

SQLSetCursorName SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, SQL_HANDLE_STMT HandleType ve StatementHandleHandle ile SQLGetDiagRec çağrılarak ilişkili bir SQLSTATE değeri elde edilebilir. Aşağıdaki tabloda, SQLSetCursorName tarafından yaygın olarak döndürülen SQLSTATE değerleri listelenir ve her biri bu işlev bağlamında açıklanmaktadır; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATEs açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.

SQLSTATE Hata Açıklama
01000 Genel uyarı Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.)
01004 Dize verileri, sağ kesilmiş İmleç adı üst sınırı aştı, bu nedenle yalnızca izin verilen karakter sayısı üst sınırı kullanıldı.
24000 Geçersiz imleç durumu StatementHandle karşılık gelen deyim zaten yürütülmüş veya imleç konumlandırılmış durumdaydı.
34000 Geçersiz imleç adı *CursorName içinde belirtilen imleç adı, sürücü tarafından tanımlanan uzunluk üst sınırını aştığından veya "SQLCUR" veya "SQL_CUR" ile başladığından geçersizdi.
3C000 Yinelenen imleç adı *CursorName içinde belirtilen imleç adı zaten var.
HY000 Genel hata Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğindeki SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar.
HY001 Bellek ayırma hatası Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı.
HY009 Geçersiz null işaretçi kullanımı (DM) CursorName bağımsız değişkeni null işaretçiydi.
HY010 İşlev dizisi hatası (DM) StatementHandleile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. SQLSetCursorName işlevi çağrıldığında bu zaman uyumsuz işlev hala yürütülüyordu.

(DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationsveya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı.
HY013 Bellek yönetimi hatası Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi.
HY090 Geçersiz dize veya arabellek uzunluğu (DM) NameLength bağımsız değişkeni 0'dan küçüktür ancak SQL_NTS eşit değildir.
HY117 Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. (DM) Askıya alma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi.
HYT01 Bağlantı zaman aşımı süresi doldu Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttrSQL_ATTR_CONNECTION_TIMEOUT üzerinden ayarlanır.
IM001 Sürücü bu işlevi desteklemiyor (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor.

Yorum

İmleç adları yalnızca konumlanmış güncelleştirme ve silme deyimlerinde kullanılır (örneğin, UPDATEtablo-adı ...WHERE CURRENT OFimleç-adı). Daha fazla bilgi için bkz. Konumlanmış Güncelleştirme ve Silme Deyimleri. Uygulama bir imleç adı tanımlamak için SQLSetCursorName çağırmazsa, sorgu deyiminin yürütülmesinde sürücü SQL_CUR harfleriyle başlayan ve uzunluğu 18 karakteri aşmayan bir ad oluşturur.

Bağlantıdaki tüm imleç adları benzersiz olmalıdır. İmleç adının uzunluk üst sınırı sürücü tarafından tanımlanır. Birlikte çalışabilirlik üst sınırı için uygulamaların imleç adlarını en fazla 18 karakterle sınırlaması önerilir. ODBC 3*.x*'te, bir imleç adı tırnak içine alınmış bir tanımlayıcıysa, büyük/küçük harfe duyarlı bir şekilde ele alınır ve SQL söz diziminin izin vermeyeceğini veya boşluklar veya ayrılmış anahtar sözcükler gibi özel olarak işleyebilecek karakterler içerebilir. İmleç adı büyük/küçük harfe duyarlı bir şekilde ele alınmalıdır, tırnak içinde tanımlayıcı olarak geçirilmelidir.

SQLFreeHandlekullanılarak, ilişkilendirilmiş olduğu deyim bırakılana kadar açıkça veya örtük olarak ayarlanmış bir imleç adı ayarlanmış olarak kalır. SQLSetCursorName, imleç ayrılmış veya hazırlanmış durumda olduğu sürece deyimindeki bir imleci yeniden adlandırmak için çağrılabilir.

Kod Örneği

Aşağıdaki örnekte bir uygulama SQLSetCursorName kullanarak bir deyim için imleç adı ayarlar. Daha sonra CUSTOMERS tablosundan sonuçları almak için bu deyimi kullanır. Son olarak, John Smith'in telefon numarasını değiştirmek için konumlandırılmış bir güncelleştirme gerçekleştirir. Uygulamanın SELECT için farklı deyim tanıtıcıları kullandığını ve UPDATE deyimlerini unutmayın.

Başka bir kod örneği için bkz. 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);  
}  
Hakkında bilgi için Görmek
SQL deyimi yürütme SQLExecDirect İşlevi
Hazırlanmış bir SQL deyimini yürütme SQLExecute İşlevi
İmleç adı döndürme SQLGetCursorName İşlevi
İmleç kaydırma seçeneklerini ayarlama SQLSetScrollOptions İşlevi

Ayrıca Bkz.

ODBC API Başvurusu
ODBC Üst Bilgi Dosyaları