Bagikan melalui


Pertukaran Bidang Rekaman: Cara Kerja RFX

Topik ini menjelaskan proses RFX. Ini adalah topik lanjutan yang mencakup:

Catatan

Topik ini berlaku untuk kelas yang berasal dari CRecordset tempat pengambilan baris massal belum diimplementasikan. Jika Anda menggunakan pengambilan baris massal, pertukaran bidang rekaman massal (RFX Massal) diimplementasikan. RFX massal mirip dengan RFX. Untuk memahami perbedaannya, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

RFX dan Recordset

Anggota data bidang objek rekaman, yang diambil bersama-sama, merupakan buffer edit yang menyimpan kolom yang dipilih dari satu rekaman. Saat kumpulan rekaman pertama kali dibuka dan akan membaca rekaman pertama, RFX mengikat (mengaitkan) setiap kolom yang dipilih ke alamat anggota data bidang yang sesuai. Saat recordset memperbarui rekaman, RFX memanggil fungsi ODBC API untuk mengirim pernyataan SQL UPDATE atau INSERT ke driver. RFX menggunakan pengetahuannya tentang anggota data bidang untuk menentukan kolom yang akan ditulis.

Kerangka kerja mencadangkan buffer edit pada tahap tertentu sehingga dapat memulihkan kontennya jika perlu. RFX mencadangkan buffer edit sebelum menambahkan rekaman baru dan sebelum mengedit rekaman yang sudah ada. Ini memulihkan buffer edit dalam beberapa kasus, misalnya, setelah Update panggilan mengikuti AddNew. Buffer edit tidak dipulihkan jika Anda meninggalkan buffer edit yang baru diubah oleh, misalnya, pindah ke rekaman lain sebelum memanggil Update.

Selain bertukar data antara sumber data dan anggota data bidang himpunan rekaman, RFX mengelola parameter pengikatan. Saat kumpulan rekaman dibuka, setiap anggota data parameter terikat dalam urutan tempat penampung "?" dalam pernyataan SQL yang CRecordset::Open dibangun. Untuk informasi selengkapnya, lihat Recordset: Parameterizing a Recordset (ODBC).

Penimpaan DoFieldExchange kelas recordset Anda melakukan semua pekerjaan, memindahkan data ke kedua arah. Seperti pertukaran data dialog (DDX), RFX memerlukan informasi tentang anggota data kelas Anda. Wizard menyediakan informasi yang diperlukan dengan menulis implementasi DoFieldExchange khusus recordset untuk Anda, berdasarkan nama anggota data bidang dan jenis data yang Anda tentukan dengan wizard.

Proses Pertukaran Bidang Rekaman

Bagian ini menjelaskan urutan peristiwa RFX sebagai objek recordset dibuka dan saat Anda menambahkan, memperbarui, dan menghapus rekaman. Urutan tabel Operasi RFX Selama Recordset Terbuka dan Urutan tabel Operasi RFX Selama Pengguliran dalam topik ini menunjukkan proses saat RFX memproses Move perintah dalam himpunan catatan dan karena RFX mengelola pembaruan. Selama proses ini, DoFieldExchange dipanggil untuk melakukan banyak operasi yang berbeda. Anggota m_nOperationdata objek CFieldExchange menentukan operasi mana yang diminta. Anda mungkin merasa berguna untuk membaca Recordset: Bagaimana Recordsets Select Records (ODBC) dan Recordset: Cara Recordsets Update Records (ODBC) sebelum Anda membaca materi ini.

RFX: Pengikatan Awal Kolom dan Parameter

Aktivitas RFX berikut terjadi, dalam urutan yang diperlihatkan, saat Anda memanggil fungsi Anggota terbuka objek rekaman:

  • Jika kumpulan rekaman memiliki anggota data parameter, kerangka kerja memanggil DoFieldExchange untuk mengikat parameter ke tempat penampung parameter dalam string pernyataan SQL himpunan rekaman. Representasi dependen jenis data dari nilai parameter digunakan untuk setiap tempat penampung yang ditemukan dalam pernyataan SELECT . Ini terjadi setelah pernyataan SQL disiapkan tetapi sebelum dijalankan. Untuk informasi tentang persiapan pernyataan, lihat ::SQLPrepare fungsi di Referensi Programmer ODBC.

  • Kerangka kerja memanggil DoFieldExchange untuk kedua kalinya untuk mengikat nilai kolom yang dipilih ke anggota data bidang terkait dalam kumpulan rekaman. Ini menetapkan objek recordset sebagai buffer edit yang berisi kolom rekaman pertama.

  • Kumpulan rekaman menjalankan pernyataan SQL dan sumber data memilih rekaman pertama. Kolom rekaman dimuat ke dalam anggota data bidang himpunan rekaman.

Tabel berikut ini memperlihatkan urutan operasi RFX saat Anda membuka kumpulan rekaman.

Urutan Operasi RFX Selama Recordset Terbuka

