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 dan kemudian mengambil baris hingga kursor mencapai baris yang diperlukan. Kemungkinan lain adalah membaca tataan hasil, menyimpannya secara lokal, dan mengimplementasikan pengguliran dalam aplikasi. Kedua kemungkinan bekerja dengan baik hanya dengan tataan hasil kecil, dan kemungkinan terakhir sulit diimplementasikan. Solusi yang lebih baik adalah menggunakan kursor yang dapat digulirkan, yang dapat bergerak mundur dan maju dalam tataan hasil.

Kursor yang dapat digulirkan umumnya digunakan dalam aplikasi berbasis layar modern di mana pengguna menggulir bolak-balik melalui data. Namun, aplikasi harus menggunakan kursor yang dapat digulirkan hanya ketika kursor hanya maju 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 hanya maju: Haruskah kursor yang dapat digulir mendeteksi perubahan yang dibuat pada baris yang sebelumnya diambil? 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 diperiksa untuk melihat apakah baris cocok dengan kriteria tersebut, juga tidak menyatakan apakah baris harus berisi data yang sama setiap kali baris 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 mencakup kebutuhan aplikasi yang berbeda, ODBC mendefinisikan empat jenis kursor yang dapat digulirkan. Kursor ini bervariasi baik dalam pengeluaran maupun 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 kembali 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.