SQLGetDiagField 関数

準拠
導入されたバージョン: ODBC 3.0 Standards Compliance: ISO 92

まとめ
SQLGetDiagField は、エラー、警告、および状態情報を含む診断データ構造 (指定されたハンドルに関連付けられている) のレコードのフィールドの現在の値を返します。

構文


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

引数

HandleType
[入力]診断が必要なハンドルの種類を表すハンドル型識別子。 次のいずれかである必要があります。

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN ハンドルは、ドライバー マネージャーとドライバーによってのみ使用されます。 アプリケーションでは、このハンドルの種類を使用しないでください。 SQL_HANDLE_DBC_INFO_TOKENの詳細については、「 ODBC ドライバーでのConnection-Pool認識の開発」を参照してください。

Handle
[入力] HandleType で示される型の診断データ構造のハンドル。 HandleType がSQL_HANDLE_ENVの場合、Handle は共有環境ハンドルまたは非共有環境ハンドルのいずれかになります。

RecNumber
[入力]アプリケーションが情報をシークする状態レコードを示します。 状態レコードには 1 から番号が付されます。 DiagIdentifier 引数が診断ヘッダーのフィールドを示す場合、RecNumber は無視されます。 そうでない場合は、0 を超える必要があります。

DiagIdentifier
[入力]値が返される診断のフィールドを示します。 詳細については、「コメント」の「DiagIdentifier Argument」セクションを参照してください。

DiagInfoPtr
[出力]診断情報を返すバッファーへのポインター。 データ型は 、DiagIdentifier の値によって異なります。 DiagInfoPtr が整数型の場合、アプリケーションでは SQLULEN のバッファーを使用し、この関数を呼び出す前に値を 0 に初期化する必要があります。一部のドライバーは、バッファーの下位 32 ビットまたは 16 ビットのみを書き込み、上位ビットを変更せずに残す可能性があるためです。

DiagInfoPtr が NULL の場合でも、StringLengthPtr は、DiagInfoPtr が指すバッファーで返すことができる合計バイト数 (文字データの null 終端文字を除く) を返します。

BufferLength
[入力] DiagIdentifier が ODBC 定義の診断であり、 DiagInfoPtr が 文字列またはバイナリ バッファーを指している場合、この引数は *DiagInfoPtr の長さである必要があります。 DiagIdentifier が ODBC 定義フィールドで、*DiagInfoPtr が整数の場合、BufferLength は無視されます。 *DiagInfoPtr の値が Unicode 文字列の場合 (SQLGetDiagFieldW を呼び出すとき)、BufferLength 引数は偶数である必要があります。

DiagIdentifier がドライバー定義フィールドの場合、アプリケーションは BufferLength 引数を設定することによって、ドライバー マネージャーにフィールドの性質を示します。 BufferLength には、次の値を指定できます。

  • DiagInfoPtr が文字列へのポインターである場合、BufferLength は文字列またはSQL_NTSの長さです。

  • DiagInfoPtr がバイナリ バッファーへのポインターである場合、アプリケーションは SQL_LEN_BINARY_ATTR(length) マクロの結果を BufferLength に配置します。 これにより、 BufferLength に負の値が設定されます。

  • DiagInfoPtr が文字列またはバイナリ文字列以外の値へのポインターである場合、BufferLength には値SQL_IS_POINTERが必要です。

  • *DiagInfoPtr に固定長データ型が含まれている場合、BufferLength は必要に応じてSQL_IS_INTEGER、SQL_IS_UINTEGER、SQL_IS_SMALLINT、またはSQL_IS_USMALLINTです。

StringLengthPtr
[出力]*DiagInfoPtr で返される文字データの合計バイト数 (null 終端文字に必要なバイト数を除く) を返すバッファーへのポインター。 返すことができるバイト数が BufferLength 以上の場合、*DiagInfoPtr 内のテキストは BufferLength から null 終端文字の長さを引いた値に切り捨てられます。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE、またはSQL_NO_DATA。

診断

