Memproses Pernyataan Pembaruan dan Penghapusan yang Diposisikan

Important

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 fungsi kursor driver.

Pustaka kursor mendukung pernyataan pembaruan dan hapus yang diposisikan dengan mengganti klausa WHERE CURRENT OF dalam pernyataan tersebut dengan klausa WHERE yang menghitung nilai yang disimpan dalam cachenya untuk setiap kolom terikat. Perpustakaan kursor meneruskan pernyataan dan DELETE pernyataan yang baru dibuat UPDATE ke driver untuk dieksekusi. Untuk pernyataan pembaruan yang diposisikan, pustaka kursor kemudian memperbarui cachenya dari nilai dalam buffer kumpulan baris dan mengatur nilai yang sesuai dalam array status baris ke SQL_ROW_UPDATED. Untuk pernyataan hapus yang diposisikan, ini mengatur nilai yang sesuai dalam array status baris ke SQL_ROW_DELETED.

Caution

Klausa WHERE yang dibangun oleh pustaka kursor untuk mengidentifikasi baris saat ini dapat gagal mengidentifikasi baris apa pun, mengidentifikasi baris yang berbeda, atau mengidentifikasi lebih dari satu baris. Untuk informasi selengkapnya, lihat Membangun Pernyataan yang Dicari, nanti di lampiran ini.

Pernyataan pembaruan dan penghapusan yang diposisikan tunduk pada batasan berikut:

  • Pernyataan pembaruan dan hapus yang diposisikan hanya dapat digunakan dalam kasus berikut: ketika pernyataan SELECT menghasilkan kumpulan hasil; ketika pernyataan SELECT tidak berisi gabungan, klausa UNION , atau klausa GROUP BY ; dan ketika kolom apa pun yang menggunakan alias atau ekspresi dalam daftar pilih tidak terikat dengan SQLBindCol.

  • Jika aplikasi menyiapkan pernyataan pembaruan atau hapus yang diposisikan, aplikasi harus melakukannya setelah memanggil SQLFetch atau SQLFetchScroll. Meskipun pustaka kursor mengirimkan pernyataan ke driver untuk persiapan, ia menutup pernyataan dan menjalankannya secara langsung saat aplikasi memanggil SQLExecute.

  • Jika driver hanya mendukung satu pernyataan aktif, pustaka kursor mengambil sisa kumpulan hasil dan kemudian mengambil ulang kumpulan baris saat ini dari cachenya sebelum menjalankan pernyataan pembaruan atau hapus yang diposisikan. Jika aplikasi kemudian memanggil fungsi yang mengembalikan metadata dalam kumpulan hasil (misalnya, SQLNumResultCols atau SQLDescribeCol), pustaka kursor mengembalikan kesalahan.

  • Jika pernyataan pembaruan atau penghapusan yang diposisikan dilakukan pada kolom tabel yang menyertakan kolom stempel waktu yang diperbarui secara otomatis setiap kali pembaruan dilakukan, semua pernyataan pembaruan atau penghapusan yang diposisikan berikutnya akan gagal jika kolom stempel waktu terikat. Hal ini terjadi karena pernyataan pembaruan atau hapus yang dicari yang dibuat pustaka kursor tidak akan secara akurat mengidentifikasi baris yang akan diperbarui. Nilai dalam pernyataan yang dicari untuk kolom stempel waktu tidak akan cocok dengan nilai kolom stempel waktu yang diperbarui secara otomatis.