驅動程式的用途

下表摘要說明 ODBC 3.x 驅動程式應該針對區塊和可捲動的資料指標實作哪些函式和語句屬性。

函式或

陳述式屬性
註解
SQL_ATTR_ROW_STATUS_PTR 設定 SQLFetch SQLFetchScroll 填入的資料列狀態陣列位址。 如果 SQLSetPos 在語句狀態 S6 中呼叫 SQLSetPos,此陣列也會由 SQLSetPos 填入。 如果 SQLSetPos 在狀態 S7 中呼叫,則不會填入此陣列,但會填入 SQLExtendedFetch 之 RowStatusArray 引數所指向 陣列。 如需詳細資訊,請參閱 附錄 B:ODBC 狀態轉換資料表中的語句轉換
SQL_ATTR_ROWS_FETCHED_PTR 設定 SQLFetch SQLFetchScroll 傳回所擷取之資料列數目的緩衝區 位址。 如果 呼叫 SQLExtendedFetch ,則不會填入此緩衝區,但 RowCountPtr 引數會指向所擷取的資料列數目。
SQL_ATTR_ROW_ARRAY_SIZE 設定 SQLFetch SQLFetchScroll 所使用的 資料列集大小。
SQL_ROWSET_SIZE 設定 SQLExtendedFetch 所使用的 資料列集大小。 如果 ODBC 3.x 驅動程式想要使用呼叫 SQLExtendedFetch SQLSetPos 的 ODBC 2.x 應用程式,請實作這個驅動程式。
SQLBulkOperations 如果 ODBC 3.x 驅動程式應該搭配使用 SQLSetPos 搭配 SQL_ADD 作業 的 ODBC 2.x 應用程式,則除了具有 SQL_ADD 作業的 SQLBulkOperations 之外,驅動程式還必須支援 具有 SQL_ADD 作業 的 SQLSetPos。
SQLExtendedFetch 傳回指定的資料列集。 如果 ODBC 3.x 驅動程式想要使用呼叫 SQLExtendedFetch SQLSetPos 的 ODBC 2.x 應用程式,請實作這個驅動程式。 下列是實作詳細資料:

- 驅動程式會從 SQL_ROWSET_SIZE 語句屬性的值擷取資料列集大小。
- 驅動程式會從 RowStatusArray 引數擷取資料列狀態陣列的位址,而不是SQL_ATTR_ROW_STATUS_PTR語句屬性。 呼叫 SQLExtendedFetch 中的 RowStatusArray 引數不得為 Null 指標。 (請注意,在 ODBC 中3.x ,SQL_ATTR_ROW_STATUS_PTR語句屬性可以是 null 指標。
- 驅動程式會從 RowCountPtr 引數擷取資料列擷取緩衝區的位址,而不是SQL_ATTR_ROWS_FETCHED_PTR語句屬性。
- 驅動程式會傳回 SQLSTATE 01S01 (資料列中的錯誤),指出資料列是由 SQLExtendedFetch 呼叫 擷取時發生錯誤。 只有在 呼叫 SQLExtendedFetch 時 ,ODBC 3.x 驅動程式才應該傳回 SQLSTATE 01S01 (資料列中的錯誤),而不是呼叫 SQLFetch SQLFetchScroll 。 為了保留回溯相容性,當 SQLSTATE 01S01 (資料列中的錯誤)由 SQLExtendedFetch 傳回時,驅動程式管理員不會根據 SQLGetDiagField 的「狀態記錄順序」一節 中所述的規則,排序錯誤佇列中的狀態記錄。
SQLFetch 傳回下一個資料列集。 下列是實作詳細資料:

- 驅動程式會從 SQL_ATTR_ROW_ARRAY_SIZE 語句屬性的值擷取資料列集大小。
- 驅動程式會從 SQL_ATTR_ROW_STATUS_PTR 語句屬性擷取資料列狀態陣列的位址。
- 驅動程式會從 SQL_ATTR_ROWS_FETCHED_PTR 語句屬性擷取資料列擷取緩衝區的位址。
- 應用程式可以混合 SQLFetchScroll SQLFetch 之間的 呼叫。
- 如果資料行 0 已系結,SQLFetch 會傳回書簽。
- 您可以呼叫 SQLFetch 以傳回一個以上的資料列。
- 驅動程式不會傳回 SQLSTATE 01S01 (資料列中的錯誤),表示資料列是由 SQLFetch 呼叫 擷取時發生錯誤。
SQLFetchScroll 傳回指定的資料列集。 下列是實作詳細資料:

- 驅動程式會從 SQL_ATTR_ROW_ARRAY_SIZE 語句屬性擷取資料列集大小。
- 驅動程式會從 SQL_ATTR_ROW_STATUS_PTR 語句屬性擷取資料列狀態陣列的位址。
- 驅動程式會從 SQL_ATTR_ROWS_FETCHED_PTR 語句屬性擷取資料列擷取緩衝區的位址。
- 應用程式可以混合 SQLFetchScroll SQLFetch 之間的 呼叫。
- 驅動程式不會傳回 SQLSTATE 01S01 (資料列中的錯誤),表示資料列是由 SQLFetchScroll 呼叫 擷取時發生錯誤。
SQLSetPos 執行各種定位作業。 下列是實作詳細資料:

- 這可以在 語句中呼叫,指出 S6 或 S7。 如需詳細資訊,請參閱 附錄 B:ODBC 狀態轉換資料表中的語句轉換
- 如果在語句狀態 S5 或 S6 中呼叫,驅動程式會從 SQL_ATTR_ROWS_FETCHED_PTR 語句屬性擷取資料列集大小,並從 SQL_ATTR_ROW_STATUS_PTR 語句屬性擷取資料列狀態陣列的位址。
- 如果在語句狀態 S7 中呼叫,驅動程式會從 SQL_ROWSET_SIZE 語句屬性擷取資料列集大小,並從 SQLExtendedFetch 的 RowStatusArray 引數擷取資料列狀態陣列的 位址。
- 驅動程式會傳回 SQLSTATE 01S01 (資料列中的錯誤),只表示在呼叫 SQLSetPos 時擷取資料列時發生錯誤,以在狀態 S7 中呼叫 函式時執行大量作業。 為了保留回溯相容性,如果 SQLSTATE 01S01 (資料列中的錯誤)是由 SQLSetPos 傳回,驅動程式管理員不會根據 SQLGetDiagField 的「狀態記錄順序」一節 中所述的規則,排序錯誤佇列中的狀態記錄。
- 如果驅動程式應該使用呼叫 SQLSetPos 且具有 operation 引數SQL_ADD的 ODBC 2.x 應用程式,驅動程式必須支援 具有 SQL_ADD 的 Operation 引數的 SQLSetPos