SQLGetDiagField は、それ自体の診断レコードをポストしません。 次の戻り値を使用して、独自の実行の結果を報告します。

  • SQL_SUCCESS: 関数が診断情報を正常に返しました。

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr が小さすぎて、要求された診断フィールドを保持できなかった。 そのため、診断フィールドのデータは切り捨てられました。 切り捨てが発生したことを確認するには、アプリケーションで BufferLength を使用可能な実際のバイト数と比較する必要があります。これは *StringLengthPtr に書き込まれます。

  • SQL_INVALID_HANDLE: HandleType と Handle で示される ハンドル が有効なハンドルではありません。

  • SQL_ERROR: 次のいずれかが発生しました。

    • DiagIdentifier 引数が有効な値の 1 つではありません。

    • DiagIdentifier 引数は 、SQL_DIAG_CURSOR_ROW_COUNT、SQL_DIAG_DYNAMIC_FUNCTION、SQL_DIAG_DYNAMIC_FUNCTION_CODE、またはSQL_DIAG_ROW_COUNTでしたが、 Handle はステートメント ハンドルではありません。 (ドライバー マネージャーは、この診断を返します。)

    • DiagIdentifier が診断レコードのフィールドを示した場合、引数 RecNumber は負または 0 でした。 ヘッダー フィールドの場合、RecNumber は無視されます。

    • 要求された値は文字列で、 BufferLength は 0 未満でした。

    • 非同期通知を使用する場合、ハンドルに対する非同期操作は完了していません。

  • SQL_NO_DATA: RecNumber、Handle で指定されたハンドルに存在する診断レコードの数を超えました。また、Handle の診断レコードがない場合は、正の RecNumber のSQL_NO_DATAも返 します

説明

通常、アプリケーションは SQLGetDiagField を呼び出して、次の 3 つの目標のいずれかを達成します。

  1. 関数呼び出しがSQL_ERRORまたはSQL_SUCCESS_WITH_INFO (または SQLBrowseConnect 関数のSQL_NEED_DATA) を返したときに特定のエラーまたは警告情報を取得するには。

  2. SQLExecute、SQLExecDirectSQLBulkOperations、または SQLSetPos (SQL_DIAG_ROW_COUNT ヘッダー フィールドから) を呼び出して挿入、削除、または更新操作が実行されたときに影響を受けたデータ ソース内の行の数を確認したり、ドライバーが (SQL_DIAG_CURSOR_ROW_COUNT ヘッダー フィールドから) この情報を提供できる場合は、現在開いているカーソルに存在する行数を決定したりします。

  3. SQLExecDirect または SQLExecute の呼び出しによって実行された関数を確認するには (SQL_DIAG_DYNAMIC_FUNCTION および SQL_DIAG_DYNAMIC_FUNCTION_CODE ヘッダー フィールドから)。

ODBC 関数は、呼び出されるたびに 0 個以上の診断レコードをポストできるため、アプリケーションは ODBC 関数呼び出しの後に SQLGetDiagField を呼び出すことができます。 一度に格納できる診断レコードの数に制限はありません。 SQLGetDiagField は、 Handle 引数で指定された診断データ構造に最後に関連付けられた診断情報のみを取得します。 アプリケーションが SQLGetDiagField または SQLGetDiagRec 以外の ODBC 関数を呼び出すと、同じハンドルを持つ以前の呼び出しからの診断情報は失われます。

アプリケーションは、SQLGetDiagField がSQL_SUCCESSを返す限り、RecNumber をインクリメントすることですべての診断レコードをスキャンできます。 ステータス レコードの数は、SQL_DIAG_NUMBER ヘッダー フィールドに示されます。 SQLGetDiagField の呼び出しは、ヘッダー フィールドとレコード フィールドに対して非破壊的です。 診断関数以外の関数が同じハンドルにレコードをポストする中間で呼び出されていない限り、アプリケーションは後で SQLGetDiagField を再度呼び出してレコードからフィールドを取得できます。

