Blokir Kursor, Kursor yang Dapat Digulir, dan Kompatibilitas Mundur untuk Aplikasi ODBC 3.x

Keberadaan SQLFetchScroll dan SQLExtendedFetch mewakili pemisahan jelas pertama dalam ODBC antara Antarmuka Pemrograman Aplikasi (API), yang merupakan serangkaian fungsi panggilan aplikasi, dan Antarmuka Penyedia Layanan (SPI), yang merupakan serangkaian fungsi yang diterapkan driver. Pemisahan ini diperlukan untuk menyeimbangkan persyaratan dalam ODBC 3.x, yang menggunakan SQLFetchScroll, untuk menyelaraskan dengan standar dan kompatibel dengan ODBC 2.x, yang menggunakan SQLExtendedFetch.

ODBC 3.x API, yang merupakan set fungsi panggilan aplikasi, termasuk SQLFetchScroll dan atribut pernyataan terkait. ODBC 3.x SPI, yang merupakan set fungsi yang diterapkan driver, termasuk SQLFetchScroll, SQLExtendedFetch, dan atribut pernyataan terkait. Karena ODBC tidak secara resmi memberlakukan pemisahan ini antara API dan SPI, aplikasi ODBC 3.x dapat memanggil SQLExtendedFetch dan atribut pernyataan terkait. Namun, tidak ada alasan bagi aplikasi ODBC 3.x untuk melakukan ini. Untuk informasi selengkapnya tentang API dan SPIs, lihat pengantar Arsitektur ODBC.

Untuk informasi tentang bagaimana ODBC 3.x Driver Manager memetakan panggilan ke driver ODBC 2.x dan ODBC 3.x , dan fungsi dan pernyataan apa yang harus diterapkan driver ODBC 3.x untuk kursor yang dapat diblokir dan dapat digulir, lihat Apa yang Dilakukan Driver di Lampiran G: Panduan Driver untuk Kompatibilitas Mundur.

Tabel berikut ini meringkas fungsi dan pernyataan apa yang mengaitkan aplikasi ODBC 3.x yang harus digunakan dengan kursor yang dapat diblokir dan dapat digulir. Ini juga mencantumkan perubahan antara ODBC 2.x dan ODBC 3.x di area ini yang harus diperhatikan aplikasi ODBC 3.x agar kompatibel dengan driver ODBC 2.x .

Fungsi atau

atribut pernyataan
Komentar
SQL_ATTR_FETCH_BOOKMARK_PTR Arahkan ke marka buku untuk digunakan dengan SQLFetchScroll.

Ketika aplikasi mengatur ini dalam driver ODBC 2.x , ini harus menunjuk ke bookmark panjang tetap.
SQL_ATTR_ROW_STATUS_PTR Menunjuk ke array status baris yang diisi oleh SQLFetch, SQLFetchScroll, SQLBulkOperations, dan SQLSetPos.

Jika aplikasi mengatur ini dalam driver ODBC 2.x dan memanggil SQLBulkOperation dengan Operasi SQL_ADD sebelum memanggil SQLFetchScroll, SQLFetch, atau SQLExtendedFetch, SQLSTATE HY011 (Atribut tidak dapat diatur sekarang) dikembalikan.

Ketika aplikasi memanggil SQLFetch dalam driver ODBC 2.x , SQLFetch dipetakan ke SQLExtendedFetch dan karenanya mengembalikan nilai dalam array ini.
SQL_ATTR_ROWS_FETCHED_PTR Menunjuk ke buffer tempat SQLFetch dan SQLFetchScroll mengembalikan jumlah baris yang diambil.

Ketika aplikasi memanggil SQLFetch dalam driver ODBC 2.x , SQLFetch dipetakan ke SQLExtendedFetch dan oleh karena itu mengembalikan nilai dalam buffer ini.
SQL_ATTR_ROW_ARRAY_SIZE Mengatur ukuran set baris.

