Pengguliran Relatif dan Absolut
Sebagian besar opsi gulir di SQLFetchScroll menempatkan kursor relatif terhadap posisi saat ini atau ke posisi absolut. SQLFetchScroll mendukung pengambilan kumpulan baris berikutnya, sebelumnya, pertama, dan terakhir, serta pengambilan relatif (ambil baris n set baris dari awal set baris saat ini) dan pengambilan absolut (ambil set baris mulai dari baris n). Jika n negatif dalam pengambilan absolut, baris dihitung dari akhir kumpulan hasil. Dengan demikian, pengambilan absolut baris -1 berarti mengambil set baris yang dimulai dengan baris terakhir dalam kumpulan hasil.
Kursor dinamis mendeteksi baris yang dimasukkan ke dalam dan dihapus dari kumpulan hasil, sehingga tidak ada cara mudah bagi kursor dinamis untuk mengambil baris pada angka tertentu selain membaca dari awal kumpulan hasil, yang kemungkinan akan lambat. Selain itu, pengambilan absolut tidak terlalu berguna dalam kursor dinamis karena nomor baris berubah saat baris dimasukkan dan dihapus; oleh karena itu, secara berturut-turut mengambil nomor baris yang sama dapat menghasilkan baris yang berbeda.
Aplikasi yang menggunakan SQLFetchScroll hanya untuk kemampuan kursor bloknya, seperti laporan, kemungkinan akan melewati hasil yang ditetapkan satu kali, hanya menggunakan opsi untuk mengambil set baris berikutnya. Aplikasi berbasis layar, di sisi lain, dapat memanfaatkan semua kemampuan SQLFetchScroll. Jika aplikasi mengatur ukuran set baris ke jumlah baris yang ditampilkan di layar dan mengikat buffer layar ke kumpulan hasil, aplikasi dapat menerjemahkan operasi bilah gulir langsung ke panggilan ke SQLFetchScroll.
Operasi bilah gulir | Opsi pengguliran SQLFetchScroll |
---|---|
Halaman atas | SQL_FETCH_PRIOR |
Halaman ke bawah | SQL_FETCH_NEXT |
Baris ke atas | SQL_FETCH_RELATIVE dengan FetchOffset sama dengan -1 |
Baris ke bawah | SQL_FETCH_RELATIVE dengan FetchOffset sama dengan 1 |
Kotak gulir di atas | SQL_FETCH_FIRST |
Kotak gulir di bagian bawah | SQL_FETCH_LAST |
Posisi kotak gulir acak | SQL_FETCH_ABSOLUTE |
Aplikasi tersebut juga perlu memposisikan kotak gulir setelah operasi pengguliran, yang memerlukan nomor baris saat ini dan jumlah baris. Untuk nomor baris saat ini, aplikasi dapat melacak nomor baris saat ini atau memanggil SQLGetStmtAttr dengan atribut SQL_ATTR_ROW_NUMBER untuk mengambilnya.
Jumlah baris dalam kursor, yang merupakan ukuran kumpulan hasil, tersedia sebagai bidang SQL_DIAG_CURSOR_ROW_COUNT header diagnostik. Nilai dalam bidang ini ditentukan hanya setelah SQLExecute, SQLExecDirect, atau SQLMoreResult telah dipanggil. Jumlah ini dapat berupa perkiraan jumlah atau jumlah yang tepat, tergantung pada kemampuan driver. Dukungan driver dapat ditentukan dengan memanggil SQLGetInfo dengan jenis informasi atribut kursor dan memeriksa apakah bit SQL_CA2_CRC_APPROXIMATE atau SQL_CA2_CRC_EXACT dikembalikan untuk jenis kursor.
Jumlah baris yang tepat tidak pernah didukung untuk kursor dinamis. Untuk jenis kursor lainnya, driver dapat mendukung jumlah baris yang tepat atau perkiraan, tetapi tidak keduanya. Jika driver tidak mendukung jumlah baris yang tepat atau perkiraan untuk jenis kursor tertentu, bidang SQL_DIAG_CURSOR_ROW_COUNT berisi jumlah baris yang telah diambil sejauh ini. Terlepas dari apa yang didukung driver, SQLFetchScroll dengan Operasi SQL_FETCH_LAST akan menyebabkan bidang SQL_DIAG_CURSOR_ROW_COUNT berisi jumlah baris yang tepat.