アプリケーションは SQLGetDiagField を呼び出して、SQL_DIAG_CURSOR_ROW_COUNTまたはSQL_DIAG_ROW_COUNTを除き、いつでも任意の診断フィールドを返すことができます。 Handle がステートメント ハンドルでない場合は、SQL_ERRORが返されます。 他の診断フィールドが未定義の場合、 SQLGetDiagField の呼び出しはSQL_SUCCESSを返し (他の診断が検出されない場合)、フィールドに対して未定義の値が返されます。

詳細については、「 SQLGetDiagRec と SQLGetDiagField の使用 」および 「SQLGetDiagRec と SQLGetDiagField の実装」を参照してください。

非同期的に実行されている API 以外の API を呼び出すと、HY010 "関数シーケンス エラー" が生成されます。 ただし、非同期操作が完了する前にエラー レコードを取得することはできません。

HandleType 引数

各ハンドルの種類には、診断情報を関連付けることができます。 HandleType 引数は、ハンドルのハンドルの種類を示します

一部のヘッダーフィールドとレコードフィールドは、環境、接続、ステートメント、および記述子ハンドルに対して返すことができません。 フィールドが適用されないハンドルは、次の「ヘッダー フィールド」および「レコード フィールド」セクションで示されます。

HandleType がSQL_HANDLE_ENVの場合、Handle は共有環境ハンドルまたは非共有環境ハンドルのいずれかになります。

ドライバー固有のヘッダー診断フィールドを環境ハンドルに関連付ける必要はありません。

記述子ハンドルに対して定義されている診断ヘッダー フィールドは、SQL_DIAG_NUMBERとSQL_DIAG_RETURNCODEのみです。

DiagIdentifier 引数

この引数は、診断データ構造に必要なフィールドの識別子を示します。 RecNumber が 1 以上の場合、フィールドのデータは関数によって返される診断情報を記述します。 RecNumber が 0 の場合、フィールドは診断データ構造のヘッダー内にあるため、特定の情報ではなく、診断情報を返した関数呼び出しに関連するデータが含まれます。

ドライバーは、ドライバー固有のヘッダーフィールドとレコード フィールドを診断データ構造で定義できます。

ODBC 2*.x* ドライバーを使用する ODBC 3*.x* アプリケーションは、SQL_DIAG_CLASS_ORIGIN、SQL_DIAG_CLASS_SUBCLASS_ORIGIN、SQL_DIAG_CONNECTION_NAME、SQL_DIAG_MESSAGE_TEXT、SQL_DIAG_NATIVE、SQL_DIAG_NUMBER、SQL_DIAG_RETURNCODE、SQL_DIAG_SERVER_NAME、またはSQL_DIAG_SQLSTATEの DiagIdentifier 引数でのみ SQLGetDiagField を呼び出すことができるようになります。 その他のすべての診断フィールドは、SQL_ERRORを返します。

ヘッダー フィールド

次の表に示すヘッダー フィールドは、 DiagIdentifier 引数に含めることができます。

DiagIdentifier の戻り値の型 : 戻り値
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN このフィールドには、カーソル内の行数が含まれます。 そのセマンティクスは、SQL_DYNAMIC_CURSOR_ATTRIBUTES2、SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2、SQL_KEYSET_CURSOR_ATTRIBUTES2、SQL_STATIC_CURSOR_ATTRIBUTES2の SQLGetInfo 情報の種類によって異なります。これは、カーソルの種類 (SQL_CA2_CRC_EXACTビットとSQL_CA2_CRC_APPROXIMATE ビット) ごとに使用可能な行数を示します。

