Funzione SQLTables

Conformità
Versione introdotta: Conformità agli Standard ODBC 1.0: Open Group

Sommario
SQLTables restituisce l'elenco dei nomi di tabelle, cataloghi o schemi, e tipi di tabelle, memorizzati in una specifica fonte dati. Il driver restituisce le informazioni come set di risultati.

Syntax

  
SQLRETURN SQLTables(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      CatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      SchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      TableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      TableType,  
     SQLSMALLINT    NameLength4);  

Arguments

StatementHandle
[Input] Handle dell'istruzione per i risultati recuperati.

CatalogName
[Input] Nome catalogo. L'argomento CatalogName accetta schemi di ricerca se l'attributo SQL_ODBC_VERSION ambiente è SQL_OV_ODBC3; Non accetta schemi di ricerca se SQL_OV_ODBC2 è impostato. Se un driver supporta cataloghi per alcune tabelle ma non per altre, ad esempio quando un driver recupera dati da diversi DBMS, una stringa vuota ("") indica quelle tabelle che non hanno cataloghi.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, CatalogName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, CatalogName è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo. Per altre informazioni, vedere Argomenti nelle Funzioni catalogo.

NameLength1
[Input] Lunghezza nei caratteri di *NomeCatalogo.

SchemaName
[Input] Pattern di ricerca stringa per i nomi degli schemi. Se un driver supporta gli schemi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, una stringa vuota ("") indica quelle tabelle che non hanno schema.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, SchemaName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, Nome dello schema è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo.

NameLength2
[Input] Lunghezza nei caratteri di *NomeSchema.

TableName
[Input] Pattern di ricerca stringa per i nomi delle tabelle.

Se l'attributo della SQL_ATTR_METADATA_ID istruzione è impostato su SQL_TRUE, TableName viene trattato come un identificatore e il suo caso non è significativo. Se è SQL_FALSE, TableName è un argomento di valore di pattern; Viene trattato letteralmente, e il suo caso è significativo.

NameLength3
[Input] Lunghezza nei caratteri di *NomeTabella.

Tipo di tabella
[Input] Elenco dei tipi di tabelle da abbinare.

Nota che l'attributo SQL_ATTR_METADATA_ID affermazione non ha alcun effetto sull'argomento TableType . TableType è un argomento di lista di valori, indipendentemente dall'impostazione di SQL_ATTR_METADATA_ID.

NameLength4
[Input] Lunghezza nei caratteri di *TypeTable.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostics

Quando SQLTables restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, un valore SQLSTATE associato può essere ottenuto chiamando SQLGetDiagRec con un HandleType di SQL_HANDLE_STMT e un Handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE tipicamente restituiti da SQLTables e spiega ciascuno nel contesto di questa funzione; la notazione "(DM)" precede le descrizioni degli stati SQL restituite dal Driver Manager. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Error Description
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
08S01 Errore del collegamento di comunicazione Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione.
24000 Stato del cursore non valido Un cursore era aperto sull'InstructionHandle, e erano stati chiamati SQLFetch o SQLFetchScroll . Questo errore viene restituito dal Driver Manager se SQLFetch o SQLFetchScroll non ha restituito SQL_NO_DATA e viene restituito dal driver se SQLFetch o SQLFetchScroll hanno restituito SQL_NO_DATA.

Un cursore era aperto sull'InstructionHandle, ma SQLFetch o SQLFetchScroll non erano stati chiamati.
40001 Errore di serializzazione È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione.
40003 Completamento istruzione sconosciuto La connessione associata non è riuscita durante l'esecuzione di questa funzione e non è possibile determinare lo stato della transazione.
HY000 Errore generale Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa.
HY001 Errore di allocazione della memoria Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY008 Operazione annullata L'elaborazione asincrona è stata abilitata per StatementHandle. La funzione è stata chiamata e prima di completare l'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata in StatementHandle. La funzione è stata quindi chiamata di nuovo in StatementHandle.

La funzione è stata chiamata e prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stato chiamato su StatementHandle da un thread diverso in un'applicazione multithread.
HY009 Uso non valido del puntatore Null L'attributo SQL_ATTR_METADATA_ID istruzione era impostato su SQL_TRUE, l'argomento CatalogName era un puntatore nullo e l'InfoType SQL_CATALOG_NAME restituisce che i nomi dei cataloghi sono supportati.

