Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Tanıtılan Sürüm: ODBC 3.0 Standartlarına Uyum: ISO 92
Summary
SQLGetDescField , tanımlayıcı kaydının tek bir alanının mevcut ayarını veya değerini döndürür.
Syntax
SQLRETURN SQLGetDescField(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT FieldIdentifier,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Arguments
DescriptorHandle
[Giriş] Tanımlayıcı sapı.
RecNumber
[Giriş] Uygulamanın bilgi aradığı tanımlayıcı kaydı gösterir. Tanımlayıcı kayıtlar 0'dan başlayarak numaralandırılır, kayıt numarası 0 yer imi kaydıdır.
FieldIdentifier argümanı başlık alanı gösterirse, RecNumber göz ardı edilir.
RecNumber SQL_DESC_COUNT'den küçük veya eşitse ancak satırda bir sütun veya parametre için veri bulunmuyorsa, SQLGetDescField çağrısı alanların varsayılan değerlerini döndürecektir. (Daha fazla bilgi için SQLSetDescField içindeki "Tanımlayıcı Alanların Başlatılması" bölümüne bakınız.)
FieldIdentifier
[Giriş] Değeri geri verilecek tanımlayıcı alanını gösterir. Daha fazla bilgi için SQLSetDescField içindeki "FieldIdentifier Argument" bölümüne bakınız.
Valueptr
[Çıkış] Tanımlayıcı bilgisini döndürmek için bir tampon işareti. Veri türü, FieldIdentifier'ın değerine bağlıdır.
Eğer ValuePtr tamsayı tipindeyse, uygulamalar SQLULEN tamponu kullanmalı ve bu fonksiyonu çağırmadan önce değeri 0'a başlatmalıdır; çünkü bazı sürücüler yalnızca alt 32-bit veya 16-bit tamponu yazabilir ve üst dereceden biti değiştirmeden bırakabilir.
ValuePtr NULL ise, StringLengthPtr yine de ValuePtr tarafından işaret edilen tamponda döndürülebilecek toplam bayt sayısını (karakter verisi için null-sonlandırma karakteri hariç) döndürecektir.
BufferLength
[Giriş] Eğer FieldIdentifier , ODBC tanımlı bir alan ise ve ValuePtr bir karakter dizisi veya ikili tampon işaret ediyorsa, bu argüman *ValuePtr'nin uzunluğu olmalıdır.
Eğer FieldIdentifier ODBC tanımlı bir alan ve *ValuePtr bir tam sayı ise, BufferLength göz ardı edilir.
*ValuePtr'deki değer Unicode veri tipine aitse (SQLGetDescFieldW çağrılarken), BufferLength argümanı çift sayı olmalıdır.
Eğer FieldIdentifier sürücü tanımlı bir alan ise, uygulama alanın doğasını BufferLength argümanını ayarlayarak Driver Manager'a bildirir. BufferLength aşağıdaki değerlere sahip olabilir:
Eğer *ValuePtr bir karakter dizesine işaret ediyorsa, BufferLength dizinin veya SQL_NTS'nin uzunluğudur.
Eğer *ValuePtr ikili bir tampona işaret ise, uygulama SQL_LEN_BINARY_ATTR(uzunluk) makrosunun sonucunu BufferLength'e yerleştirir. Bu, BufferLength içinde negatif bir değer verir.
Eğer *ValuePtr, karakter dizisi veya ikili dizi dışında bir değere işaret eden bir işaretçiyse, BufferLength SQL_IS_POINTER değerine sahip olmalıdır.
Eğer *ValuePtr sabit uzunluklu bir veri tipi içeriyorsa, BufferLength uygun şekilde ya SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT ya da SQL_IS_USMALLINT olur.
StringLengthPtr
[Çıkış] *ValuePtr'de döndürülebilecek toplam bayt sayısını (null-termination karakteri için gereken bayt sayısı hariç) döndürülecek tampona işaret.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA ya da SQL_INVALID_HANDLE.
SQL_NO_DATA RecNumber mevcut tanımlayıcı kayıt sayısından büyükse döner.
SQL_NO_DATA DescriptorHandle bir IRD kullanıcı olarak ve ifade hazırlanmış veya çalıştırılmış durumdaysa ancak açık imleç ilişkili değilse döner.
Diagnostics
SQLGetDescField SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri alınabilir; bu değer SQLGetDiagRec ile SQL_HANDLE_STMT HandleType ve StatementHandle ile çağrılabilir. Aşağıdaki tablo, SQLGetDescField tarafından sıkça duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 01004 | Dize verileri, sağ kesilmiş | *ValuePtr tamponu tüm tanımlayıcı alanını döndürecek kadar büyük değildi, bu yüzden alan kısaltıldı. Kıstırılmamış tanımlayıcı alanının uzunluğu *StringLengthPtr. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 07009 | Geçersiz tanımlayıcı indeksi | (DM) RecNumber argümanı 0'a eşitti, SQL_ATTR_USE_BOOKMARK ifade niteliği SQL_UB_OFF ve DescriptorHandle argümanı bir IRD kullanıcı adı. (Bu hata, yalnızca tanımlayıcı bir özet tutucuyla ilişkilendirilmişse açıkça tahsis edilmiş tanımlayıcı için geri dönebilir.) FieldIdentifier argümanı bir kayıt alanıydı, RecNumber argümanı 0 ve DescriptorHandle argümanı bir IPD tutamıydı. RecNumber argümanı 0'dan küçüktü. |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin çalıştırılması veya tamamlanması için gereken belleği ayıramıyordu. |
| HY007 | İlgili ifade hazırlanmamıştır | DescriptorHandle , bir StatementHandle ile IRD olarak ilişkilendirilmişti ve ilgili ifade hesabı hazırlanmamış veya yürütülmemişti. |
| HY010 | İşlev dizisi hatası | (DM) DescriptorHandle , asenkron olarak çalışan bir fonksiyonun çağrıldığı (bu değil) bir StatementHandle ile ilişkilendirilmişti ve bu fonksiyon çağrıldığında hâlâ çalışıyordu. (DM) DescriptorHandle, SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos çağrılıp SQL_NEED_DATA döndürülen bir StatementHandle ile ilişkilendirildi. 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ı. (DM) DescriptorHandle ile ilişkilendirilen bağlantı kolu için asenkron olarak çalışan bir fonksiyon çağrılmıştır. Bu asenkron fonksiyon, SQLGetDescField fonksiyonu çağrıldığında hâlâ çalışıyordu. |
| 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. |
| HY021 | Tutarsız tanımlayıcı bilgisi | SQL_DESC_TYPE ve SQL_DESC_DATETIME_INTERVAL_CODE alanları geçerli bir ODBC SQL türü, geçerli sürücüye özgü SQL tipi (IPD'ler için) veya geçerli bir ODBC C tipi (APD veya ARD'ler için) oluşturmaz. |
| HY090 | Geçersiz dize veya arabellek uzunluğu | (DM) *ValuePtr bir karakter dizisiydi ve BufferLength sıfırdan küçüktü. |
| HY091 | Geçersiz tanımlayıcı alan tanımlayıcısı |
FieldIdentifier, ODBC tanımlı bir alan değildi ve uygulama tanımlı bir değer de değildi. FieldIdentifier , DescriptorHandle için tanımlanmamıştı. |
| 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 alınmış durum hakkında daha fazla bilgi için SQLEndTran Fonksiyonu'na bakınız. |
| 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 SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) DescriptorHandle ile ilişkili sürücü bu fonksiyonu desteklemez. |
Comments
Bir uygulama, tanımlayıcı kaydının tek bir alanının değerini döndürmek için SQLGetDescField çağırabilir. SQLGetDescField çağrısı, başlık alanları, kayıt alanları ve yer imi alanları dahil olmak üzere herhangi bir tanımlayıcı türdeki herhangi bir alanın ayarını döndürebilir. Bir uygulama, aynı veya farklı tanımlayıcılardaki birden fazla alanın ayarlarını, SQLGetDescField'a tekrar tekrar çağırarak rastgele sırayla elde edebilir. SQLGetDescField ayrıca sürücü tanımlı tanımlayıcı alanlarını döndürmek için çağrılabilir.
Performans nedenleriyle, bir uygulama bir ifadeyi çalıştırmadan önce bir IRD için SQLGetDescField çağırmamalıdır.
Sütun veya parametre verilerinin adı, veri türü ve depolanmasını tanımlayan birden fazla alanın ayarları da tek bir çağrıda SQLGetDescRec ile alınabilir. SQLGetStmtAttr , tanımlayıcı başlığında aynı zamanda bir ifade özniteliği olan tek bir alanın ayarını döndürmek için çağrılabilir. SQLColAttribute, SQLDescribeCol ve SQLDescribeParam kayıt veya yer imi alanlarını döndürür.
Bir uygulama, belirli bir tanımlayıcı tipi için tanımlanmamış bir alanın değerini almak üzere SQLGetDescField çağırdığında, fonksiyon SQL_SUCCESS döndürür ancak alan için geri dönen değer tanımlanmamıştır. Örneğin, bir APD veya ARD'nin SQL_DESC_NAME veya SQL_DESC_NULLABLE alanı için SQLGetDescField çağrıldığında, alan için SQL_SUCCESS ancak tanımlanmamış bir değer döner.
Bir uygulama, belirli bir tanımlayıcı türü için tanımlanmış ancak varsayılan değeri olmayan ve henüz ayarlanmamış bir alanın değerini almak için SQLGetDescField çağırdığında, fonksiyon SQL_SUCCESS döndürür ancak alan için döndürülen değer tanımlanmamıştır. Tanımlayıcı alanların başlatılması ve alanların açıklamaları hakkında daha fazla bilgi için SQLSetDescField içindeki "Descriptor Fields'ın başlangıldaması" bölümüne bakınız. Tanımlayıcılar hakkında daha fazla bilgi için bakınız: Tanımlayıcılar.
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Birden fazla tanımlayıcı alanı elde etmek | SQLGetDescRec Function |
| Tek bir tanımlayıcı alanın ayarlanması | SQLSetDescField Fonksiyonu |
| Birden fazla tanımlayıcı alanı ayarlanması | SQLSetDescRec Function |