このフィールドの内容は、ステートメント ハンドルに対してのみ定義され、 SQLExecuteSQLExecDirect、または SQLMoreResults が呼び出された後にのみ定義されます。 ステートメント ハンドル以外で SQL_DIAG_CURSOR_ROW_COUNT の DiagIdentifier を使用して SQLGetDiagField を呼び出すと、SQL_ERRORが返されます。
SQL_DIAG_DYNAMIC_FUNCTION Sqlchar* これは、基になる関数が実行した SQL ステートメントを記述する文字列です。 (特定の値については、このセクションで後述する「動的関数フィールドの値」を参照してください)。このフィールドの内容は、ステートメント ハンドルに対してのみ定義され、SQLExecute、SQLExecDirect、または SQLMoreResults の呼び出しの後にのみ定義されます。 ステートメント ハンドル以外で SQL_DIAG_DYNAMIC_FUNCTION の DiagIdentifier を使用して SQLGetDiagField を呼び出すと、SQL_ERRORが返されます。 このフィールドの値は、 SQLExecute または SQLExecDirect を呼び出す前に未定義です。
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER これは、基になる関数によって実行された SQL ステートメントを記述する数値コードです。 (特定の値については、このセクションで後述する「動的関数フィールドの値」を参照してください)。このフィールドの内容は、ステートメント ハンドルに対してのみ定義され、SQLExecute、SQLExecDirect、または SQLMoreResults の呼び出しの後にのみ定義されます。 ステートメント ハンドル以外で SQL_DIAG_DYNAMIC_FUNCTION_CODE の DiagIdentifier を使用して SQLGetDiagField を呼び出すと、SQL_ERRORが返されます。 このフィールドの値は、 SQLExecute または SQLExecDirect を呼び出す前に未定義です。
SQL_DIAG_NUMBER SQLINTEGER 指定したハンドルで使用できる状態レコードの数。
SQL_DIAG_RETURNCODE SQLRETURN 関数によって返される戻りコード。 リターン コードの一覧については、「 リターン コード」を参照してください。 ドライバーは、SQL_DIAG_RETURNCODEを実装する必要はありません。ドライバー マネージャーによって常に実装されます。 Handle でまだ関数が呼び出されていない場合は、SQL_DIAG_RETURNCODEに対してSQL_SUCCESSが返されます。
SQL_DIAG_ROW_COUNT SQLLEN SQLExecute、SQLExecDirectSQLBulkOperations、または SQLSetPos によって実行された挿入、削除、または更新の影響を受ける行の数。 これは、カーソルの指定が実行された後にドライバーによって定義されます。 このフィールドの内容は、ステートメント ハンドルに対してのみ定義されます。 ステートメント ハンドル以外で SQL_DIAG_ROW_COUNT の DiagIdentifier を使用して SQLGetDiagField を呼び出すと、SQL_ERRORが返されます。 このフィールドのデータは、SQLRowCountRowCountPtr 引数でも返されます。 このフィールドのデータは、診断以外の関数呼び出しのたびにリセットされますが、 SQLRowCount によって返される行数は、ステートメントが準備済みまたは割り当て済み状態に戻されるまで同じままです。

レコード フィールド

次の表に示すレコード フィールドは、 DiagIdentifier 引数に含めることができます。

DiagIdentifier の戻り値の型 : 戻り値
SQL_DIAG_CLASS_ORIGIN Sqlchar* このレコードの SQLSTATE 値のクラス部分を定義するドキュメントを示す文字列。 その値は、Open Group および ISO 呼び出しレベル インターフェイスで定義されているすべての SQLSTATE の "ISO 9075" です。 ODBC 固有の SQLSTATEs (SQLSTATE クラスが "IM" であるすべての SQLSTATEs) の場合、その値は "ODBC 3.0" です。
SQL_DIAG_COLUMN_NUMBER SQLINTEGER SQL_DIAG_ROW_NUMBER フィールドが行セット内の有効な行番号またはパラメーターのセットである場合、このフィールドには、結果セット内の列番号またはパラメーターのセット内のパラメーター番号を表す値が含まれます。 結果セットの列番号は常に 1 から始まります。この状態レコードがブックマーク列に関連する場合、フィールドは 0 にすることができます。 パラメーター番号は 1 から始まります。 状態レコードが列番号またはパラメーター番号に関連付けられていない場合は、SQL_NO_COLUMN_NUMBER値があります。 このレコードが関連付けられている列番号またはパラメーター番号をドライバーが特定できない場合、このフィールドの値はSQL_COLUMN_NUMBER_UNKNOWN。

