Kursor yang Dapat Digulir

Dalam aplikasi berbasis layar modern, pengguna menggulir mundur dan maju melalui data. Untuk aplikasi tersebut, kembali ke baris yang diambil sebelumnya adalah masalah. Salah satu kemungkinannya adalah menutup dan membuka kembali kursor lalu mengambil baris hingga kursor mencapai baris yang diperlukan. Kemungkinan lain adalah membaca kumpulan hasil, menyimpannya secara lokal, dan mengimplementasikan pengguliran dalam aplikasi. Kedua kemungkinan bekerja dengan baik hanya dengan kumpulan hasil kecil, dan kemungkinan terakhir sulit diimplementasikan. Solusi yang lebih baik adalah menggunakan kursor yang dapat digulir, yang dapat bergerak mundur dan maju dalam tataan hasil.

Kursor yang dapat digulir umumnya digunakan dalam aplikasi berbasis layar modern di mana pengguna menggulir bolak-balik melalui data. Namun, aplikasi harus menggunakan kursor yang dapat digulir hanya ketika kursor forward-only tidak akan melakukan pekerjaan, karena kursor yang dapat digulir umumnya lebih mahal daripada kursor hanya maju.

Kemampuan untuk bergerak mundur menimbulkan pertanyaan yang tidak berlaku untuk kursor terusan saja: Haruskah kursor yang dapat digulir mendeteksi perubahan yang dibuat pada baris yang diambil sebelumnya? Artinya, haruskah mendeteksi baris yang diperbarui, dihapus, dan baru disisipkan?

Pertanyaan ini muncul karena definisi kumpulan hasil - kumpulan baris yang cocok dengan kriteria tertentu - tidak menyatakan kapan baris dicentang untuk melihat apakah baris cocok dengan kriteria tersebut, juga tidak menyatakan apakah baris harus berisi data yang sama setiap kali diambil. Kelalaian sebelumnya memungkinkan kursor yang dapat digulir untuk mendeteksi apakah baris telah disisipkan atau dihapus, sementara yang terakhir memungkinkan mereka mendeteksi data yang diperbarui.

Kemampuan untuk mendeteksi perubahan terkadang berguna, terkadang tidak. Misalnya, aplikasi akuntansi memerlukan kursor yang mengabaikan semua perubahan; menyeimbangkan buku tidak mungkin jika kursor menunjukkan perubahan terbaru. Di sisi lain, sistem reservasi maskapai memerlukan kursor yang menunjukkan perubahan terbaru pada data; tanpa kursor seperti itu, kursor harus terus mengkueri ulang database untuk menunjukkan ketersediaan penerbangan terbaru.

Untuk memenuhi kebutuhan aplikasi yang berbeda, ODBC mendefinisikan empat jenis kursor yang dapat digulir. Kursor ini bervariasi baik dalam pengeluaran maupun dalam kemampuannya untuk mendeteksi perubahan pada tataan hasil. Perhatikan bahwa jika kursor yang dapat digulir dapat mendeteksi perubahan pada baris, kursor hanya dapat mendeteksinya saat mencoba mengambil ulang baris tersebut; tidak ada cara bagi sumber data untuk memberi tahu kursor perubahan pada baris yang saat ini diambil. Perhatikan juga bahwa visibilitas perubahan juga dikendalikan oleh tingkat isolasi transaksi; untuk informasi selengkapnya, lihat Isolasi Transaksi.

Bagian ini berisi topik berikut.