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 1.0 Standartlar Uyumu: Open Group
Özet
SQLTables , belirli bir veri kaynağında depolanan tablo, katalog veya şema isimleri ve tablo türlerinin listesini döndürür. Sürücü bilgileri sonuç kümesi olarak döndürür.
Syntax
SQLRETURN SQLTables(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * TableType,
SQLSMALLINT NameLength4);
Arguments
StatementHandle
[Giriş] Alınan sonuçlar için ifade kullanıcı adı.
Catalogname
[Giriş] Katalog adı.
KatalogName argümanı, SQL_ODBC_VERSION ortam özteniteliği SQL_OV_ODBC3 ise arama desenlerini kabul eder; SQL_OV_ODBC2 ayarlanmışsa arama desenlerini kabul etmez. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırsa, katalogları olmayan tabloları boş bir dizi ("") gösterir.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, CatalogName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, CatalogName bir desen değeri argümanıdır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir. Daha fazla bilgi için bkz. Katalog İşlevleri'ndeki Bağımsız Değişkenler.
NameLength1
[Giriş] *CatalogName'nin karakterlerindeki uzunluk.
Şema Adı
[Giriş] Şema adları için dizi arama örünü. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırsa, boş bir dizi ("") şemasız tabloları gösterir.
SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, SchemaName tanımlayıcı olarak kabul edilir ve durumu anlamlı değildir. Eğer SQL_FALSE ise, SchemaName bir desen değeri argümanıdır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength2
[Giriş] *SchemaName'nin karakterlerindeki uzunluk.
Tablo Adı
[Giriş] Tablo adları için dizi arama deseni.
Eğer SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmışsa, TableName tanımlayıcı olarak ele alınır ve durumu anlamlı değildir. Eğer SQL_FALSE ise, TableName bir desen değeri argümanıdır; kelime kelimesi kelimesine ele alınır ve durumu önemlidir.
NameLength3
[Giriş] *TableName'in karakterlerindeki uzunluk.
Tablo Türü
[Giriş] Eşleşecek tablo türlerinin listesi.
SQL_ATTR_METADATA_ID ifadesi özniteliğinin TableType argümanı üzerinde hiçbir etkisi olmadığını unutmayın. TableType , SQL_ATTR_METADATA_ID ayarı ne olursa olsun bir değer listesi argümanıdır.
NameLength4
[Giriş] *TableType karakterlerindeki uzunluk.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ya da SQL_INVALID_HANDLE.
Diagnostics
SQLTables SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri, SQL_HANDLE_STMT HandleType ve HandleType of StatementHandle ile SQLGetDiagRec çağrılarak elde edilebilir. Aşağıdaki tablo, genellikle SQLTables tarafından 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.) |
| 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. |
| 24000 | Geçersiz imleç durumu |
StatementHandle'da bir imleç açıktı ve SQLFetch veya SQLFetchScroll çağrılmıştı. Bu hata, SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürmediyse Sürücü Yöneticisi tarafından döner, eğer SQLFetch veya SQLFetchScroll SQL_NO_DATA döndürdüyse sürücü tarafından döndürülür. StatementHandle'da bir imleç açıktı, ancak SQLFetch veya SQLFetchScroll çağrılmamıştı. |
| 40001 | Serileştirme hatası | Başka bir işlemle kaynak kilitlenmesi nedeniyle işlem geri alındı. |
| 40003 | Deyim tamamlama bilinmiyor | İlişkili bağlantı bu işlevin yürütülmesi sırasında başarısız oldu ve işlemin durumu belirlenemiyor. |
| 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 yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY008 | İşlem iptal edildi |
StatementHandle için zaman uyumsuz işleme etkinleştirildi. İşlev çağrıldı ve yürütme tamamlanmadan önce StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. Ardından işlev StatementHandle üzerinde yeniden çağrıldı. İşlev çağrıldı ve yürütme tamamlanmadan önce, çok iş parçacıklı bir uygulamadaki farklı bir iş parçacığından StatementHandle üzerinde SQLCancel veya SQLCancelHandle çağrıldı. |
| HY009 | Geçersiz null işaretçi kullanımı | SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmıştı, CatalogName argümanı null işaretçiydi ve SQL_CATALOG_NAME InfoType katalog adlarının desteklendiğini döndürdü. (DM) SQL_ATTR_METADATA_ID ifadesi özniteliği SQL_TRUE olarak ayarlanmıştı ve SchemaName veya TableName argümanı null işaretçiydi. |
| HY010 | İşlev dizisi hatası | (DM) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon SQLTables çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. (DM) StatementHandle için zaman uyumsuz olarak yürütülen bir işlev (bu işlev değil) çağrıldı ve bu işlev çağrıldığında hala yürütülüyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya 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) Uzunluk argümanlarından birinin değeri 0'dan küçüktü ancak SQL_NTS'ye eşit değildi. Ad uzunluğu bağımsız değişkenlerinden birinin değeri, karşılık gelen ad için uzunluk üst sınırını aş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ınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYC00 | İsteğe bağlı özellik uygulanmadı | Bir katalog belirtilmiş ve sürücü veya veri kaynağı katalogları desteklememektedir. Bir şema belirtildi ve sürücü veya veri kaynağı şemaları desteklemez. Katalog adı, tablo şeması veya tablo adı için bir dizi arama deseni belirtilmiş olup, veri kaynağı bu argümanlardan biri veya birkaçının arama desenlerini desteklemez. SQL_ATTR_CONCURRENCY ve SQL_ATTR_CURSOR_TYPE deyimi özniteliklerinin geçerli ayarlarının birleşimi sürücü veya veri kaynağı tarafından desteklenmiyordu. SQL_ATTR_USE_BOOKMARKS deyimi özniteliği SQL_UB_VARIABLE olarak, SQL_ATTR_CURSOR_TYPE deyimi özniteliği ise sürücünün yer işaretlerini desteklemediği bir imleç türüne ayarlandı. |
| HYT00 | Zaman aşımı süresi doldu | Veri kaynağı istenen sonuç kümesini döndürmeden önce sorgu zaman aşımı süresi doldu. Zaman aşımı süresi SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT aracılığıyla ayarlanır. |
| 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) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
| IM017 | Yoklama zaman uyumsuz bildirim modunda devre dışı bırakıldı | Bildirim modeli her kullanıldığında yoklama devre dışı bırakılır. |
| IM018 | SQLCompleteAsync , bu tanıtıcıda önceki zaman uyumsuz işlemi tamamlamak için çağrılmadı. | Tanıtıcıdaki önceki işlev çağrısı SQL_STILL_EXECUTING döndürüyorsa ve bildirim modu etkinleştirildiyse, son işlemeyi yapmak ve işlemi tamamlamak için tanıtıcıda SQLCompleteAsync çağrılmalıdır. |
Comments
SQLTables, istenen aralıktaki tüm tabloları listeler. Bir kullanıcı, bu tablolardan herhangi birine SEÇ ayrıcalığına sahip olabilir veya olmayabilir. Erişilebilirliği kontrol etmek için bir uygulama şunları yapabilir:
SQLGetInfo'yu arayın ve SQL_ACCESSIBLE_TABLES bilgi tipini kontrol edin.
Her tablonun ayrıcalıklarını kontrol etmek için SQLTablePrivileges'i çağırın.
Aksi takdirde, uygulama, kullanıcının SELECT ayrıcalıklarının verilmediği bir tabloyu seçtiği bir durumu yönetebilmelidir.
SchemaName ve TableName argümanları arama desenlerini kabul eder. KatalogName argümanı, SQL_ODBC_VERSION ortam özteniteliği SQL_OV_ODBC3 ise arama desenlerini kabul eder; SQL_OV_ODBC2 ayarlanmışsa arama desenlerini kabul etmez. Eğer SQL_OV_ODBC3 ayarlanmışsa, bir ODBC 3*.x* sürücüsü, CatalogName argümanındaki joker karakterlerin kelimesi kelimesine muamele alınması için kaçış yapmasını gerektirir. Geçerli arama desenleri hakkında daha fazla bilgi için Pattern Value Argümanları'na bakınız.
Uyarı
ODBC katalog işlevlerinin genel kullanımı, bağımsız değişkenleri ve döndürülen verileri hakkında daha fazla bilgi için bkz . Katalog İşlevleri.
Kataloglar, şemalar ve tablo türlerinin sayımı desteklemek için, SQLTables'ınCatalogName, SchemaName, TableName ve TableType argümanları için aşağıdaki özel anlamanlamlar tanımlanmıştır:
Eğer CatalogName SQL_ALL_CATALOGS ve SchemaName ile TableName boş dizilerleyse, sonuç kümesi veri kaynağı için geçerli katalogların bir listesini içerir. (TABLE_CAT sütunu hariç tüm sütunlarda NULL bulunur.)
Eğer SchemaName SQL_ALL_SCHEMAS ve CatalogName ile TableName boş dizilerleyse, sonuç kümesi veri kaynağı için geçerli şemaların bir listesini içerir. (TABLE_SCHEM sütunu hariç tüm sütunlarda NULL bulunur.)
Eğer TableType SQL_ALL_TABLE_TYPES ise ve CatalogName,SchemaName ve TableName boş dizilerleyse, sonuç kümesi veri kaynağı için geçerli tablo türlerinin bir listesini içerir. (TABLE_TYPE sütun hariç tüm sütunlarda NULL bulunur.)
TableType boş bir dizi değilse, ilgi çeken türler için virgülle ayrılmış değerler listesini içermelidir; her değer tek tırnak işareti (') içinde veya tırnak işareti olmadan eklenebilir, örneğin 'TABLE', 'VIEW' veya TABLE, VIEW. Bir uygulama her zaman tablo tipini büyük harflerle belirtmelidir; sürücü, tablo tipini veri kaynağı tarafından ihtiyaç duyulan duruma dönüştürmelidir. Veri kaynağı belirli bir tablo türünü desteklemiyorsa, SQLTables o tür için herhangi bir sonuç getirmez.
SQLTables , sonuçları standart bir sonuç seti olarak, TABLE_TYPE, TABLE_CAT, TABLE_SCHEM ve TABLE_NAME sıralarına göre döndürür. Bu bilgilerin nasıl kullanılabileceğini öğrenmek için bkz. Katalog Verilerinin Kullanımları.
TABLE_CAT, TABLE_SCHEM ve TABLE_NAME sütunlarının gerçek uzunluklarını belirlemek için bir uygulama, SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN ve SQL_MAX_TABLE_NAME_LEN bilgi tipleriyle SQLGetInfo'yu çağırabilir.
Aşağıdaki sütunlar ODBC 3*.x* için yeniden adlandırılmıştır. Sütun adı değişiklikleri, uygulamalar sütun numarasına göre bağlandığı için geriye doğru uyumluluğu etkilemez.
| ODBC 2.0 sütunu | ODBC 3*.x* sütunu |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| TABLO_SAHİBİ | TABLO_ŞEMASI |
Aşağıdaki tabloda sonuç kümesindeki sütunlar listelenir. 5. sütun (NOTLAR) dışındaki ek sütunlar sürücü tarafından tanımlanabilir. Bir uygulama, açık bir sıralı konum belirtmek yerine sonuç kümesinin sonundan geri sayarak sürücüye özgü sütunlara erişim elde etmelidir. Daha fazla bilgi için bkz. Katalog İşlevleri Tarafından Döndürülen Veriler.
| Sütun adı | Sütun numarası | Veri türü | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Katalog adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için katalogları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri aldığında, katalogları olmayan tablolar için boş bir dizi ("") döner. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Şema adı; Veri kaynağına uygulanmıyorsa NULL. Bir sürücü bazı tablolar için şemaları desteklerken diğerleri için desteklemiyorsa, örneğin sürücü farklı DBMS'lerden veri alırsa, şema olmayan tablolar için boş bir diziyi ("") döndürür. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar | Tablo adı. |
| TABLE_TYPE (ODBC 1.0) | 4 | Varchar | Tablo tipi adı; Aşağıdakilerden biri: "TABLE", "VIEW", "SİSTETEM TABLE", "KÜRESEL GEÇİM", "YEREL GEÇİCİ", "ALIAS", ""SYNONYM veya veri kaynağına özgü bir tür adı. "ALIAS" ve "SYNONYM" kelimelerinin anlamları sürücüye özgeldir. |
| KONUŞMALAR (ODBC 1.0) | 5 | Varchar | Masanın bir tanımı. |
Example
Aşağıdaki örnek kod serbest tutamaçlar ve bağlantılar sağlamaz. Serbest tutamaçlar ve ifadeler için kod örnekleri için SQLFreeHandle Fonksiyonu ve SQLFreeStmt Fonksiyonu'na bakınız.
// SQLTables.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
#include <strsafe.h>
// simple helper functions
int MySQLSuccess(SQLRETURN rc) {
return (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO);
}
struct DataBinding {
SQLSMALLINT TargetType;
SQLPOINTER TargetValuePtr;
SQLINTEGER BufferLength;
SQLLEN StrLen_or_Ind;
};
void printCatalog(const struct DataBinding* catalogResult) {
if (catalogResult[0].StrLen_or_Ind != SQL_NULL_DATA)
printf("Catalog Name = %s\n", (char *)catalogResult[0].TargetValuePtr);
}
// remember to disconnect and free memory, and free statements and handles
int main() {
int bufferSize = 1024, i, numCols = 5;
struct DataBinding* catalogResult = (struct DataBinding*) malloc( numCols * sizeof(struct DataBinding) );
wchar_t* dbName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );
wchar_t* userName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );
// declare and initialize the environment, connection, statement handles
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLWCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR*)"Driver={SQL Server}", SQL_NTS, (SQLCHAR*)connStrbuffer, 1024 + 1, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
retCode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferSize);
retCode = SQLGetInfo(hdbc, SQL_USER_NAME, userName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferSize);
bufferSize = 1024;
// allocate memory for the binding
// free this memory when done
for ( i = 0 ; i < numCols ; i++ ) {
catalogResult[i].TargetType = SQL_C_CHAR;
catalogResult[i].BufferLength = (bufferSize + 1);
catalogResult[i].TargetValuePtr = malloc( sizeof(unsigned char)*catalogResult[i].BufferLength );
}
// setup the binding (can be used even if the statement is closed by closeStatementHandle)
for ( i = 0 ; i < numCols ; i++ )
retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, catalogResult[i].TargetType, catalogResult[i].TargetValuePtr, catalogResult[i].BufferLength, &(catalogResult[i].StrLen_or_Ind));
// all catalogs query
printf( "A list of names of all catalogs\n" );
retCode = SQLTables( hstmt, (SQLCHAR*)SQL_ALL_CATALOGS, SQL_NTS, (SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS );
for ( retCode = SQLFetch(hstmt) ; MySQLSuccess(retCode) ; retCode = SQLFetch(hstmt) )
printCatalog( catalogResult );
}
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Sonuç kümesindeki bir sütuna arabellek bağlama | SQLBindCol İşlevi |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| Bir sütun veya sütunlar için ayrıcalıkların geri getirilmesi | SQLColumnPrivileges Function |
| Bir tablo veya tablodaki sütunları geri göndermek | SQLColumns Fonksiyonu |
| Tek bir satır veya veri bloğunu sadece ileri yönde almak | SQLFetch İşlevi |
| Veri bloğunu getirme veya sonuç kümesinde kaydırma | SQLFetchScroll İşlevi |
| Tablo istatistikleri ve indeksleri geri getirilmesi | SQLStatistics Fonksiyonu |
| Bir tablo veya tablolar için ayrıcalıkların geri verilmesi | SQLTablePrivileges Function |