このフィールドの内容は、ステートメント ハンドルに対してのみ定義されます。
SQL_DIAG_CONNECTION_NAME Sqlchar* 診断レコードが関連付ける接続の名前を示す文字列。 このフィールドはドライバー定義です。 環境ハンドルに関連付けられている診断データ構造の場合、および接続に関連しない診断の場合、このフィールドは長さ 0 の文字列です。
SQL_DIAG_MESSAGE_TEXT Sqlchar* エラーまたは警告に関する情報メッセージ。 このフィールドは、「 診断メッセージ」の説明に従って書式設定されます。 診断メッセージ テキストの最大長はありません。
SQL_DIAG_NATIVE SQLINTEGER ドライバー/データ ソース固有のネイティブ エラー コード。 ネイティブ エラー コードがない場合、ドライバーは 0 を返します。
SQL_DIAG_ROW_NUMBER SQLLEN このフィールドには、行セット内の行番号、または状態レコードが関連付けられているパラメーターセットのパラメーター番号が含まれます。 行番号とパラメーター番号は 1 から始まります。 この状態レコードが行番号またはパラメーター番号に関連付けられていない場合、このフィールドの値はSQL_NO_ROW_NUMBER。 このレコードが関連付けられている行番号またはパラメーター番号をドライバーが特定できない場合、このフィールドの値はSQL_ROW_NUMBER_UNKNOWN。

このフィールドの内容は、ステートメント ハンドルに対してのみ定義されます。
SQL_DIAG_SERVER_NAME Sqlchar* 診断レコードが関連付けるサーバー名を示す文字列。 これは、SQL_DATA_SOURCE_NAME オプションを使用して SQLGetInfo を呼び出すために返される値と同じです。 環境ハンドルに関連付けられている診断データ構造の場合、およびサーバーに関連しない診断の場合、このフィールドは長さ 0 の文字列です。
SQL_DIAG_SQLSTATE Sqlchar* 5 文字の SQLSTATE 診断コード。 詳細については、「 SQLSTATEs」を参照してください。
SQL_DIAG_SUBCLASS_ORIGIN Sqlchar* SQLSTATE コードのサブクラス部分の定義部分を識別する、SQL_DIAG_CLASS_ORIGINと同じ形式と有効な値を持つ文字列。 "ODBC 3.0" が返される ODBC 固有の SQLSTATES には、次のものがあります。

01S00、01S01、01S02、01S06、01S07、07S01、 08S01、21S01、21S02、25S01、25S02、25S03、42S01、42S02、42S11、42S12、42S21、42S22、HY095、HY097、HY098、HY099、HY099、 HY100、HY101、HY105、HY107、HY109、HY110、HY111、HYT00、HYT01、IM001、IM002、IM003、IM004、IM005、IM006、IM007、IM008、IM010、IM011、IM012。

動的関数フィールドの値

次の表では、 SQLExecute または SQLExecDirect の呼び出しによって実行される SQL ステートメントの各種類に適用されるSQL_DIAG_DYNAMIC_FUNCTIONとSQL_DIAG_DYNAMIC_FUNCTION_CODEの値について説明します。 ドライバーは、一覧表示されている値にドライバー定義の値を追加できます。

SQL ステートメント

実行
の値

SQL_DIAG_DYNAMIC_FUNCTION
の値

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
assertion-definition "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
character-set-definition "CREATE CHARACTER SET" SQL_DIAG_CREATE_CHARACTER_SET
collation-definition "照合順序の作成" SQL_DIAG_CREATE_COLLATION
domainn-definition "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CREATE INDEX" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "CREATE VIEW" SQL_DIAG_CREATE_VIEW
cursor-specification "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "DYNAMIC DELETE CURSOR" SQL_DIAG_DYNAMIC_DELETE_CURSOR
delete-statement-searched "DELETE WHERE" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "DROP CHARACTER SET" SQL_DIAG_DROP_CHARACTER_SET
drop-collation-statement "DROP COLLATION" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-statement "DROP INDEX" SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
insert-statement "INSERT" SQL_DIAG_INSERT
ODBC-procedure-extension "CALL" SQL_DIAG_ CALL
revoke-statement "REVOKE" SQL_DIAG_REVOKE
schema-definition "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
translation-definition "CREATE TRANSLATION" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "動的更新カーソル" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "UPDATE WHERE" SQL_DIAG_UPDATE_WHERE
Unknown 空の文字列 SQL_DIAG_UNKNOWN_STATEMENT

