Share via


相對與絕對的捲動

SQLFetchScroll 中的多數捲動選項都會將游標置於目前位置的相對位置或是絕對位置。 SQLFetchScroll 支援擷取下一個、上一個、第一個與最後一個資料列集,同時也支援相對擷取 (從目前資料列集開頭擷取資料列集 n 資料列) 與絕對擷取 (從資料列 n 開始擷取資料列集),。 如果絕對擷取的 n 為負數,資料列會從結果集的結尾開始計數。 因此,資料列 -1 的絕對擷取表示從結果集的最後一個資料列開始擷取資料列集。

動態資料指標會偵測插入結果集以及從結果集中刪除的資料列,因此除了從結果集開頭讀取資料列之外,動態資料指標沒有其他簡單的方式來擷取特定編號的資料列,這可能會很緩慢。 此外,在動態資料指標採用絕對擷取並不實用,因為資料列編號會在插入及刪除資料列時變更;因此,連續擷取相同的資料列編號可能會產生不同的資料列。

若應用程式僅使用 SQLFetchScroll 的區塊游標功能 (例如報表),則可能會僅使用選項來擷取下個資料列集,一次傳遞結果集。 另一方面,螢幕式應用程式可利用 SQLFetchScroll 的所有功能。 如果應用程式將資料列集大小設為在螢幕上顯示的資料列數目,並繫結螢幕緩衝區至結果集,則可直接轉譯捲軸作業來呼叫 SQLFetchScroll

捲軸作業 SQLFetchScroll 捲動選項
向上捲動一頁 SQL_FETCH_PRIOR
向下捲動一頁 SQL_FETCH_NEXT
向上捲動一行 FetchOffset 等於 -1 的 SQL_FETCH_RELATIVE
向下捲動一行 FetchOffset 等於 1 的 SQL_FETCH_RELATIVE
捲動方塊在頂端 SQL_FETCH_FIRST
捲動方塊在底部 SQL_FETCH_LAST
隨機捲動方塊位置 SQL_FETCH_ABSOLUTE

這類應用程式也需要在捲動作業之後定位捲動方塊,這需要目前資料列編號與資料列數目。 針對目前資料列編號,應用程式可追蹤目前的資料列編號,或使用 SQL_ATTR_ROW_NUMBER 屬性呼叫 SQLGetStmtAttr 來擷取它。

資料指標中的資料列數目是結果集的大小,可作為診斷標頭的 SQL_DIAG_CURSOR_ROW_COUNT 欄位。 僅在呼叫 SQLExecuteSQLExecDirectSQLMoreResult 之後,才會定義此欄位值。 此計數可為近似計數或確切計數,視驅動程式的功能而定。 您可利用資料指標屬性資訊類型來呼叫 SQLGetInfo,並檢查資料指標類型是否傳回 SQL_CA2_CRC_APPROXIMATE 或 SQL_CA2_CRC_EXACT 位元,來判斷驅動程式的支援。

動態資料指標一律不支援確切資料列計數。 對於其他類型的資料指標,驅動程式可支援確切或近似資料列計數,但無法同時支援兩者。 如果驅動程式不支援特定資料指標類型的確切或近似資料列計數,SQL_DIAG_CURSOR_ROW_COUNT 欄位會包含到目前為止已擷取的資料列數目。 不論驅動程式支援何者,具有 SQL_FETCH_LAST 作業的 SQLFetchScroll 會使 SQL_DIAG_CURSOR_ROW_COUNT 欄位包含確切的資料列計數。