SQLTables-functie

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 );  
}  
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

Zie ook

ODBC-API-verwijzing
ODBC-headerbestanden