Bagikan melalui


Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC)

Topik ini berlaku untuk kelas MFC ODBC.

Catatan

Anda sekarang dapat menambahkan rekaman secara massal lebih efisien. Untuk informasi selengkapnya, lihat Recordset: Menambahkan Rekaman secara Massal (ODBC).

Catatan

Topik ini berlaku untuk objek yang berasal dari CRecordset tempat pengambilan baris massal belum diimplementasikan. Jika Anda menggunakan pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Rekam jepret dan dinaset yang dapat diperbarui memungkinkan Anda menambahkan, mengedit (memperbarui), dan menghapus rekaman. Topik ini menjelaskan:

Untuk informasi selengkapnya tentang bagaimana pembaruan dilakukan dan bagaimana pembaruan Anda muncul untuk pengguna lain, lihat Recordset: Cara Rekaman Memperbarui Rekaman (ODBC). Biasanya, saat Anda menambahkan, mengedit, atau menghapus rekaman, kumpulan rekaman segera mengubah sumber data. Anda dapat mengelompokkan grup pembaruan terkait ke dalam transaksi. Jika transaksi sedang berlangsung, pembaruan tidak menjadi final sampai Anda melakukan transaksi. Ini memungkinkan Anda untuk mengambil kembali atau mengembalikan perubahan. Untuk informasi tentang transaksi, lihat Transaksi (ODBC).

Tabel berikut ini meringkas opsi yang tersedia untuk kumpulan rekaman dengan karakteristik pembaruan yang berbeda.

Opsi Baca/Perbarui Kumpulan Rekaman

Jenis Baca Edit rekaman Menghapus rekaman Tambahkan baru (tambahkan)
Baca-saja Y N N N
Tambahkan-saja Y N N Y
Sepenuhnya dapat diperbarui Y Y Y Y

Menentukan apakah Recordset Anda dapat diperbarui

Objek recordset dapat diperbarui jika sumber data dapat diperbarui dan Anda membuka recordset sebagai dapat diperbarui. Kemampuan pembaruannya juga tergantung pada pernyataan SQL yang Anda gunakan, kemampuan driver ODBC Anda, dan apakah Pustaka Kursor ODBC berada dalam memori. Anda tidak dapat memperbarui himpunan rekaman atau sumber data baca-saja.

Untuk menentukan apakah set rekaman Anda dapat diperbarui

  1. Panggil fungsi anggota CanUpdate objek recordset.

    CanUpdate mengembalikan nilai bukan nol jika recordset dapat diperbarui.

Secara default, recordset sepenuhnya dapat diperbarui (Anda dapat melakukan AddNewoperasi , Edit, dan Delete ). Tetapi Anda juga dapat menggunakan opsi appendOnly untuk membuka recordset yang dapat diperbarui. Recordset yang dibuka dengan cara ini hanya memungkinkan penambahan rekaman baru dengan AddNew. Anda tidak dapat mengedit atau menghapus rekaman yang ada. Anda dapat menguji apakah kumpulan rekaman hanya terbuka untuk ditambahkan dengan memanggil fungsi anggota CanAppend . CanAppend mengembalikan nilai bukan nol jika recordset sepenuhnya dapat diperbarui atau terbuka hanya untuk penambahan.

Kode berikut menunjukkan bagaimana Anda dapat menggunakan CanUpdate untuk objek recordset yang disebut rsStudentSet:

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}

Perhatian

Saat Anda bersiap untuk memperbarui kumpulan rekaman dengan memanggil Update, berhati-hatilah bahwa kumpulan rekaman Anda menyertakan semua kolom yang membentuk kunci utama tabel (atau semua kolom indeks unik apa pun pada tabel). Dalam beberapa kasus, kerangka kerja hanya dapat menggunakan kolom yang dipilih di kumpulan catatan Anda untuk mengidentifikasi rekaman mana dalam tabel yang akan diperbarui. Tanpa semua kolom yang diperlukan, beberapa rekaman mungkin diperbarui dalam tabel, mungkin merusak integritas referensial tabel. Dalam hal ini, kerangka kerja melempar pengecualian saat Anda memanggil Update.

Menambahkan Rekaman ke Kumpulan Rekaman

Anda dapat menambahkan rekaman baru ke kumpulan rekaman jika fungsi anggota CanAppend-nya mengembalikan nilai bukan nol.