状態レコードのシーケンス

状態レコードは、行番号と診断の種類に基づいてシーケンスに配置されます。 ドライバー マネージャーは、生成された状態レコードを返す最終的な順序を決定します。 ドライバーは、生成された状態レコードを返す最終的な順序を決定します。

ドライバー マネージャーとドライバーの両方によって診断レコードが投稿された場合、ドライバー マネージャーはそれらを並べ替える責任があります。

2 つ以上の状態レコードがある場合、レコードのシーケンスは最初に行番号によって決定されます。 診断レコードのシーケンスを行ごとに決定するには、次の規則が適用されます。

  • 行に対応しないレコードは、特定の行に対応するレコードの前に表示されます。これは、SQL_NO_ROW_NUMBERが -1 として定義されているためです。

  • 行番号が不明なレコードは、SQL_ROW_NUMBER_UNKNOWNが -2 として定義されているため、他のすべてのレコードの前に表示されます。

  • 特定の行に関連するすべてのレコードについて、レコードは SQL_DIAG_ROW_NUMBER フィールドの値で並べ替えられます。 影響を受ける最初の行のすべてのエラーと警告が一覧表示され、次に影響を受ける次の行のすべてのエラーと警告が表示されます。

Note

ODBC 3*.x* ドライバー マネージャーは、SQLSTATE 01S01 (行のエラー) が ODBC 2*.x* ドライバーによって返された場合、または SQLExtendedFetch が呼び出されたとき、または SQLExtendedFetch で配置されたカーソルで SQLSetPos が呼び出されたときに ODBC 3*.x* ドライバーから SQLSTATE 01S01 (行内エラー) が返された場合、診断キュー内の状態レコードを並べ替えません。

各行内、または行番号が不明な行番号に対応しないすべてのレコード、または行番号がSQL_NO_ROW_NUMBERと等しいすべてのレコードに対して、一連の並べ替えルールを使用して最初に一覧表示されるレコードが決定されます。 最初のレコードの後、行に影響を与える他のレコードの順序は未定義です。 アプリケーションでは、最初のレコードの後にエラーが警告の前にあると見なすことはできません。 アプリケーションは、完全な診断データ構造をスキャンして、関数の呼び出しが失敗した場合に関する完全な情報を取得する必要があります。

次のルールは、行内の最初のレコードを決定するために使用されます。 ランクが最も高いレコードが最初のレコードです。 レコードのランク付け時に、レコードのソース (ドライバー マネージャー、ドライバー、ゲートウェイなど) は考慮されません。

  • エラー エラーを記述する状態レコードのランクが最も高くなります。 並べ替えエラーには、次の規則が適用されます。

    • トランザクションエラーまたは可能性のあるトランザクションエラーを示すレコードは、他のすべてのレコードを上回る。

    • 2 つ以上のレコードで同じエラー条件が記述されている場合、Open Group CLI 仕様 (クラス 03 から HZ) で定義された SQLSTATE は、ODBC とドライバー定義の SQLSTATE を上回ります。

  • 実装で定義されたデータ値なし ドライバー定義の No Data 値 (クラス 02) を記述する状態レコードは、2 番目に高いランクを持ちます。

  • 警告 警告を記述する状態レコード (クラス 01) のランクは最も低くなります。 2 つ以上のレコードで同じ警告条件が記述されている場合、Open Group CLI 仕様で定義された警告 SQLSTATE は、ODBC 定義とドライバー定義の SQLSTATE を上回ります。

対象 解決方法については、
診断データ構造の複数のフィールドを取得する SQLGetDiagRec 関数

参照

ODBC API リファレンス
ODBC ヘッダー ファイル