Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Fitur ini akan dihapus dalam versi Windows yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Microsoft merekomendasikan penggunaan fungsionalitas kursor driver.
Topik ini membahas penggunaan fungsi SQLFetchScroll di pustaka kursor. Untuk informasi umum tentang SQLFetchScroll, lihat Fungsi SQLFetchScroll.
Pustaka kursor mengimplementasikan SQLFetchScroll dengan berulang kali memanggil SQLFetch di driver. Ini mentransfer data yang diambilnya dari driver ke buffer set baris yang disediakan oleh aplikasi. Ini juga menyimpan data dalam file memori dan disk. Ketika aplikasi meminta set baris baru, pustaka kursor mengambilnya seperlunya dari driver (jika sebelumnya belum diambil) atau cache (jika sebelumnya telah diambil). Terakhir, pustaka kursor mempertahankan status data yang di-cache dan mengembalikan informasi ini ke aplikasi dalam array status baris.
Ketika pustaka kursor digunakan, panggilan ke SQLFetchScroll tidak dapat dicampur dengan panggilan ke SQLFetch atau SQLExtendedFetch.
Saat pustaka kursor digunakan, panggilan ke SQLFetchScroll didukung untuk ODBC 2.x dan untuk ODBC 3.x driver.
Buffer Set Baris
Pustaka kursor mengoptimalkan transfer data dari driver ke buffer set baris yang disediakan oleh aplikasi jika:
Aplikasi ini menggunakan pengikatan baris-bijaksana.
Tidak ada byte yang tidak digunakan antar bidang dalam struktur aplikasi menyatakan untuk menyimpan baris data.
Bidang di mana SQLFetch atau SQLFetchScroll mengembalikan panjang/indikator untuk kolom mengikuti buffer untuk kolom tersebut dan mendahului buffer untuk kolom berikutnya. Bidang-bidang ini bersifat opsional.
Ketika aplikasi meminta set baris baru, pustaka kursor mengambil data dari cache dan dari driver seperlunya. Jika set baris baru dan lama tumpang tindih, pustaka kursor dapat mengoptimalkan performanya dengan menggunakan kembali data dari bagian buffer set baris yang tumpang tindih. Oleh karena itu, perubahan yang tidak disimpan pada buffer set baris hilang kecuali set baris baru dan lama tumpang tindih dan perubahan berada di bagian yang tumpang tindih dari buffer set baris. Untuk menyimpan perubahan, aplikasi mengirimkan pernyataan pembaruan yang diposisikan.
Perhatikan bahwa pustaka kursor selalu merefresh buffer set baris dengan data dari cache saat aplikasi memanggil SQLFetchScroll dengan argumen FetchOrientation diatur ke SQL_FETCH_RELATIVE dan argumen FetchOffset diatur ke 0.
Pustaka kursor mendukung panggilan SQLSetStmtAttr dengan Atribut SQL_ATTR_ROW_ARRAY_SIZE untuk mengubah ukuran set baris saat kursor terbuka. Ukuran set baris baru akan berlaku saat berikutnya SQLFetchScroll dipanggil.
Keanggotaan Tataan Hasil
Pustaka kursor mengambil data dari driver hanya saat aplikasi memintanya. Bergantung pada sumber data dan pengaturan atribut pernyataan SQL_CONCURRENCY, ini memiliki konsekuensi berikut:
Data yang diambil oleh pustaka kursor mungkin berbeda dari data yang tersedia pada saat pernyataan dijalankan. Misalnya, setelah kursor dibuka, baris yang disisipkan pada titik di luar posisi kursor saat ini dapat diambil oleh beberapa driver.
Data dalam kumpulan hasil mungkin dikunci oleh sumber data untuk pustaka kursor dan karenanya tidak tersedia untuk pengguna lain.
Setelah pustaka kursor menyimpan baris data, pustaka kursor tidak dapat mendeteksi perubahan pada baris tersebut di sumber data yang mendasar (kecuali untuk pembaruan yang diposisikan dan dihapus yang beroperasi pada cache kursor yang sama). Ini terjadi karena, untuk panggilan ke SQLFetchScroll, pustaka kursor tidak pernah mengambil kembali data dari sumber data. Sebaliknya, ia mengambil kembali data dari cache-nya.
Pengguliran
Pustaka kursor mendukung jenis pengambilan berikut di SQLFetchScroll.
| Tipe kursor | Mengambil jenis |
|---|---|
| Teruskan saja | SQL_FETCH_NEXT |
| Statis | SQL_FETCH_NEXT SQL_FETCH_PRIOR SQL_FETCH_FIRST SQL_FETCH_LAST SQL_FETCH_RELATIVE SQL_FETCH_ABSOLUTE SQL_FETCH_BOOKMARK |
Kesalahan
Ketika SQLFetchScroll dipanggil dan salah satu panggilan ke SQLFetch mengembalikan SQL_ERROR, pustaka kursor melanjutkan sebagai berikut. Setelah menyelesaikan langkah-langkah ini, pustaka kursor terus memproses.
Memanggil SQLGetDiagRec untuk mendapatkan informasi kesalahan dari driver dan mempostingnya sebagai catatan diagnostik di Manajer Driver.
Mengatur bidang SQL_DIAG_ROW_NUMBER dalam catatan diagnostik ke nilai yang sesuai.
Mengatur bidang SQL_DIAG_COLUMN_NUMBER dalam catatan diagnostik ke nilai yang sesuai, jika berlaku; jika tidak, ia mengaturnya ke 0.
Mengatur nilai untuk baris dalam kesalahan dalam array status baris ke SQL_ROW_ERROR.
Setelah pustaka kursor memanggil SQLFetch beberapa kali dalam implementasi SQLFetchScroll, kesalahan atau peringatan apa pun yang dikembalikan oleh salah satu panggilan ke SQLFetch akan berada dalam catatan diagnostik dan dapat diambil dengan panggilan ke SQLGetDiagRec. Jika data dipotong saat diambil, data yang dipotong sekarang akan berada di cache pustaka kursor. Panggilan berikutnya ke SQLFetchScroll untuk menggulir ke baris dengan data terpotong akan mengembalikan data yang terpotong, dan tidak ada peringatan yang akan dinaikkan karena data diambil dari cache pustaka kursor. Untuk melacak panjang data yang dikembalikan sehingga dapat menentukan apakah data yang dikembalikan dalam buffer telah dipotong, aplikasi harus mengikat buffer panjang/indikator.
Operasi Marka Buku
Pustaka kursor mendukung panggilan SQLFetchScroll dengan FetchOrientation of SQL_FETCH_BOOKMARK. Ini juga mendukung penentuan offset dalam argumen FetchOffset yang dapat digunakan dalam operasi bookmark. Ini adalah satu-satunya operasi bookmark yang didukung pustaka kursor. Pustaka kursor tidak mendukung panggilan SQLBulkOperations.
Jika aplikasi telah mengatur atribut pernyataan SQL_ATTR_USE_BOOKMARKS dan telah terikat ke kolom bookmark, pustaka kursor menghasilkan bookmark panjang tetap dan mengembalikannya ke aplikasi. Pustaka kursor membuat dan memelihara marka buku yang digunakannya; ini tidak menggunakan marka buku yang dipertahankan di sumber data. Ketika SQLFetchScroll dipanggil untuk mengambil blok data yang telah diambil dari sumber data, SQLFetchScroll mengambil data dari cache pustaka kursor. Akibatnya, bookmark yang digunakan dalam panggilan ke SQLFetchScroll dengan FetchOrientation of SQL_FETCH_BOOKMARK harus dibuat dan dikelola oleh pustaka kursor.
Interaksi dengan Fungsi Lain
Aplikasi harus memanggil SQLFetch atau SQLFetchScroll sebelum menyiapkan atau menjalankan pernyataan pembaruan atau penghapusan yang diposisikan.