Untuk menambahkan rekaman baru ke kumpulan rekaman

  1. Pastikan kumpulan rekaman dapat ditambahkan.

  2. Panggil fungsi AddNew anggota objek recordset.

    AddNew menyiapkan kumpulan rekaman untuk bertindak sebagai buffer edit. Semua anggota data bidang diatur ke nilai khusus Null dan ditandai sebagai tidak berubah sehingga hanya nilai yang diubah (kotor) yang ditulis ke sumber data saat Anda memanggil Perbarui.

  3. Atur nilai anggota data bidang rekaman baru.

    Tetapkan nilai ke anggota data bidang. Yang tidak Anda tetapkan tidak ditulis ke sumber data.

  4. Panggil fungsi anggota objek Update recordset.

    Update menyelesaikan penambahan dengan menulis rekaman baru ke sumber data. Untuk informasi tentang terjadi jika Anda gagal memanggil Update, lihat Recordset: Cara Rekaman Memperbarui Rekaman (ODBC).

Untuk informasi tentang cara kerja penambahan rekaman dan tentang kapan catatan yang ditambahkan terlihat di kumpulan catatan Anda, lihat Kumpulan Catatan: Cara MenambahkanBaru, Mengedit, dan Menghapus Pekerjaan (ODBC).

Contoh berikut menunjukkan cara menambahkan rekaman baru:

if( !rsStudent.Open( ) )
    return FALSE;
if( !rsStudent.CanAppend( ) )
    return FALSE;                      // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not added; no field values were set." );
    return FALSE;
}

Tip

Untuk membatalkan AddNew atau Edit memanggil, cukup lakukan panggilan lain ke AddNew atau Edit atau panggil Move dengan parameter AFX_MOVE_REFRESH . Anggota data diatur ulang ke nilai sebelumnya dan Anda masih dalam Edit mode atau Add .

Mengedit Rekaman dalam Kumpulan Rekaman

Anda dapat mengedit rekaman yang sudah ada jika fungsi anggota CanUpdate set rekaman Anda mengembalikan nilai bukan nol.

Untuk mengedit rekaman yang sudah ada dalam kumpulan rekaman

  1. Pastikan recordset dapat diperbarui.

  2. Gulir ke rekaman yang ingin Anda perbarui.

  3. Panggil fungsi Edit anggota objek recordset.

    Edit menyiapkan kumpulan rekaman untuk bertindak sebagai buffer edit. Semua anggota data bidang ditandai sehingga kumpulan rekaman dapat mengetahui nanti apakah mereka diubah. Nilai baru untuk anggota data bidang yang diubah ditulis ke sumber data saat Anda memanggil Perbarui.

  4. Atur nilai anggota data bidang rekaman baru.

    Tetapkan nilai ke anggota data bidang. Nilai yang tidak Anda tetapkan tetap tidak berubah.

  5. Panggil fungsi anggota objek Update recordset.

    Update menyelesaikan pengeditan dengan menulis rekaman yang diubah ke sumber data. Untuk informasi tentang terjadi jika Anda gagal memanggil Update, lihat Recordset: Cara Rekaman Memperbarui Rekaman (ODBC).

Setelah Anda mengedit rekaman, rekaman yang diedit tetap menjadi rekaman saat ini.

Contoh berikut menunjukkan Edit operasi. Ini mengasumsikan pengguna telah pindah ke rekaman yang ingin diedit.

rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not updated; no field values were set." );
    return FALSE;
}

Tip

Untuk membatalkan AddNew atau Edit memanggil, cukup lakukan panggilan lain ke AddNew atau Edit atau panggil Move dengan parameter AFX_MOVE_REFRESH . Anggota data diatur ulang ke nilai sebelumnya dan Anda masih dalam Edit mode atau Add .

Menghapus Rekaman dari Kumpulan Rekaman

Anda dapat menghapus rekaman jika fungsi anggota CanUpdate kumpulan rekaman Anda mengembalikan nilai bukan nol.

Untuk menghapus rekaman

  1. Pastikan recordset dapat diperbarui.

  2. Gulir ke rekaman yang ingin Anda perbarui.

  3. Panggil fungsi Hapus anggota objek recordset.

    Delete segera menandai rekaman sebagai dihapus, baik di kumpulan rekaman maupun pada sumber data.

    Tidak seperti AddNew dan Edit, Delete tidak memiliki panggilan yang Update sesuai.

  4. Gulir ke rekaman lain.

    Catatan

    Saat berpindah melalui kumpulan rekaman, rekaman yang dihapus mungkin tidak dilewati. Untuk informasi selengkapnya, lihat fungsi anggota IsDeleted .

Contoh berikut menunjukkan Delete operasi. Ini mengasumsikan bahwa pengguna telah pindah ke rekaman yang ingin dihapus pengguna. Setelah Delete dipanggil, penting untuk pindah ke rekaman baru.

rsStudent.Delete( );
rsStudent.MoveNext( );

Untuk informasi selengkapnya tentang efek AddNewfungsi anggota , , Editdan Delete , lihat Recordset: Cara Rekaman Memperbarui Rekaman (ODBC).

Baca juga

Recordset (ODBC)
Recordset: Mengunci Rekaman (ODBC)