Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Conformiteit
Versie geïntroduceerd: ODBC 1.0 Standaardnaleving: Open Group
Samenvatting
SQLTables geeft de lijst met tabel-, catalogus- of schemanamen en tabeltypen terug, opgeslagen in een specifieke databron. Het stuurprogramma retourneert de informatie als resultaatset.
Syntax
SQLRETURN SQLTables(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * TableType,
SQLSMALLINT NameLength4);
Arguments
StatementHandle
[Invoer] Statementhandle voor opgehaalde resultaten.
CatalogName
[Invoer] Catalogusnaam. Het CatalogName-argument accepteert zoekpatronen als het SQL_ODBC_VERSION environment-attribuut SQL_OV_ODBC3 is; het accepteert geen zoekpatronen als SQL_OV_ODBC2 is ingesteld. Als een driver catalogi ondersteunt voor sommige tabellen maar niet voor andere, bijvoorbeeld wanneer een driver gegevens ophaalt uit verschillende DBMS'en, geeft een lege string ("") aan welke tabellen geen catalogi hebben.
Als het SQL_ATTR_METADATA_ID-statementattribuut is ingesteld op SQL_TRUE, wordt CatalogName behandeld als een identificatie en is het geval niet significant. Als het SQL_FALSE is, is CatalogName een patroonwaarde-argument; Het wordt letterlijk behandeld en het geval is belangrijk. Zie Argumenten in Catalogusfuncties voor meer informatie.
NameLength1
[Invoer] Lengte in tekens van *CatalogName.
Schemanaam
[Invoer] Stringzoekpatroon voor schemanamen. Als een driver schema's ondersteunt voor sommige tabellen maar niet voor andere, bijvoorbeeld wanneer de driver gegevens ophaalt uit verschillende DBMS'en, geeft een lege string ("") aan welke tabellen geen schema's bevatten.
Als het SQL_ATTR_METADATA_ID-statement-attribuut is ingesteld op SQL_TRUE, wordt SchemaName behandeld als een identifier en is het geval niet significant. Als het SQL_FALSE is, is SchemaName een patroonwaarde-argument; Het wordt letterlijk behandeld en het geval is belangrijk.
NameLength2
[Invoer] Lengte in tekens van *SchemaName.
TableName
[Invoer] Stringzoekpatroon voor tabelnamen.
Als het SQL_ATTR_METADATA_ID-statement-attribuut is ingesteld op SQL_TRUE, wordt TableName behandeld als een identifier en is het geval niet significant. Als het SQL_FALSE is, is TableName een patroonwaarde-argument; Het wordt letterlijk behandeld en het geval is belangrijk.
NameLength3
[Invoer] Lengte in tekens van *TableName.
TabelType
[Invoer] Lijst van tafeltypes die overeenkomen.
Let op dat het SQL_ATTR_METADATA_ID-statement-attribuut geen effect heeft op het TableType-argument . TableType is een waardelijst-argument, ongeacht de instelling van SQL_ATTR_METADATA_ID.
NameLength4
[Invoer] Lengte in tekens van *TableType.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR of SQL_INVALID_HANDLE.
Diagnostics
Wanneer SQLTables SQL_ERROR of SQL_SUCCESS_WITH_INFO teruggeeft, kan een bijbehorende SQLSTATE-waarde worden verkregen door SQLGetDiagRec aan te roepen met een HandleType van SQL_HANDLE_STMT en een Handle van StatementHandle. De volgende tabel geeft een overzicht van de SQLSTATE-waarden die typisch door SQLTables worden geretourneerd en legt elk uit in de context van deze functie; de notatie "(DM)" gaat vooraf aan de beschrijvingen van SQLSTATES die door de Driver Manager worden teruggegeven. De retourcode die is gekoppeld aan elke SQLSTATE-waarde is SQL_ERROR, tenzij anders vermeld.
| SQLSTATE | Fout | Description |
|---|---|---|
| 01000 | Algemene waarschuwing | Stuurprogrammaspecifiek informatiebericht. (Functie retourneert SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Communicatiekoppelingsfout | De communicatiekoppeling tussen het stuurprogramma en de gegevensbron waarmee het stuurprogramma is verbonden, is mislukt voordat de verwerking van de functie is voltooid. |
| 24000 | Ongeldige cursorstatus | Er stond een cursor open op de StatementHandle, en SQLFetch of SQLFetchScroll was aangeroepen. Deze fout wordt door de Driver Manager teruggegeven als SQLFetch of SQLFetchScroll niet SQL_NO_DATA heeft teruggegeven en wordt door de driver teruggegeven als SQLFetch of SQLFetchScroll SQL_NO_DATA heeft teruggegeven. Er stond een cursor open op de StatementHandle, maar SQLFetch of SQLFetchScroll waren nog niet aangeroepen. |
| 40001 | Serialisatiefout | De transactie is teruggedraaid vanwege een resource-impasse met een andere transactie. |
| 40003 | Voltooiing van instructie onbekend | De gekoppelde verbinding is mislukt tijdens de uitvoering van deze functie en de status van de transactie kan niet worden bepaald. |
| HY000 | Algemene fout | Er is een fout opgetreden waarvoor er geen specifieke SQLSTATE is en waarvoor geen implementatiespecifieke SQLSTATE is gedefinieerd. Het foutbericht dat door SQLGetDiagRec in de *MessageText-buffer wordt geretourneerd, beschrijft de fout en de oorzaak ervan. |
| HY001 | Fout bij geheugentoewijzing | Het stuurprogramma kan geen geheugen toewijzen dat vereist is om de uitvoering of voltooiing van de functie te ondersteunen. |
| HY008 | Bewerking geannuleerd | Asynchrone verwerking is ingeschakeld voor de StatementHandle. De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle. Vervolgens werd de functie opnieuw aangeroepen op de StatementHandle. De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle vanuit een andere thread in een multithread-toepassing. |
| HY009 | Ongeldig gebruik van null-aanwijzer | Het SQL_ATTR_METADATA_ID-statement-attribuut was ingesteld op SQL_TRUE, het CatalogName-argument was een nullpointer, en de SQL_CATALOG_NAME InfoType geeft aan dat catalogusnamen worden ondersteund. (DM) Het SQL_ATTR_METADATA_ID-statementattribuut werd ingesteld op SQL_TRUE, en het SchemaName- of TableName-argument was een nullpointer. |
| HY010 | Fout in functiereeks | (DM) Er is een asynchroon uitgevoerde functie aangeroepen voor de verbindingsgreep die is gekoppeld aan de StatementHandle. Deze asynchrone functie werd nog uitgevoerd toen SQLTables werd aangeroepen. (DM) SQLExecute, SQLExecDirect of SQLMoreResults werd aangeroepen voor de StatementHandle en geretourneerd SQL_PARAM_DATA_AVAILABLE. Deze functie is aangeroepen voordat gegevens zijn opgehaald voor alle gestreamde parameters. (DM) Er is een asynchroon uitgevoerde functie (niet deze) aangeroepen voor de StatementHandle en werd nog steeds uitgevoerd toen deze functie werd aangeroepen. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations of SQLSetPos werd aangeroepen voor de StatementHandle en geretourneerd SQL_NEED_DATA. Deze functie is aangeroepen voordat gegevens werden verzonden voor alle parameters of kolommen voor uitvoering van gegevens. |
| HY013 | Fout bij geheugenbeheer | De functie-aanroep kan niet worden verwerkt omdat de onderliggende geheugenobjecten niet kunnen worden geopend, mogelijk vanwege weinig geheugen. |
| HY090 | Ongeldige tekenreeks- of bufferlengte | (DM) De waarde van een van de lengteargumenten was minder dan 0, maar niet gelijk aan SQL_NTS. De waarde van een van de argumenten voor de lengte van de naam heeft de maximumlengtewaarde voor de bijbehorende naam overschreden. |
| HY117 | De verbinding is onderbroken vanwege een onbekende transactiestatus. Alleen de verbinding verbreken en alleen-lezenfuncties zijn toegestaan. | (DM) Zie SQLEndTran Function voor meer informatie over de onderbroken status. |
| HYC00 | Optionele functie niet geïmplementeerd | Er werd een catalogus gespecificeerd, en de driver of databron ondersteunt geen catalogi. Er werd een schema gespecificeerd, en de driver of databron ondersteunt geen schema's. Er werd een stringzoekpatroon gespecificeerd voor de catalogusnaam, tabelschema of tabelnaam, en de databron ondersteunt geen zoekpatronen voor een of meer van die argumenten. De combinatie van de huidige instellingen van de SQL_ATTR_CONCURRENCY- en SQL_ATTR_CURSOR_TYPE instructiekenmerken wordt niet ondersteund door het stuurprogramma of de gegevensbron. Het kenmerk SQL_ATTR_USE_BOOKMARKS instructie is ingesteld op SQL_UB_VARIABLE en het kenmerk SQL_ATTR_CURSOR_TYPE instructie is ingesteld op een cursortype waarvoor het stuurprogramma geen bladwijzers ondersteunt. |
| HYT00 | Time-out verlopen | De time-outperiode van de query is verlopen voordat de gegevensbron de aangevraagde resultatenset heeft geretourneerd. De time-outperiode wordt ingesteld via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Time-out voor de verbinding is overschreden | De time-outperiode voor de verbinding is verlopen voordat de gegevensbron op de aanvraag heeft gereageerd. De time-outperiode voor de verbinding wordt ingesteld via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Stuurprogramma biedt geen ondersteuning voor deze functie | (DM) Het stuurprogramma dat is gekoppeld aan de StatementHandle biedt geen ondersteuning voor de functie. |
| IM017 | Polling is uitgeschakeld in de asynchrone meldingsmodus | Wanneer het meldingsmodel wordt gebruikt, wordt polling uitgeschakeld. |
| IM018 | SQLCompleteAsync is niet aangeroepen om de vorige asynchrone bewerking op deze ingang te voltooien. | Als de vorige functieaanroep op de ingang SQL_STILL_EXECUTING retourneert en als de meldingsmodus is ingeschakeld, moet SQLCompleteAsync worden aangeroepen op de ingang om naverwerking te kunnen uitvoeren en de bewerking te voltooien. |
Comments
SQLTables geeft alle tabellen in het gevraagde bereik weer op. Een gebruiker kan wel of niet SELECT-rechten hebben voor een van deze tabellen. Om de toegankelijkheid te controleren, kan een applicatie:
Bel SQLGetInfo en controleer het SQL_ACCESSIBLE_TABLES informatietype.
Roep SQLTablePrivileges aan om de rechten voor elke tabel te controleren.
Anders moet de applicatie in staat zijn om een situatie aan te gaan waarin de gebruiker een tabel selecteert waarvoor SELECT-rechten niet worden toegekend.
De argumenten SchemaName en TableName accepteren zoekpatronen. Het CatalogName-argument accepteert zoekpatronen als het SQL_ODBC_VERSION environment-attribuut SQL_OV_ODBC3 is; het accepteert geen zoekpatronen als SQL_OV_ODBC2 is ingesteld. Als SQL_OV_ODBC3 is ingesteld, vereist een ODBC 3*.x*-driver dat wildcard-tekens in het CatalogName-argument worden geëscaped om letterlijk te worden behandeld. Voor meer informatie over geldige zoekpatronen, zie Patroonwaardeargumenten.
Note
Zie Catalogusfuncties voor meer informatie over het algemene gebruik, argumenten en geretourneerde gegevens van ODBC-catalogusfuncties.
Om de opsomming van catalogi, schema's en tabeltypen te ondersteunen, zijn de volgende speciale semantiek gedefinieerd voor de CatalogName-, SchemaName-, TableName- en TableType-argumenten van SQLTables:
Als CatalogName SQL_ALL_CATALOGS is en SchemaName en TableName lege strings zijn, bevat de resultaatset een lijst van geldige catalogi voor de databron. (Alle kolommen behalve de kolom TABLE_CAT bevatten NULLs.)
Als SchemaName SQL_ALL_SCHEMAS is en CatalogName en TableName lege strings zijn, bevat de resultaatset een lijst van geldige schema's voor de databron. (Alle kolommen behalve de TABLE_SCHEM kolom bevatten NULLs.)
Als TableType SQL_ALL_TABLE_TYPES is en CatalogName, SchemaName en TableName lege strings zijn, bevat de resultaatset een lijst van geldige tabeltypes voor de databron. (Alle kolommen behalve de kolom TABLE_TYPE bevatten NULLs.)
Als TableType geen lege string is, moet het een lijst van komma-gescheiden waarden bevatten voor de typen van interesse; Elke waarde kan worden omsloten in enkele aanhalingstekens (') of zonder aanhalingstekens, bijvoorbeeld 'TABLE', 'VIEW' of TABLE, VIEW. Een applicatie moet altijd het tabeltype in hoofdletters specificeren; De driver moet het tabeltype omzetten naar het geval dat de databron nodig heeft. Als de gegevensbron een gespecificeerd tabeltype niet ondersteunt, levert SQLTables geen resultaten voor dat type op.
SQLTables geeft de resultaten terug als een standaard resultaatset, geordend op TABLE_TYPE, TABLE_CAT, TABLE_SCHEM en TABLE_NAME. Zie Gebruik van catalogusgegevens voor informatie over hoe deze informatie kan worden gebruikt.
Om de werkelijke lengtes van de kolommen TABLE_CAT, TABLE_SCHEM en TABLE_NAME te bepalen, kan een applicatie SQLGetInfo aanroepen met de SQL_MAX_CATALOG_NAME_LEN-, SQL_MAX_SCHEMA_NAME_LEN- en SQL_MAX_TABLE_NAME_LEN informatietypen.
De volgende kolommen zijn hernoemd naar ODBC 3*.x*. De wijzigingen in kolomnamen beïnvloeden de achterwaartse compatibiliteit niet, omdat applicaties binden op kolomnummer.
| ODBC 2.0-kolom | ODBC 3*.x* kolom |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| Tabel_Eigenaar | TABLE_SCHEM |
De volgende tabel bevat de kolommen in de resultatenset. Extra kolommen voorbij kolom 5 (OPMERKINGEN) kunnen door de bestuurder worden gedefinieerd. Een toepassing moet toegang krijgen tot stuurprogrammaspecifieke kolommen door af te tellen vanaf het einde van de resultatenset in plaats van een expliciete rangschikkingspositie op te geven. Zie Gegevens geretourneerd door Catalogusfuncties voor meer informatie.
| Kolomnaam | Kolomnummer | Gegevenstype | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Catalogusnaam; NULL als het niet van toepassing is op de databron. Als een driver catalogi ondersteunt voor sommige tabellen maar niet voor andere, bijvoorbeeld wanneer de driver gegevens ophaalt uit verschillende DBMS'en, geeft hij een lege string ("") terug voor die tabellen die geen catalogi hebben. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Naam van het schema; NULL als het niet van toepassing is op de databron. Als een driver schema's ondersteunt voor sommige tabellen maar niet voor andere, bijvoorbeeld wanneer de driver gegevens ophaalt uit verschillende DBMS'en, geeft hij een lege string ("") terug voor die tabellen die geen schema's bevatten. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar | Tabelnaam. |
| TABLE_TYPE (ODBC 1.0) | 4 | Varchar | Tabeltypenaam; een van de volgende: "TABLE", "VIEW", "SYSTEEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM", of een databron-specifieke typenaam. De betekenissen van "ALIAS" en "SYNONYM" zijn specifiek voor de bestuurder. |
| OPMERKINGEN (ODBC 1.0) | 5 | Varchar | Een beschrijving van de tafel. |
Example
De volgende voorbeeldcode maakt handles en verbindingen niet vrij. Zie SQLFreeHandle Function en SQLFreeStmt Function voor codevoorbeelden om handles en statements vrij te maken.
// 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 );
}
Gerelateerde functies
| Voor informatie over | Zien! |
|---|---|
| Een buffer koppelen aan een kolom in een resultatenset | SQLBindCol, functie |
| Verwerking van instructie annuleren | SQLCancel, functie |
| Teruggeven van privileges voor een kolom of kolommen | SQLColumnPrivileges-functie |
| Het teruggeven van de kolommen in een tabel of tabellen | SQLColumns-functie |
| Het ophalen van een enkele rij of een datablok in een vooruit-only richting | SQLFetch, functie |
| Een gegevensblok ophalen of door een resultatenset schuiven | SQLFetchScroll, functie |
| Teruggeven van tabelstatistieken en indexen | SQLStatistics-functie |
| Privileges teruggeven voor een tabel of tabellen | SQLTablePrivileges-functie |