Pengaruh Transaksi terhadap Kursor dan Pernyataan yang Disiapkan

Menerapkan atau menggulung balik transaksi memiliki salah satu efek berikut pada kursor dan paket akses:

  • Semua kursor ditutup, dan paket akses untuk pernyataan yang disiapkan pada koneksi tersebut dihapus, atau

  • Semua kursor ditutup, dan paket akses untuk pernyataan yang disiapkan pada koneksi tersebut tetap utuh, atau

  • Semua kursor tetap terbuka, dan paket akses untuk pernyataan yang disiapkan pada koneksi tersebut tetap utuh.

Misalnya, sumber data menunjukkan perilaku pertama dalam daftar ini, yang paling membatasi perilaku ini. Sekarang misalkan aplikasi melakukan hal berikut:

  1. Mengatur mode penerapan ke penerapan manual.

  2. Membuat kumpulan hasil pesanan penjualan pada pernyataan 1.

  3. Membuat kumpulan hasil baris dalam pesanan penjualan pada pernyataan 2, saat pengguna menyoroti pesanan tersebut.

  4. Memanggil SQLExecute untuk menjalankan pernyataan pembaruan yang diposisikan yang telah disiapkan pada pernyataan 3, ketika pengguna memperbarui baris.

  5. Memanggil SQLEndTran untuk menerapkan pernyataan pembaruan yang diposisikan.

Karena perilaku sumber data, panggilan ke SQLEndTran di langkah 5 menyebabkannya menutup kursor pada pernyataan 1 dan 2 dan untuk menghapus rencana akses pada semua pernyataan. Aplikasi harus menjalankan kembali pernyataan 1 dan 2 untuk membuat ulang kumpulan hasil dan mereprepare pernyataan pada pernyataan 3.

Dalam mode penerapan otomatis, fungsi selain SQLEndTran melakukan transaksi:

  • SQLExecute atau SQLExecDirect Dalam contoh sebelumnya, panggilan ke SQLExecute di langkah 4 melakukan transaksi. Hal ini menyebabkan sumber data menutup kursor pada pernyataan 1 dan 2 dan menghapus paket akses pada semua pernyataan pada koneksi tersebut.

  • SQLBulkOperations atau SQLSetPos Dalam contoh sebelumnya, misalkan di langkah 4 aplikasi memanggil SQLSetPos dengan opsi SQL_UPDATE pada pernyataan 2, alih-alih menjalankan pernyataan pembaruan yang diposisikan pada pernyataan 3. Ini melakukan transaksi dan menyebabkan sumber data menutup kursor pada pernyataan 1 dan 2, dan membuang semua paket akses pada koneksi tersebut.

  • SQLCloseCursor Dalam contoh sebelumnya, misalkan ketika pengguna menyoroti pesanan penjualan yang berbeda, aplikasi memanggil SQLCloseCursor pada pernyataan 2 sebelum membuat hasil baris untuk pesanan penjualan baru. Panggilan ke SQLCloseCursor menerapkan pernyataan SELECT yang membuat kumpulan hasil baris dan menyebabkan sumber data menutup kursor pada pernyataan 1, lalu membuang semua rencana akses pada koneksi tersebut.

Aplikasi, terutama aplikasi berbasis layar di mana pengguna menggulir di sekitar tataan hasil dan memperbarui atau menghapus baris, harus berhati-hati untuk mengodekan perilaku ini.

Untuk menentukan perilaku sumber data saat transaksi dilakukan atau digulung balik, aplikasi memanggil SQLGetInfo dengan opsi SQL_CURSOR_COMMIT_BEHAVIOR dan SQL_CURSOR_ROLLBACK_BEHAVIOR.