スキーマ検出
次のセクションでは、ODBC API のスキーマ情報を取得する方法を示します。 利用可能なシステムテーブルをクエリしてドライバーメタデータを取得するには、データモデル を参照してください。
テーブルとビューのリスト
SQLTables 関数を使用して、存在するすべてのテーブルまたはビューをリストできます。TableType パラメータでは'TABLE' または'VIEW'、または両方を使用でき、これによりテーブルとビューをそれぞれリストするかどうかを決定します。SQLTables の呼び出し後、SQLFetch とSQLBindCol を使用してテーブルリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLTables(hstmt, 0, 0, 0, 0, 0, 0, (SQLCHAR*)"'TABLE','VIEW'", SQL_NTS);
テーブルカラムのリスト
SQLColumns 関数を使用して、指定したテーブルのすべてのカラムをリストできます。SQLColumns の呼び出し後、SQLFetch とSQLBindCol を使用してカラムリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLColumns(hstmt, 0, 0, 0, 0, (SQLCHAR*)"DemoTable", SQL_NTS, 0, 0);
カラム情報の取得
SQLColAttribute 関数を使用して、カラムに関する情報を取得できます。ColumnNumber パラメータは、1から始まるカラムインデックスです。FieldIdentifier パラメータでは、SQL_COLUMN_NAME、SQL_COLUMN_LENGTH、SQL_DESC_TYPE などを使用できます。
SQLCHAR columnName[30]; SQLSMALLINT cbColumnName; SQLColAttribute(hstmt, 1, SQL_COLUMN_NAME, columnName, 30, &cbColumnName, NULL);
また、SQLDescribeCol 関数を使用して、カラムの名前、型、サイズ、10進数字、null 許可型を取得できます。ColumnNumber パラメータは、1から始まるカラムインデックスです。
SQLCHAR columnName[256]; SQLSMALLINT cbColumnName; SQLSMALLINT dataType; SQLULEN columnSize; SQLSMALLINT decimalDigits; SQLSMALLINT nullable; SQLDescribeCol(hstmt, 1, columnName, 256, &cbColumnName, &dataType, &columnSize, &decimalDigits, &nullable);
主キーカラムのリスト
SQLPrimaryKeys 関数を使用して、テーブルの主キーカラムのカラム名とシーケンス番号を取得できます。SQLPrimaryKeys の呼び出し後、SQLFetch とSQLBindCol を使用してテーブルリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLPrimaryKeys(hstmt, NULL, SQL_NTS, NULL, SQL_NTS, (SQLCHAR*)"DemoTable", SQL_NTS);
プロシージャのリスト
SQLProcedures 関数を使用して、存在するすべてのプロシージャをリストできます。SQLProcedures の呼び出し後、SQLFetch とSQLBindCol を使用してテーブルリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLProcedures(hstmt, NULL, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS);
プロシージャカラムのリスト
SQLProcedureColumns 関数を使用して、指定したプロシージャのすべてのカラムをリストできます。SQLProcedureColumns の呼び出し後、SQLFetch とSQLBindCol を使用してテーブルリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLProcedureColumns(hstmt, NULL, SQL_NTS, NULL, SQL_NTS, (SQLCHAR*)"DemoProcedure", SQL_NTS, NULL, SQL_NTS);
サポートされるODBC 関数のリスト
SQLGetFunctions 関数を使用して、ODBC ドライバーで特定のODBC 関数がサポートされているかどうかを特定できます。FunctionId(2番目のパラメータ)には、SQL_API_ALL_FUNCTIONS またはSQL_API_ODBC3_ALL_FUNCTIONS を指定できます。SupportedPtr(3番目のパラメータ)は、100個の要素のSQLUSMALLINT 配列にする必要があります。ODBC 関数がドライバーでサポートされる場合、呼び出しによってSQLUSMALLINT 要素はtrue に設定されます。そうでない場合はfalse に設定されます。
SQLUSMALLINT functions[100]; SQLGetFunctions(hdbc, SQL_API_ALL_FUNCTIONS, functions);
型情報の取得
SQLGetTypeInfo 関数を使用して、指定したデータ型またはすべての型の情報を返すことができます。SQLGetTypeInfo の呼び出し後、SQLFetch とSQLBindCol を使用して情報を読み取ります。コード例はデータのクエリ を参照してください。
SQLGetTypeInfo(hstmt, SQL_ALL_TYPES);
パラメータ数の取得
SQLNumParams 関数を使用して、クエリのパラメータ数を取得できます。
SQLSMALLINT paramCount; SQLNumParams(hstmt, ¶mCount);
カラム数の取得
SQLNumResultCols 関数を使用して、テーブルのカラム数を取得できます。
SQLSMALLINT columnCount; SQLNumResultCols(hstmt, &columnCount);
行数の取得
SQLRowCount 関数を使用して、テーブルの行数を取得できます。
SQLLEN rowCount; SQLRowCount(hstmt, &rowCount);
カラムの特別な情報のリスト
SQLSpecialColumns 関数を使用して、テーブルのすべてのカラムと特別な情報をリストできます。IdentifierType(2番目のパラメータ)には、SQL_BEST_ROWID またはSQL_ROWVER を指定できます。Scope(9番目のパラメータ)には、SQL_SCOPE_CURROW、SQL_SCOPE_TRANSACTION、またはSQL_SCOPE_SESSION を指定できます。SQLSpecialColumns の呼び出し後、SQLFetch とSQLBindCol を使用してカラムリストを読み取ります。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLSpecialColumns(hstmt, SQL_BEST_ROWID, NULL, 0, NULL,0, (SQLCHAR *)"DemoProcedure", SQL_NTS, SQL_SCOPE_SESSION, SQL_NULLABLE);
テーブルの統計情報のリスト
SQLStatistics 関数を使用して、テーブルに関連付けられた統計とインデックスをリストできます。IndexType(8番目のパラメータ)には、SQL_INDEX_UNIQUE またはSQL_INDEX_ALL を指定できます。SQLStatistics の呼び出し後、SQLFetch とSQLBindCol を使用してテーブルリストを読み取ることができます。これはSQL クエリからのカラムの読み取りと似ており、データのクエリ で説明します。
SQLStatistics(hstmt, NULL, 0, NULL, 0, (SQLCHAR*)"DemoProcedure", SQL_NTS, SQL_INDEX_UNIQUE, SQL_QUICK);