符合性
推出版本:ODBC 3.0 標準合規:ISO 92
總結
SQLGetDescRec 會回傳描述符記錄中多個欄位的當前設定或值。 回傳的欄位描述欄位或參數資料的名稱、資料型態及儲存方式。
Syntax
SQLRETURN SQLGetDescRec(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLCHAR * Name,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr,
SQLSMALLINT * TypePtr,
SQLSMALLINT * SubTypePtr,
SQLLEN * LengthPtr,
SQLSMALLINT * PrecisionPtr,
SQLSMALLINT * ScalePtr,
SQLSMALLINT * NullablePtr);
論點
DescriptorHandle
[輸入]描述符的handle。
RecNumber
[輸入]表示應用程式尋找資訊的描述符記錄。 描述符記錄從 1 開始編號,記錄編號 0 為書籤記錄。
RecNumber 參數必須小於或等於 SQL_DESC_COUNT 的值。 若 RecNumber 小於或等於 SQL_DESC_COUNT,但該列未包含欄位或參數資料,呼叫 SQLGetDescRec 將回傳欄位的預設值。 (更多資訊請參見 SQLSetDescField 中的「描述符欄位初始化」。)
Name
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_NAME欄位。
若 Name 為 NULL,StringLengthPtr 仍會回傳 Name 指向緩衝區中可返回的字元總數(不含字元資料的 null-終止字元)。
BufferLength
[輸入]*名稱 緩衝區的長度,以字元為單位。
StringLengthPtr
[輸出]一個指向緩衝區的指標,用來回傳 *Name 緩衝區中可返回的資料字元數,但不含空終止字元。 若字元數大於或等於 BufferLength,則 *Name 資料會截斷為 BufferLength 減去空終止字元長度,並由驅動程式進行空終止。
TypePtr
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_TYPE欄位值。
子型Ptr
[輸出]對於類型為 SQL_DATETIME 或 SQL_INTERVAL 的紀錄,這是指向緩衝區的指標,用以回傳 SQL_DESC_DATETIME_INTERVAL_CODE 欄位的值。
長度
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_OCTET_LENGTH欄位值。
精密Ptr
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_PRECISION欄位值。
ScalePtr
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_SCALE欄位值。
NullablePtr
[輸出]一個指向緩衝區的指標,用來回傳描述符記錄的SQL_DESC_NULLABLE欄位值。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_NO_DATA或SQL_INVALID_HANDLE。
如果 RecNumber 超過目前描述符記錄數量,則會回傳 SQL_NO_DATA。
如果 DescriptorHandle 是 IRD 的 handle 且該語句處於準備或執行狀態,但沒有開啟游標,則會回傳 SQL_NO_DATA。
Diagnostics
當 SQLGetDescRec 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可以透過呼叫 SQLGetDiagRec 並設定 HandleType 為 SQL_HANDLE_DESC 和 Handle 作為 DescriptorHandle 來取得相應的 SQLSTATE 值。 下表列出 SQLGetDescRec 通常回傳的 SQLSTATE 值,並在此函式情境中解釋每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。
| SQLSTATE | 錯誤 | 說明 |
|---|---|---|
| 01000 | 一般警告 | 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。) |
| 01004 | 字串數據,右截斷 | 緩衝區 *Name 不夠大,無法回傳整個描述符欄位。 因此,該場地被截斷。 未截斷描述符欄位的長度會回傳在 *StringLengthPtr. (函式會傳回SQL_SUCCESS_WITH_INFO。) |
| 07009 | 無效描述子索引 |
FieldIdentifier 參數為記錄欄位,RecNumber 參數設為 0,DescriptorHandle 參數為 IPD 位址。 (DM) RecNumber 參數設為 0,SQL_ATTR_USE_BOOKMARKS 陳述屬性設為 SQL_UB_OFF,DescriptorHandle 參數為 IRD 柄。 RecNumber 的論證小於 0。 |
| 08S01 | 通訊連結故障 | 驅動程式與驅動程式連線的數據源之間的通訊連結在函式完成處理之前失敗。 |
| HY000 | 一般誤差 | 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec 傳回的錯誤訊息描述錯誤及其原因。 |
| HY001 | 記憶體配置錯誤 | 驅動程式無法分配支援執行或完成函式所需的記憶體。 |
| HY007 | 未備妥相關聯的語句 | DescriptorHandle 與 IRD 相關聯,且該語句柄並非處於準備或執行狀態。 |
| HY010 | 函式順序錯誤 | (DM) DescriptorHandle 與一個 StatementHandle 相關聯,該 StatementHandle 呼叫了一個非同步執行的函式(非此函式),且在呼叫該函式時仍在執行中。 (DM) DescriptorHandle 與一個 StatementHandle 相關聯,該 StatementHandle 呼叫 SQLExecute、 SQLExecDirect、 SQLBulkOperations 或 SQLSetPos 並回傳SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。 (DM) 一個非同步執行的函式被呼叫用於與 DescriptorHandle 相關的連接句柄。 當呼叫 SQLGetDescRec 時,這個非同步函式仍在執行中。 |
| HY013 | 記憶體管理錯誤 | 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。 |
| HY117 | 聯機因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 | (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式。 |
| HYT01 | 連線已逾時 | 在數據源回應要求之前,連線逾時期限已過期。 線上逾時期間是透過 SQLSetConnectAttr 來設定,SQL_ATTR_CONNECTION_TIMEOUT。 |
| IM001 | 驅動程式不支援此函式 | (DM) 與 DescriptorHandle 相關的驅動程式不支援該函式。 |
評論
應用程式可以呼叫 SQLGetDescRec 來取得以下描述符欄位的值,針對單一欄位或參數:
SQL_DESC_NAME
SQL_DESC_TYPE
SQL_DESC_DATETIME_INTERVAL_CODE(用於類型為SQL_DATETIME或SQL_INTERVAL的紀錄)
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION
SQL_DESC_SCALE
SQL_DESC_NULLABLE
SQLGetDescRec 不會取得標頭欄位的值。
應用程式可以透過將對應欄位的參數設為空指標來阻止該欄位的設定回傳。
當應用程式呼叫 SQLGetDescRec 以取得某特定描述符類型未定義欄位的值時,函式會回傳 SQL_SUCCESS,但該欄位回傳的值卻未定義。 例如,呼叫 APD 或 ARD 的 SQL_DESC_NAME 或 SQL_DESC_NULLABLE 欄位 SQLGetDescRec 會回傳 SQL_SUCCESS,但該欄位的值未定義。
當應用程式呼叫 SQLGetDescRec 以取得某欄位的值時,該欄位已為特定描述符類型定義,但該欄位沒有預設值且尚未設定,函式會回傳 SQL_SUCCESS,但該欄位回傳的值尚未定義。 欲了解更多資訊,請參閱 SQLSetDescField 中的「描述符欄位初始化」。
欄位的值也可透過呼叫 SQLGetDescField 逐一取得。 關於描述符標頭或記錄中欄位的描述,請參見 SQLSetDescField。 如需描述項的詳細資訊,請參閱描述項。
相關函數
| 如需相關信息 | 看! |
|---|---|
| 裝幀柱 | SQLBindCol 函式 |
| 參數綁定 | SQLBindParameter 函式 |
| 取得描述欄位 | SQLGetDescField 函數 |
| 設定多個描述欄位 | SQLSetDescRec 函數 |