Jika aplikasi memanggil SQLBulkOperations dengan Operasi SQL_ADD di driver ODBC 2.x, SQL_ROWSET_SIZE akan digunakan untuk panggilan, bukan SQL_ATTR_ROW_ARRAY_SIZE, karena panggilan dipetakan ke SQLSetPos dengan Operasi SQL_ADD, yang menggunakan SQL_ROWSET_SIZE.

Memanggil SQLSetPos dengan Operasi SQL_ADD atau SQLExtendedFetch dalam driver ODBC 2.x menggunakan SQL_ROWSET_SIZE.

Memanggil SQLFetch atau SQLFetchScroll dalam driver ODBC 2.x menggunakan SQL_ATTR_ROW_ARRAY_SIZE.
SQLBulkOperations Melakukan operasi sisipkan dan marka buku. Ketika SQLBulkOperations dengan Operasi SQL_ADD dipanggil dalam driver ODBC 2.x , itu dipetakan ke SQLSetPos dengan Operasi SQL_ADD. Berikut ini adalah detail implementasi:

- Saat bekerja dengan driver ODBC 2.x , aplikasi hanya harus menggunakan ARD yang dialokasikan secara implisit yang terkait dengan StatementHandle; tidak dapat mengalokasikan ARD lain untuk menambahkan baris, karena operasi deskriptor eksplisit tidak didukung dalam driver ODBC 2.x . Aplikasi harus menggunakan SQLBindCol untuk mengikat ARD, bukan SQLSetDescField atau SQLSetDescRec.
- Saat memanggil driver ODBC 3.x , aplikasi dapat memanggil SQLBulkOperations dengan Operasi SQL_ADD sebelum memanggil SQLFetch atau SQLFetchScroll. Saat memanggil driver ODBC 2.x , aplikasi harus memanggil SQLFetchScroll sebelum memanggil SQLBulkOperations dengan Operasi SQL_ADD.
SQLFetch Mengembalikan set baris berikutnya. Berikut ini adalah detail implementasi:

- Ketika aplikasi memanggil SQLFetch dalam driver ODBC 2.x , aplikasi dipetakan ke SQLExtendedFetch.
- Ketika aplikasi memanggil SQLFetch dalam driver ODBC 3.x , aplikasi mengembalikan jumlah baris yang ditentukan dengan atribut pernyataan SQL_ATTR_ROW_ARRAY_SIZE.
SQLFetchScroll Mengembalikan set baris yang ditentukan. Berikut ini adalah detail implementasi:

- Ketika aplikasi memanggil SQLFetchScroll dalam driver ODBC 2.x , aplikasi mengembalikan SQLSTATE 01S01 (Kesalahan berturut-turut) sebelum setiap kesalahan yang berlaku untuk satu baris. Ini hanya karena Manajer Driver ODBC 3.x memetakan ini ke SQLExtendedFetch dan SQLExtendedFetch mengembalikan SQLSTATE ini. Ketika aplikasi memanggil SQLFetchScroll dalam driver ODBC 3.x , aplikasi tidak pernah mengembalikan SQLSTATE 01S01 (Kesalahan berturut-turut).
- Ketika aplikasi memanggil SQLFetchScroll dalam driver ODBC 2.x dengan FetchOrientation diatur ke SQL_FETCH_BOOKMARK, argumen FetchOffset harus diatur ke 0. SQLSTATE HYC00 (Fitur opsional tidak diterapkan) dikembalikan jika pengambilan marka buku berbasis offset dicoba dengan driver ODBC 2.x .

Catatan

Aplikasi ODBC 3.x tidak boleh menggunakan SQLExtendedFetch atau atribut pernyataan SQL_ROWSET_SIZE. Sebaliknya, mereka harus menggunakan SQLFetchScroll dan atribut pernyataan SQL_ATTR_ROW_ARRAY_SIZE. Aplikasi ODBC 3.x tidak boleh menggunakan SQLSetPos dengan Operasi SQL_ADD tetapi harus menggunakan SQLBulkOperations dengan Operasi SQL_ADD.