Operasi Anda Operasi DoFieldExchange Operasi Database/SQL
1. Buka recordset.
2. Buat pernyataan SQL.
3. Kirim SQL.
4. Mengikat anggota data parameter.
5. Ikat anggota data bidang ke kolom.
6. ODBC melakukan pemindahan dan pengisian data.
7. Perbaiki data untuk C++.

Kumpulan catatan menggunakan eksekusi ODBC yang disiapkan untuk memungkinkan kueri ulang cepat dengan pernyataan SQL yang sama. Untuk informasi selengkapnya tentang eksekusi yang disiapkan, lihat Referensi Programmer ODBC.

RFX: Menggulir

Saat Anda menggulir dari satu rekaman ke rekaman lain, kerangka kerja memanggil DoFieldExchange untuk mengganti nilai yang sebelumnya disimpan di anggota data bidang dengan nilai untuk rekaman baru.

Tabel berikut ini memperlihatkan urutan operasi RFX saat pengguna berpindah dari rekaman ke rekaman.

Urutan Operasi RFX Selama Pengguliran

Operasi Anda Operasi DoFieldExchange Operasi Database/SQL
1. Panggil MoveNext atau salah satu fungsi Pindahkan lainnya.
2. ODBC melakukan pemindahan dan pengisian data.
3. Perbaiki data untuk C++.

RFX: Menambahkan Rekaman Baru dan Mengedit Rekaman yang Sudah Ada

Jika Anda menambahkan rekaman baru, kumpulan rekaman beroperasi sebagai buffer edit untuk membangun konten rekaman baru. Seperti halnya menambahkan rekaman, mengedit rekaman melibatkan perubahan nilai anggota data bidang himpunan rekaman. Dari perspektif RFX, urutannya adalah sebagai berikut:

  1. Panggilan Anda ke fungsi TambahkanBaru atau Edit anggota set rekaman menyebabkan RFX menyimpan buffer edit saat ini sehingga dapat dipulihkan nanti.

  2. AddNew atau Edit menyiapkan bidang dalam buffer edit sehingga RFX dapat mendeteksi anggota data bidang yang diubah.

    Karena rekaman baru tidak memiliki nilai sebelumnya untuk membandingkan yang baru dengan, AddNew mengatur nilai setiap anggota data bidang ke nilai PSEUDO_NULL. Kemudian, ketika Anda memanggil Update, RFX membandingkan nilai setiap anggota data dengan nilai PSEUDO_NULL. Jika ada perbedaan, anggota data telah diatur. (PSEUDO_NULL tidak sama dengan kolom rekaman dengan nilai benar Null atau sama dengan C++ NULL.)

    Update Tidak seperti panggilan untuk AddNew, Update panggilan untuk Edit membandingkan nilai yang diperbarui dengan nilai yang disimpan sebelumnya daripada menggunakan PSEUDO_NULL. Perbedaannya adalah bahwa tidak memiliki nilai yang AddNew disimpan sebelumnya untuk perbandingan.

  3. Anda langsung mengatur nilai anggota data bidang yang nilainya ingin Anda edit atau yang ingin Anda isi untuk rekaman baru. Ini dapat mencakup panggilan SetFieldNull.

  4. Panggilan Anda untuk Memperbarui pemeriksaan untuk anggota data bidang yang diubah, seperti yang dijelaskan di langkah 2 (lihat urutan tabel Operasi RFX Selama Pengguliran). Jika tidak ada yang berubah, Update mengembalikan 0. Jika beberapa anggota data bidang telah berubah, Update siapkan dan jalankan pernyataan SQL INSERT yang berisi nilai untuk semua bidang yang diperbarui dalam rekaman.

  5. Untuk AddNew, Update menyimpulkan dengan memulihkan nilai rekaman yang disimpan sebelumnya yang saat ini sebelum AddNew panggilan. Untuk Edit, nilai baru yang diedit tetap ada.

Tabel berikut ini memperlihatkan urutan operasi RFX saat Anda menambahkan rekaman baru atau mengedit rekaman yang sudah ada.

Urutan Operasi RFX Selama TambahkanBaru dan Edit

Operasi Anda Operasi DoFieldExchange Operasi Database/SQL
1. Panggil AddNew atau Edit.
2. Cadangkan buffer edit.
3. Untuk AddNew, tandai anggota data bidang sebagai "bersih" dan Null.
4. Tetapkan nilai untuk anggota data bidang kumpulan rekaman.
5. Hubungi Update.
6. Periksa bidang yang diubah.
7. Buat pernyataan SQL INSERT untuk AddNew atau pernyataan UPDATE untuk Edit.
8. Kirim SQL.
9. Untuk AddNew, pulihkan buffer edit ke konten yang dicadangkan. Untuk Edit, hapus cadangan.

RFX: Menghapus Rekaman yang Ada

Saat Anda menghapus rekaman, RFX mengatur semua bidang ke NULL sebagai pengingat bahwa rekaman dihapus dan Anda harus memindahkannya. Anda tidak memerlukan informasi urutan RFX lainnya.

Baca juga

Pertukaran Bidang Rekaman (RFX)
Pemakaian ODBC MFC
Makro, Fungsi Global, dan Variabel Global
Kelas CFieldExchange
CRecordset::D oFieldExchange