(DM) L'attributo SQL_ATTR_METADATA_ID istruzione era impostato su SQL_TRUE, e l'argomento SchemaName o TableName era un puntatore nullo.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando veniva chiamato SQLTables.

(DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per StatementHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.

(DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
HY013 Errore di gestione della memoria Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente.
HY090 Lunghezza della stringa o del buffer non valida (DM) Il valore di uno degli argomenti di lunghezza era inferiore a 0 ma non uguale a SQL_NTS.

Il valore di uno degli argomenti lunghezza nome ha superato il valore di lunghezza massima per il nome corrispondente.
HY117 La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.
HYC00 Funzionalità facoltativa non implementata È stato specificato un catalogo, e il driver o la sorgente dati non supportano i cataloghi.

È stato specificato uno schema, e il driver o la sorgente dati non supportano gli schemi.

È stato specificato un pattern di ricerca a stringhe per il nome del catalogo, lo schema della tabella o il nome della tabella, e la sorgente dati non supporta schemi di ricerca per uno o più di questi argomenti.

La combinazione delle impostazioni correnti degli attributi delle istruzioni SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE non è supportata dal driver o dall'origine dati.

L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS è stato impostato su SQL_UB_VARIABLE e l'attributo dell'istruzione SQL_ATTR_CURSOR_TYPE è stato impostato su un tipo di cursore per cui il driver non supporta i segnalibri.
HYT00 Timeout scaduto Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati richiesto. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Il timeout della connessione è scaduto Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Il driver non supporta questa funzione (DM) Il driver associato a StatementHandle non supporta la funzione.
IM017 Il polling è disabilitato in modalità di notifica asincrona Ogni volta che viene usato il modello di notifica, il polling è disabilitato.
IM018 SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, è necessario chiamare SQLCompleteAsync sull'handle per eseguire la post-elaborazione e completare l'operazione.

Comments

SQLTables elenca tutte le tabelle nell'intervallo richiesto. Un utente può avere o meno i privilegi SELECT su una di queste tabelle. Per verificare l'accessibilità, un'applicazione può:

  • Chiama SQLGetInfo e controlla il tipo di SQL_ACCESSIBLE_TABLES informazioni.

  • Chiama SQLTablePrivileges per verificare i privilegi di ogni tabella.

Altrimenti, l'applicazione deve essere in grado di gestire una situazione in cui l'utente seleziona una tabella per la quale non sono concessi i privilegi SELECT .

Gli argomenti SchemaName e TableName accettano i pattern di ricerca. L'argomento CatalogName accetta schemi di ricerca se l'attributo SQL_ODBC_VERSION ambiente è SQL_OV_ODBC3; Non accetta schemi di ricerca se SQL_OV_ODBC2 è impostato. Se SQL_OV_ODBC3 è impostato, un driver ODBC 3*.x* richiederà che i caratteri jolly nell'argomento CatalogName vengano sfuggiti per essere trattati letteralmente. Per maggiori informazioni sui modelli di ricerca validi, vedi Pattern Value Arguments.

Annotazioni

Per altre informazioni sull'utilizzo generale, gli argomenti e i dati restituiti delle funzioni del catalogo ODBC, vedere Funzioni del catalogo.

Per supportare l'enumerazione di cataloghi, schemi e tipi di tabelle, sono definite le seguenti semantiche speciali per gli argomenti CatalogName, SchemaName, TableName e TableType di SQLTables:

  • Se CatalogName è SQL_ALL_CATALOGS e SchemaName e TableName sono stringhe vuote, il set di risultati contiene una lista di cataloghi validi per la sorgente dati. (Tutte le colonne tranne quella TABLE_CAT contengono NULL.)

  • Se SchemaName è SQL_ALL_SCHEMAS e CatalogName e TableName sono stringhe vuote, il set di risultati contiene una lista di schemi validi per la sorgente dati. (Tutte le colonne tranne quella TABLE_SCHEM contengono NULL.)

  • Se TableType è SQL_ALL_TABLE_TYPES e CatalogName, SchemaName e TableName sono stringhe vuote, il set di risultati contiene una lista di tipi di tabella validi per la sorgente dati. (Tutte le colonne tranne la colonna TABLE_TYPE contengono NULL.)

Se TableType non è una stringa vuota, deve contenere un elenco di valori separati da virgola per i tipi di interesse; ogni valore può essere racchiuso tra virgolette singole (') o non virgolette, ad esempio 'TABLE', 'VIEW' o TABLE, VIEW. Un'applicazione dovrebbe sempre specificare il tipo di tabella in maiuscolo; Il driver dovrebbe convertire il tipo di tabella in qualsiasi caso necessario alla sorgente dati. Se la sorgente dati non supporta un tipo di tabella specificato, SQLTables non restituisce alcun risultato per quel tipo.

SQLTables restituisce i risultati come un insieme standard, ordinato da TABLE_TYPE, TABLE_CAT, TABLE_SCHEM e TABLE_NAME. Per informazioni su come usare queste informazioni, vedere Uses of Catalog Data.For information about how this information might be used, see Uses of Catalog Data.

Per determinare la lunghezza effettiva delle colonne TABLE_CAT, TABLE_SCHEM e TABLE_NAME, un'applicazione può chiamare SQLGetInfo con i tipi di informazioni SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN e SQL_MAX_TABLE_NAME_LEN.

Le colonne seguenti sono state rinominate in ODBC 3*.x*. I cambiamenti nel nome delle colonne non influiscono sulla retrocompatibilità perché le applicazioni si assegnano per numero di colonna.

Colonna ODBC 2.0 Colonna ODBC 3*.x*
TABLE_QUALIFIER TABLE_CAT
PROPRIETARIO_TABELLA TABLE_SCHEM

Nella tabella seguente sono elencate le colonne nel set di risultati. Colonne aggiuntive oltre la colonna 5 (OSSERVAZIONI) possono essere definite dal driver. Un'applicazione deve ottenere l'accesso alle colonne specifiche del driver con il conteggio dalla fine del set di risultati invece di specificare una posizione ordinale esplicita. Per altre informazioni, vedere Dati restituiti dalle funzioni del catalogo.

Nome della colonna Numero di colonna Tipo di dati Comments
TABLE_CAT (ODBC 1.0) 1 Varchar Nome del catalogo; NULL se non applicabile alla fonte dati. Se un driver supporta cataloghi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, restituisce una stringa vuota ("") per quelle tabelle che non hanno cataloghi.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Nome dello schema; NULL se non applicabile alla fonte dati. Se un driver supporta gli schemi per alcune tabelle ma non per altre, ad esempio quando il driver recupera dati da diversi DBMS, restituisce una stringa vuota ("") per quelle tabelle che non hanno schemi.
TABLE_NAME (ODBC 1.0) 3 Varchar Nome della tabella.
TABLE_TYPE (ODBC 1.0) 4 Varchar Nome del tipo di tabella; uno dei seguenti: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", ""SYNONYM o un nome di tipo specifico per la fonte di dati.

I significati di "ALIAS" e "SYNONYM" sono specifici per il driver.
OSSERVAZIONI (ODBC 1.0) 5 Varchar Una descrizione del tavolo.

Example

Il seguente codice di esempio non libera handle e connessioni. Vedi SQLFreeHandle Function e SQLFreeStmt Function per esempi di codice verso handle liberi e istruzioni.

// 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 );  
}  
Per informazioni su Vedi
Associazione di un buffer a una colonna in un set di risultati Funzione SQLBindCol
Annullamento dell'elaborazione delle istruzioni Funzione SQLCancel
Restituzione dei privilegi per una colonna o colonne Funzione SQLColumnPrivileges
Restituire le colonne in una o più tabelle Funzione SQLColumns
Recupero di una singola riga o di un blocco di dati in direzione solo in avanti Funzione SQLFetch
Recupero di un blocco di dati o scorrimento di un set di risultati Funzione SQLFetchScroll
Restituzione delle statistiche e indici delle tabelle Funzione SQLStatistics
Restituzione dei privilegi per una tabella o più tabelle Funzione SQLTablePrivileges

Vedere anche

Riferimento API ODBC
File di intestazione ODBC