JetRetrieveColumns 函式
適用于:Windows |Windows伺服器
JetRetrieveColumns 函式
JetRetrieveColumns函式會從單一作業中的目前記錄擷取多個資料行值。 JET_RETRIEVECOLUMN結構的陣列可用來描述要擷取的資料行值集,以及描述要擷取之每個資料行值的輸出緩衝區。
JET_ERR JET_API JetRetrieveColumns(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in_out_opt JET_RETRIEVECOLUMN* pretrievecolumn,
__in unsigned long cretrievecolumn
);
參數
sesid
要用於這個呼叫的會話。
tableid
要用於這個呼叫的資料指標。
pretrievecolumn
一或多個 JET_RETRIEVECOLUMN 結構的陣列指標。 每個結構都包含要擷取的資料行值,以及儲存傳回資料的位置的描述。
cretrievecolumn
由 pretrievecolumn所指定陣列中的JET_RETRIEVECOLUMN結構數目。
傳回值
此函式會傳回具有下列其中一個傳回碼 的 JET_ERR 資料類型。 如需可能 ESE 錯誤的詳細資訊,請參閱可延伸儲存體引擎錯誤和錯誤處理參數。
傳回碼 |
描述 |
---|---|
JET_errSuccess |
作業已成功完成。 |
JET_errBadItagSequence |
在 pretinfo-itagSequence > 中傳遞了不正確多值資料行序號值。 多重值資料行值序號的有效值為 1 或更大。 值 0 (零) 對此函式有效,但 JetRetrieveColumn無效。 |
JET_errBadColumnId |
提供的資料行識別碼超出資料行識別碼的法律限制。 |
JET_errClientRequestToStopJetService |
無法完成作業,因為與會話相關聯之實例上的所有活動因 JetStopService呼叫而停止。 |
JET_errColumnNotFound |
指定的 columnid 所描述的資料行不存在於資料表中。 |
JET_errIndexTuplesCannotRetrieveFromIndex |
無法從索引擷取以子字串編制索引的資料行,因為每個索引項目目中通常只有一小部分的資料行存在。 |
JET_errInvalidBufferSize |
在某些情況下,為擷取資料行指定的緩衝區必須有足夠的大小,才能傳回任何數量的資料行值。 例如,委付可更新的資料行會針對呼叫會話的交易內容調整為一致,而這項調整需要呼叫端提供的緩衝區。 如果提供緩衝區空間不足,則會傳回JET_errInvalidBufferSize,而且不會傳回任何資料行資料。 |
JET_errInvalidgrbit |
提供的選項未知或不合法的已知位設定組合。 |
JET_errInvalidParameter |
指定的一或多個參數不正確。 如果 retinfo.cbStruct 的大小小於 JET_RETINFO,就可能會發生這種情況。 |
JET_errInstanceUnavailable |
無法完成作業,因為與會話相關聯的實例發生嚴重錯誤,需要撤銷所有資料的存取權,以保護該資料的完整性。 Windows XP:此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errNoCurrentRecord |
游標不在記錄上。 此情況具有許多不同的原因。 例如,如果游標目前位於目前索引的最後一筆記錄之後,就會發生這種情況。 |
JET_errNotInitialized |
無法完成作業,因為與會話相關聯的實例尚未初始化。 |
JET_errRestoreInProgress |
無法完成作業,因為與會話相關聯的實例上正在進行還原作業。 |
JET_errSessionSharingViolation |
同一個會話不能同時用於一個以上的執行緒。 Windows XP:此錯誤只會由 Windows XP 和更新版本傳回。 |
JET_errTermInProgress |
無法完成作業,因為與會話相關聯的實例正在關閉。 |
JET_wrnBufferTruncated |
無法擷取整個資料行值,因為指定的緩衝區小於資料行的大小。 |
成功時,資料行資料和資料行大小會在 JET_RETRIEVECOLUMN結構的陣列 中所述的提供緩衝區中傳回。 如果 itagSequence 設定為 0 (零) 表示需要多重值欄位的實例數目,而不是資料行資料,則會在 itagSequence 欄位中傳回多重值資料行的實例數目。 每個 JET_RETRIEVECOLUMN 結構都有一個錯誤欄位,其中包含所擷取資料行的警告。 如果資料行值為 Null ,則錯誤碼會設定為 JET_wrnColumnNull。
失敗時,資料指標位置會保持不變,而且不會將資料複製到提供的緩衝區。
備註
JetRetrieveColumns 支援 JetRetrieveColumn 不支援的一項功能。 這是擷取多重值資料行實例數目的能力。 這項功能的目的是允許應用程式擷取資料行的所有值。 您可以先判斷資料行所擁有的值數目,藉此完成此動作。 接下來,您可以再次呼叫 JetRetrieveColumns ,並為每個值配置一個 JET_RETRIEVECOLUMN 結構來判斷其長度,以判斷資料行資料的長度。 做法是傳遞nullpvData指標,其 cbMax為 0 (零) ,並以cbActual擷取資料行長度。 第三個和最後一個呼叫可以針對資料行值資料使用配置的記憶體。
如果因為長度緩衝區不足而截斷任何擷取的資料行,則 API 會傳回JET_wrnBufferTruncated。 不過,其他錯誤JET_wrnColumnNull只會在 JET_RETRIEVECOLUMN的錯誤欄位中傳回。 這是因為應用程式通常會想要確保已擷取所有資料,並從 JetRetrieveColumns 傳回此錯誤有助於瞭解。
規格需求
需求 | 值 |
---|---|
用戶端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
Server |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
標頭 |
在 Esent.h 中宣告。 |
程式庫 |
使用 ESENT.lib。 |
DLL |
需要ESENT.dll。 |
另請參閱
JET_ERR
JET_SESID
JET_TABLEID
JET_RETRIEVECOLUMN
JetEnumerateColumns
JetRetrieveColumn
JetSetColumns