Share via


CRecordset kelas

Mewakili sekumpulan rekaman yang dipilih dari sumber data.

Sintaks

class CRecordset : public CObject

Anggota

Konstruktor Publik

Nama Deskripsi
CRecordset::CRecordset Membuat CRecordset objek. Kelas turunan Anda harus menyediakan konstruktor yang memanggil yang satu ini.

Metode Publik

Nama Deskripsi
CRecordset::AddNew Bersiap untuk menambahkan rekaman baru. Panggil Update untuk menyelesaikan penambahan.
CRecordset::CanAppend Mengembalikan bukan nol jika rekaman baru dapat ditambahkan ke kumpulan rekaman melalui AddNew fungsi anggota.
CRecordset::CanBookmark Mengembalikan bukan nol jika kumpulan rekaman mendukung marka buku.
CRecordset::Cancel Membatalkan operasi asinkron atau proses dari utas kedua.
CRecordset::CancelUpdate Membatalkan pembaruan yang tertunda karena operasi AddNew atau Edit .
CRecordset::CanRestart Mengembalikan nonzero jika Requery dapat dipanggil untuk menjalankan kueri kumpulan rekaman lagi.
CRecordset::CanScroll Mengembalikan nonzero jika Anda bisa menggulir rekaman.
CRecordset::CanTransact Mengembalikan nonzero jika sumber data mendukung transaksi.
CRecordset::CanUpdate Mengembalikan bukan nol jika kumpulan rekaman dapat diperbarui (Anda dapat menambahkan, memperbarui, atau menghapus rekaman).
CRecordset::CheckRowsetError Dipanggil untuk menangani kesalahan yang dihasilkan selama pengambilan rekaman.
CRecordset::Close Menutup kumpulan rekaman dan ODBC HSTMT yang terkait dengannya.
CRecordset::Delete Menghapus rekaman saat ini dari kumpulan rekaman. Anda harus secara eksplisit menggulir ke rekaman lain setelah penghapusan.
CRecordset::DoBulkFieldExchange Dipanggil untuk bertukar baris data massal dari sumber data ke kumpulan rekaman. Menerapkan pertukaran bidang rekaman massal (RFX Massal).
CRecordset::DoFieldExchange Dipanggil untuk bertukar data (di kedua arah) antara anggota data bidang dari himpunan rekaman dan rekaman terkait pada sumber data. Menerapkan pertukaran bidang rekaman (RFX).
CRecordset::Edit Bersiap untuk perubahan pada rekaman saat ini. Panggil Update untuk menyelesaikan pengeditan.
CRecordset::FlushResultSet Mengembalikan nonzero jika ada tataan hasil lain yang akan diambil, saat menggunakan kueri yang telah ditentukan sebelumnya.
CRecordset::GetBookmark Menetapkan nilai bookmark rekaman ke objek parameter.
CRecordset::GetDefaultConnect Dipanggil untuk mendapatkan string koneksi default.
CRecordset::GetDefaultSQL Dipanggil untuk mendapatkan string SQL default untuk dijalankan.
CRecordset::GetFieldValue Mengembalikan nilai bidang dalam kumpulan rekaman.
CRecordset::GetODBCFieldCount Mengembalikan jumlah bidang dalam kumpulan rekaman.
CRecordset::GetODBCFieldInfo Mengembalikan jenis informasi tertentu tentang bidang dalam kumpulan rekaman.
CRecordset::GetRecordCount Mengembalikan jumlah rekaman dalam kumpulan rekaman.
CRecordset::GetRowsetSize Mengembalikan jumlah rekaman yang ingin Anda ambil selama satu pengambilan.
CRecordset::GetRowsFetched Mengembalikan jumlah baris aktual yang diambil selama pengambilan.
CRecordset::GetRowStatus Mengembalikan status baris setelah pengambilan.
CRecordset::GetSQL Mendapatkan string SQL yang digunakan untuk memilih rekaman untuk kumpulan rekaman.
CRecordset::GetStatus Mendapatkan status kumpulan rekaman: indeks rekaman saat ini dan apakah jumlah akhir rekaman telah diperoleh.
CRecordset::GetTableName Mendapatkan nama tabel yang menjadi dasar himpunan rekaman.
CRecordset::IsBOF Mengembalikan bukan nol jika kumpulan rekaman telah diposisikan sebelum rekaman pertama. Tidak ada rekaman saat ini.
CRecordset::IsDeleted Mengembalikan bukan nol jika kumpulan rekaman diposisikan pada rekaman yang dihapus.
CRecordset::IsEOF Mengembalikan bukan nol jika kumpulan rekaman telah diposisikan setelah rekaman terakhir. Tidak ada rekaman saat ini.
CRecordset::IsFieldDirty Mengembalikan bukan nol jika bidang yang ditentukan dalam rekaman saat ini telah diubah.
CRecordset::IsFieldNull Mengembalikan bukan nol jika bidang yang ditentukan dalam rekaman saat ini null (tidak memiliki nilai).
CRecordset::IsFieldNullable Mengembalikan bukan nol jika bidang yang ditentukan dalam rekaman saat ini dapat diatur ke null (tidak memiliki nilai).
CRecordset::IsOpen Mengembalikan nonzero jika Open telah dipanggil sebelumnya.
CRecordset::Move Memposisikan kumpulan rekaman ke jumlah rekaman tertentu dari rekaman saat ini ke kedua arah.
CRecordset::MoveFirst Memposisikan rekaman saat ini pada rekaman pertama dalam kumpulan rekaman. Uji untuk IsBOF pertama kalinya.
CRecordset::MoveLast Memposisikan rekaman saat ini pada rekaman terakhir atau pada set baris terakhir. Uji untuk IsEOF pertama kalinya.
CRecordset::MoveNext Memposisikan rekaman saat ini pada rekaman berikutnya atau pada set baris berikutnya. Uji untuk IsEOF pertama kalinya.
CRecordset::MovePrev Memposisikan rekaman saat ini pada rekaman sebelumnya atau pada set baris sebelumnya. Uji untuk IsBOF pertama kalinya.
CRecordset::OnSetOptions Dipanggil untuk mengatur opsi (digunakan pada pilihan) untuk pernyataan ODBC yang ditentukan.
CRecordset::OnSetUpdateOptions Dipanggil untuk mengatur opsi (digunakan pada pembaruan) untuk pernyataan ODBC yang ditentukan.
CRecordset::Open Membuka kumpulan rekaman dengan mengambil tabel atau melakukan kueri yang diwakili oleh kumpulan rekaman.
CRecordset::RefreshRowset Menyegarkan data dan status baris yang ditentukan.
CRecordset::Requery Menjalankan kueri kumpulan rekaman lagi untuk merefresh rekaman yang dipilih.
CRecordset::SetAbsolutePosition Memposisikan kumpulan rekaman pada rekaman yang sesuai dengan nomor rekaman yang ditentukan.
CRecordset::SetBookmark Memposisikan kumpulan rekaman pada rekaman yang ditentukan oleh marka buku.
CRecordset::SetFieldDirty Menandai bidang yang ditentukan dalam rekaman saat ini sebagai diubah.
CRecordset::SetFieldNull Mengatur nilai bidang yang ditentukan dalam rekaman saat ini menjadi null (tidak memiliki nilai).
CRecordset::SetLockingMode Mengatur mode penguncian ke penguncian "optimis" (default) atau penguncian "pesimis". Menentukan bagaimana rekaman dikunci untuk pembaruan.
CRecordset::SetParamNull Mengatur parameter yang ditentukan ke null (tidak memiliki nilai).
CRecordset::SetRowsetCursorPosition Memposisikan kursor pada baris yang ditentukan dalam set baris.
CRecordset::SetRowsetSize Menentukan jumlah rekaman yang ingin Anda ambil selama pengambilan.
CRecordset::Update AddNew Menyelesaikan operasi atau Edit dengan menyimpan data baru atau yang diedit pada sumber data.

Anggota data publik

Nama Deskripsi
CRecordset::m_hstmt Berisi handel pernyataan ODBC untuk kumpulan rekaman. Ketik HSTMT.
CRecordset::m_nFields Berisi jumlah anggota data bidang dalam kumpulan rekaman. Ketik UINT.
CRecordset::m_nParams Berisi jumlah anggota data parameter dalam kumpulan rekaman. Ketik UINT.
CRecordset::m_pDatabase Berisi penunjuk ke CDatabase objek tempat kumpulan rekaman tersambung ke sumber data.
CRecordset::m_strFilter CString Berisi yang menentukan klausa Bahasa Permintaan Terstruktur (SQLWHERE). Digunakan sebagai filter untuk memilih hanya rekaman yang memenuhi kriteria tertentu.
CRecordset::m_strSort CString Berisi yang menentukan klausa SQLORDER BY. Digunakan untuk mengontrol bagaimana rekaman diurutkan.

Keterangan

Dikenal sebagai objek "recordsets", CRecordset biasanya digunakan dalam dua bentuk: dinaset dan rekam jepret. Dinaset tetap disinkronkan dengan pembaruan data yang dibuat oleh pengguna lain. Rekam jepret adalah tampilan statis data. Setiap formulir mewakili sekumpulan rekaman yang diperbaiki pada saat kumpulan rekaman dibuka. Saat Anda menggulir ke rekaman dalam dynaset, itu mencerminkan perubahan yang dilakukan pada rekaman, baik oleh pengguna lain atau oleh kumpulan rekaman lain di aplikasi Anda.

Catatan

Jika Anda bekerja dengan kelas Objek Akses Data (DAO) daripada kelas Open Database Koneksi ivity (ODBC), gunakan kelas CDaoRecordset sebagai gantinya. Untuk informasi selengkapnya, lihat Gambaran Umum: Pemrograman Database.

Untuk bekerja dengan salah satu jenis recordset, Anda biasanya mendapatkan kelas recordset khusus aplikasi dari CRecordset. Kumpulan rekaman memilih rekaman dari sumber data, lalu Anda bisa:

  • Gulir rekaman.

  • Perbarui rekaman dan tentukan mode penguncian.

  • Filter kumpulan rekaman untuk membatasi rekaman mana yang dipilihnya dari yang tersedia di sumber data.

  • Urutkan kumpulan rekaman.

  • Parameterisasi kumpulan rekaman untuk menyesuaikan pilihannya dengan informasi yang tidak diketahui hingga durasi.

Untuk menggunakan kelas Anda, buka database dan buat objek recordset, teruskan konstruktor penunjuk ke objek Anda CDatabase . Kemudian panggil fungsi anggota kumpulan rekaman Open , di mana Anda dapat menentukan apakah objek tersebut adalah dynaset atau rekam jepret. Open Panggilan memilih data dari sumber data. Setelah objek recordset dibuka, gunakan fungsi anggota dan anggota datanya untuk menggulir rekaman dan mengoperasikannya. Operasi yang tersedia bergantung pada apakah objek adalah dinaset atau rekam jepret, baik itu yang dapat diperbarui atau baca-saja (ini tergantung pada kemampuan sumber data Open Database Koneksi ivity (ODBC), dan apakah Anda telah menerapkan pengambilan baris massal. Untuk menyegarkan rekaman yang mungkin telah diubah atau ditambahkan sejak Open panggilan, panggil fungsi anggota objek Requery . Panggil fungsi anggota objek Close dan hancurkan objek ketika Anda selesai dengannya.

Di kelas turunan CRecordset , pertukaran bidang rekaman (RFX) atau pertukaran bidang rekaman massal (RFX Massal) digunakan untuk mendukung pembacaan dan pembaruan bidang rekaman.

Untuk informasi selengkapnya tentang kumpulan rekaman dan pertukaran bidang rekaman, lihat artikel Gambaran Umum: Pemrograman Database, Himpunan Catatan (ODBC), Himpunan Catatan: Mengambil Rekaman secara Massal (ODBC), dan Pertukaran Bidang Rekaman (RFX). Untuk fokus pada dinaset dan rekam jepret, lihat artikel Dynaset dan Snapshot.

Hierarki Warisan

CObject

CRecordset

Persyaratan

Header:afxdb.h

CRecordset::AddNew

Bersiap untuk menambahkan rekaman baru ke tabel.

virtual void AddNew();

Keterangan

Anda harus memanggil Requery fungsi anggota untuk melihat rekaman yang baru ditambahkan. Bidang rekaman awalnya Null. (Dalam terminologi database, Null berarti "tidak memiliki nilai" dan tidak sama dengan NULL di C++.) Untuk menyelesaikan operasi, Anda harus memanggil Update fungsi anggota. Update menyimpan perubahan Anda ke sumber data.

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil AddNew. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

AddNew menyiapkan rekaman baru yang kosong menggunakan anggota data bidang himpunan rekaman. Setelah Anda memanggil AddNew, atur nilai yang Anda inginkan di anggota data bidang himpunan catatan. (Anda tidak perlu memanggil Edit fungsi anggota untuk tujuan ini; gunakan Edit hanya untuk rekaman yang ada.) Saat Anda memanggil Update, nilai yang diubah di anggota data bidang disimpan di sumber data.

Perhatian

Jika Anda menggulir ke rekaman baru sebelum memanggil Update, rekaman baru hilang, dan tidak ada peringatan yang diberikan.

Jika sumber data mendukung transaksi, Anda dapat melakukan panggilan sebagai AddNew bagian dari transaksi. Untuk informasi selengkapnya tentang transaksi, lihat kelas CDatabase. Panggil CDatabase::BeginTrans sebelum memanggil AddNew.

Catatan

Untuk dinaset, rekaman baru ditambahkan ke recordset sebagai rekaman terakhir. Rekaman yang ditambahkan tidak ditambahkan ke rekam jepret; Anda harus memanggil Requery untuk menyegarkan kumpulan rekaman.

Ini ilegal untuk memanggil AddNew recordset yang fungsi anggotanya Open belum dipanggil. CDBException akan dilemparkan jika Anda memanggil AddNew kumpulan rekaman yang tidak dapat ditambahkan. Anda dapat menentukan apakah recordset dapat diperbarui dengan memanggil CanAppend.

Untuk informasi selengkapnya, lihat artikel berikut ini: Recordset: Cara Rekaman Memperbarui Rekaman (ODBC), Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC), dan Transaksi (ODBC).

Contoh

lihat Transaksi: Melakukan Transaksi dalam Recordset (ODBC).

CRecordset::CanAppend

Menentukan apakah kumpulan rekaman yang dibuka sebelumnya memungkinkan Anda menambahkan rekaman baru.

BOOL CanAppend() const;

Nilai hasil

Bukan nol jika kumpulan rekaman memungkinkan penambahan rekaman baru; jika tidak, 0. CanAppend akan mengembalikan 0 jika Anda membuka recordset sebagai baca-saja.

CRecordset::CanBookmark

Menentukan apakah kumpulan rekaman memungkinkan Anda menandai rekaman menggunakan marka buku.

BOOL CanBookmark() const;

Nilai hasil

Bukan nol jika recordset mendukung marka buku; jika tidak, 0.

Keterangan

Fungsi ini tidak bergantung pada CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota. CanBookmark menunjukkan apakah driver ODBC dan jenis kursor yang diberikan mendukung marka buku. CRecordset::useBookmarks menunjukkan apakah marka buku akan tersedia, asalkan didukung.

Catatan

Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.

Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).

CRecordset::Cancel

Meminta agar sumber data membatalkan operasi asinkron yang sedang berlangsung atau proses dari utas kedua.

void Cancel();

Keterangan

Kelas MFC ODBC tidak lagi menggunakan pemrosesan asinkron; untuk melakukan operasi asinkron, Anda harus langsung memanggil fungsi SQLSetConnectOptionODBC API . Untuk informasi selengkapnya, lihat "Menjalankan Fungsi Secara Asinkron" di Panduan Pemrogram ODBC SDK.

CRecordset::CancelUpdate

Membatalkan pembaruan yang tertunda, yang disebabkan oleh Edit operasi atau AddNew , sebelumnya Update dipanggil.

void CancelUpdate();

Keterangan

Catatan

Fungsi anggota ini tidak berlaku pada kumpulan rekaman yang menggunakan pengambilan baris massal, karena kumpulan rekaman tersebut tidak dapat memanggil Edit, , AddNewatau Update. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Jika pemeriksaan bidang kotor otomatis diaktifkan, CancelUpdate akan memulihkan variabel anggota ke nilai yang mereka miliki sebelumnya Edit atau AddNew dipanggil; jika tidak, perubahan nilai apa pun akan tetap ada. Secara default, pemeriksaan bidang otomatis diaktifkan saat kumpulan rekaman dibuka. Untuk menonaktifkannya, Anda harus menentukan CRecordset::noDirtyFieldCheck dalam parameter fungsi Anggota terbuka.dwOptions

Untuk informasi selengkapnya tentang memperbarui data, lihat Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC).

CRecordset::CanRestart

Menentukan apakah kumpulan rekaman memungkinkan memulai ulang kuerinya (untuk me-refresh rekamannya) dengan memanggil Requery fungsi anggota.

BOOL CanRestart() const;

Nilai hasil

Bukan nol jika kueri ulang diizinkan; jika tidak, 0.

CRecordset::CanScroll

Menentukan apakah kumpulan rekaman memungkinkan pengguliran.

BOOL CanScroll() const;

Nilai hasil

Bukan nol jika kumpulan rekaman memungkinkan pengguliran; jika tidak, 0.

Keterangan

Untuk informasi selengkapnya tentang menggulir, lihat Recordset: Scrolling (ODBC).

CRecordset::CanTransact

Menentukan apakah set rekaman mengizinkan transaksi.

BOOL CanTransact() const;

Nilai hasil

Nonzero jika recordset memungkinkan transaksi; jika tidak, 0.

Keterangan

Untuk informasi selengkapnya, lihat Transaksi (ODBC).

CRecordset::CanUpdate

Menentukan apakah kumpulan rekaman dapat diperbarui.

BOOL CanUpdate() const;

Nilai hasil

Bukan nol jika set rekaman dapat diperbarui; jika tidak, 0.

Keterangan

Kumpulan rekaman mungkin bersifat baca-saja jika sumber data yang mendasar bersifat baca-saja atau jika Anda menentukan CRecordset::readOnly dalam dwOptions parameter saat Anda membuka kumpulan rekaman.

CRecordset::CheckRowsetError

Dipanggil untuk menangani kesalahan yang dihasilkan selama pengambilan rekaman.

virtual void CheckRowsetError(RETCODE nRetCode);

Parameter

nRetCode
Kode pengembalian fungsi ODBC API. Untuk detailnya, lihat Keterangan.

Keterangan

Fungsi anggota virtual ini menangani kesalahan yang terjadi ketika rekaman diambil, dan berguna selama pengambilan baris massal. Anda mungkin ingin mempertimbangkan untuk mengambil alih CheckRowsetError untuk menerapkan penanganan kesalahan Anda sendiri.

CheckRowsetError dipanggil secara otomatis dalam operasi navigasi kursor, seperti Open, Requery, atau operasi apa pun Move . Ini melewati nilai pengembalian dari fungsi SQLExtendedFetchODBC API . Tabel berikut mencantumkan nilai yang mungkin untuk nRetCode parameter .

nRetCode Deskripsi
SQL_SUCCESS Fungsi berhasil diselesaikan; tidak ada informasi tambahan yang tersedia.
SQL_SUCCESS_WITH_INFO Fungsi berhasil diselesaikan, mungkin dengan kesalahan nonfatal. Informasi tambahan dapat diperoleh dengan memanggil SQLError.
SQL_NO_DATA_FOUND Semua baris dari kumpulan hasil telah diambil.
SQL_ERROR Fungsi gagal. Informasi tambahan dapat diperoleh dengan memanggil SQLError.
SQL_INVALID_HANDLE Fungsi gagal karena handel lingkungan, handel koneksi, atau handel pernyataan yang tidak valid. Ini menunjukkan kesalahan pemrograman. Tidak ada informasi tambahan yang tersedia dari SQLError.
SQL_STILL_EXECUTING Fungsi yang dimulai secara asinkron masih dijalankan. Secara default, MFC tidak akan pernah meneruskan nilai ini ke CheckRowsetError; MFC akan terus memanggil SQLExtendedFetch sampai tidak lagi kembali SQL_STILL_EXECUTING.

Untuk informasi selengkapnya tentang SQLError, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::Close

Menutup kumpulan rekaman.

virtual void Close();

Keterangan

ODBC HSTMT dan semua memori kerangka kerja yang dialokasikan untuk kumpulan rekaman dibatalkan alokasinya. Biasanya setelah memanggil Close, Anda menghapus objek recordset C++ jika dialokasikan dengan new.

Anda dapat menghubungi Open lagi setelah memanggil Close. Ini memungkinkan Anda menggunakan kembali objek recordset. Alternatifnya adalah memanggil Requery.

Contoh

// Construct a snapshot object
CCustomer rsCustSet(NULL);

if (!rsCustSet.Open())
return;

// Use the snapshot ...

// Close the snapshot
rsCustSet.Close();

// Destructor is called when the function exits

CRecordset::CRecordset

Membuat CRecordset objek.

CRecordset(CDatabase* pDatabase = NULL);

Parameter

pDatabase
Berisi penunjuk ke CDatabase objek atau nilai NULL. Jika tidak NULL dan CDatabase fungsi anggota objek Open belum dipanggil untuk menyambungkannya ke sumber data, set rekaman mencoba membukanya untuk Anda selama panggilannya sendiri Open . Jika Anda lulus NULL, CDatabase objek dibangun dan terhubung untuk Anda menggunakan informasi sumber data yang Anda tentukan saat anda memperoleh kelas recordset anda dengan ClassWizard.

Keterangan

Anda dapat menggunakan CRecordset secara langsung atau mendapatkan kelas khusus aplikasi dari CRecordset. Anda dapat menggunakan ClassWizard untuk memperoleh kelas recordset Anda.

Catatan

Kelas turunan harus menyediakan konstruktornya sendiri. Di konstruktor kelas turunan Anda, panggil konstruktor CRecordset::CRecordset, meneruskan parameter yang sesuai bersama dengannya.

Teruskan NULL ke konstruktor recordset Anda untuk membuat CDatabase objek dan terhubung untuk Anda secara otomatis. Ini adalah singkatan berguna yang tidak mengharuskan Anda untuk membangun dan menghubungkan CDatabase objek sebelum membuat kumpulan rekaman Anda.

Contoh

Untuk informasi selengkapnya, lihat Recordset: Mendeklarasikan Kelas untuk Tabel (ODBC).

CRecordset::Delete

Menghapus rekaman saat ini.

virtual void Delete();

Keterangan

Setelah penghapusan berhasil, anggota data bidang kumpulan rekaman diatur ke nilai Null, dan Anda harus secara eksplisit memanggil salah Move satu fungsi untuk memindahkan rekaman yang dihapus. Setelah Anda memindahkan rekaman yang dihapus, tidak dimungkinkan untuk kembali ke rekaman tersebut. Jika sumber data mendukung transaksi, Anda dapat melakukan Delete panggilan sebagai bagian dari transaksi. Untuk informasi selengkapnya, lihat Transaksi (ODBC).

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Delete. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Perhatian

Kumpulan rekaman harus dapat diperbarui dan harus ada rekaman yang valid saat ini dalam kumpulan rekaman saat Anda memanggil Delete; jika tidak, kesalahan terjadi. Misalnya, jika Anda menghapus rekaman tetapi tidak menggulir ke rekaman baru sebelum Anda memanggil Delete lagi, Delete melempar CDBException.

Tidak seperti AddNew dan Edit, panggilan ke Delete tidak diikuti oleh panggilan ke Update. Delete Jika panggilan gagal, anggota data bidang dibiarkan tidak berubah.

Contoh

Contoh ini memperlihatkan kumpulan rekaman yang dibuat pada bingkai fungsi. Contoh mengasumsikan keberadaan m_dbCust, variabel anggota jenis CDatabase yang sudah terhubung ke sumber data.

// Create a derived CRecordset object
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if (rsCustSet.IsEOF() || !rsCustSet.CanUpdate() ||
   !rsCustSet.CanTransact())
{
   return;
}

m_dbCust.BeginTrans();

// Perhaps scroll to a new record...
// Delete the current record
rsCustSet.Delete();

// Finished commands for this transaction
if (IDYES == AfxMessageBox(_T("Commit transaction?"), MB_YESNO))
m_dbCust.CommitTrans();
else // User changed mind
m_dbCust.Rollback();

CRecordset::DoBulkFieldExchange

Dipanggil untuk bertukar baris data massal dari sumber data ke kumpulan rekaman. Menerapkan pertukaran bidang rekaman massal (RFX Massal).

virtual void DoBulkFieldExchange(CFieldExchange* pFX);

Parameter

pFX
Penunjuk ke CFieldExchange objek. Kerangka kerja sudah menyiapkan objek ini untuk menentukan konteks untuk operasi pertukaran bidang.

Keterangan

Saat pengambilan baris massal diimplementasikan, kerangka kerja memanggil fungsi anggota ini untuk mentransfer data secara otomatis dari sumber data ke objek kumpulan rekaman Anda. DoBulkFieldExchange juga mengikat anggota data parameter Anda, jika ada, ke tempat penampung parameter dalam string pernyataan SQL untuk pilihan kumpulan rekaman.

Jika pengambilan baris massal tidak diimplementasikan, kerangka kerja akan memanggil DoFieldExchange. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi parameter dwOptions dalam Open fungsi anggota.

Catatan

DoBulkFieldExchange hanya tersedia jika Anda menggunakan kelas yang berasal dari CRecordset. Jika Anda telah membuat objek recordset langsung dari CRecordset, Anda harus memanggil GetFieldValue fungsi anggota untuk mengambil data.

Pertukaran bidang rekaman massal (RFX massal) mirip dengan pertukaran bidang rekaman (RFX). Data secara otomatis ditransfer dari sumber data ke objek recordset. Namun, Anda tidak dapat memanggil AddNew, , EditDelete, atau Update untuk mentransfer perubahan kembali ke sumber data. Kelas CRecordset saat ini tidak menyediakan mekanisme untuk memperbarui baris data massal; namun, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API .

ClassWizard tidak mendukung pertukaran bidang rekaman massal; oleh karena itu, Anda harus mengambil DoBulkFieldExchange alih secara manual dengan menulis panggilan ke fungsi RFX Massal. Untuk informasi selengkapnya tentang fungsi-fungsi ini, lihat Fungsi Pertukaran Bidang Rekaman.

Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC). Untuk informasi terkait, lihat Record Field Exchange (RFX).

CRecordset::DoFieldExchange

Dipanggil untuk bertukar data (di kedua arah) antara anggota data bidang dari himpunan rekaman dan rekaman terkait pada sumber data. Menerapkan pertukaran bidang rekaman (RFX).

virtual void DoFieldExchange(CFieldExchange* pFX);

Parameter

pFX
Penunjuk ke CFieldExchange objek. Kerangka kerja sudah menyiapkan objek ini untuk menentukan konteks untuk operasi pertukaran bidang.

Keterangan

Saat pengambilan baris massal tidak diimplementasikan, kerangka kerja memanggil fungsi anggota ini untuk secara otomatis bertukar data antara anggota data bidang objek recordset Anda dan kolom yang sesuai dari rekaman saat ini pada sumber data. DoFieldExchange juga mengikat anggota data parameter Anda, jika ada, ke tempat penampung parameter dalam string pernyataan SQL untuk pilihan kumpulan rekaman.

Jika pengambilan baris massal diimplementasikan, kerangka kerja akan memanggil DoBulkFieldExchange. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.

Catatan

DoFieldExchange hanya tersedia jika Anda menggunakan kelas yang berasal dari CRecordset. Jika Anda telah membuat objek kumpulan rekaman langsung dari CRecordset, Anda harus memanggil fungsi anggota GetFieldValue untuk mengambil data.

Pertukaran data bidang, yang disebut pertukaran bidang rekaman (RFX), berfungsi di kedua arah: dari anggota data bidang objek rekaman ke bidang rekaman pada sumber data, dan dari rekaman pada sumber data ke objek kumpulan rekaman.

Satu-satunya tindakan yang biasanya harus Anda ambil untuk diterapkan DoFieldExchange untuk kelas recordset turunan Anda adalah membuat kelas dengan ClassWizard dan menentukan nama dan jenis data anggota data bidang. Anda juga dapat menambahkan kode ke apa yang ditulis ClassWizard untuk menentukan anggota data parameter atau untuk menangani kolom apa pun yang Anda ikat secara dinamis. Untuk informasi selengkapnya, lihat Recordset: Dynamically Binding Data Columns (ODBC).

Saat Anda mendeklarasikan kelas recordset turunan Anda dengan ClassWizard, wizard menulis penimpaan DoFieldExchange untuk Anda, yang menyerupai contoh berikut:

void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   // Macros such as RFX_Text() and RFX_Int() are dependent on the
   // type of the member variable, not the type of the field in the database.
   // ODBC will try to automatically convert the column value to the requested type
   RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
   RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
   RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
   RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
   RFX_Long(pFX, _T("[BillingID]"), m_BillingID);

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param"), m_strParam);
}

Untuk informasi selengkapnya tentang fungsi RFX, lihat Fungsi Pertukaran Bidang Rekaman.

Untuk contoh dan detail lebih lanjut tentang DoFieldExchange, lihat Pertukaran Bidang Rekaman: Cara Kerja RFX. Untuk informasi umum tentang RFX, lihat Pertukaran Bidang Rekaman.

CRecordset::Edit

Perbolehkan perubahan pada rekaman saat ini.

virtual void Edit();

Keterangan

Setelah memanggil Edit, Anda dapat mengubah anggota data bidang dengan langsung mengatur ulang nilainya. Operasi selesai saat Anda memanggil Update fungsi anggota untuk menyimpan perubahan Anda pada sumber data.

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Edit. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Edit menyimpan nilai anggota data himpunan catatan. Jika Anda memanggil Edit, membuat perubahan, lalu memanggil Edit lagi, nilai rekaman dipulihkan ke apa yang mereka lakukan sebelum panggilan pertama Edit .

Dalam beberapa kasus, Anda mungkin ingin memperbarui kolom dengan membuatnya Null (tidak berisi data). Untuk melakukannya, panggil SetFieldNull dengan parameter TRUE untuk menandai bidang Null; ini juga menyebabkan kolom diperbarui. Jika Anda ingin bidang ditulis ke sumber data meskipun nilainya belum berubah, panggil SetFieldDirty dengan parameter TRUE. Ini berfungsi bahkan jika bidang memiliki nilai Null.

Jika sumber data mendukung transaksi, Anda dapat melakukan Edit panggilan sebagai bagian dari transaksi. Panggil CDatabase::BeginTrans sebelum memanggil Edit dan setelah recordset dibuka. Selain itu, panggilan CDatabase::CommitTrans bukan pengganti panggilan Update untuk menyelesaikan Edit operasi. Untuk informasi selengkapnya tentang transaksi, lihat kelas CDatabase.

Bergantung pada mode penguncian saat ini, rekaman yang diperbarui dapat dikunci Edit hingga Anda memanggil Update atau menggulir ke rekaman lain, atau mungkin hanya dikunci selama Edit panggilan. Anda dapat mengubah mode penguncian dengan SetLockingMode.

Nilai sebelumnya dari rekaman saat ini dipulihkan jika Anda menggulir ke rekaman baru sebelum memanggil Update. CDBException dilemparkan jika Anda memanggil Edit kumpulan rekaman yang tidak dapat diperbarui atau jika tidak ada rekaman saat ini.

Untuk informasi selengkapnya, lihat artikel Transaksi (ODBC) dan Recordset: Mengunci Rekaman (ODBC).

Contoh

// To edit a record, first set up the edit buffer
rsCustSet.Edit();

// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");

// Finally, complete the operation
if (!rsCustSet.Update())
{
   // Handle the failure to update
   AfxMessageBox(_T("Couldn't update record!"));
}

CRecordset::FlushResultSet

Mengambil kumpulan hasil berikutnya dari kueri yang telah ditentukan sebelumnya (prosedur tersimpan), jika ada beberapa kumpulan hasil.

BOOL FlushResultSet();

Nilai hasil

Nonzero jika ada lebih banyak tataan hasil yang akan diambil; jika tidak, 0.

Keterangan

Anda harus memanggil FlushResultSet hanya ketika Anda selesai dengan kursor pada tataan hasil saat ini. Saat Anda mengambil hasil berikutnya yang ditetapkan dengan memanggil FlushResultSet, kursor Anda tidak valid pada tataan hasil tersebut MoveNext ; Anda harus memanggil fungsi anggota setelah memanggil FlushResultSet.

Jika kueri yang telah ditentukan sebelumnya menggunakan parameter output atau parameter input/output, Anda harus memanggil FlushResultSet hingga kueri kembali FALSE(nilai 0), untuk mendapatkan nilai parameter ini.

FlushResultSet memanggil fungsi SQLMoreResultsODBC API . Jika SQLMoreResults mengembalikan SQL_ERROR atau SQL_INVALID_HANDLE, maka FlushResultSet akan melemparkan pengecualian. Untuk informasi selengkapnya tentang SQLMoreResults, lihat Windows SDK.

Prosedur tersimpan Anda harus memiliki bidang terikat jika Anda ingin memanggil FlushResultSet.

Contoh

Kode berikut mengasumsikan bahwa COutParamRecordset adalah CRecordsetobjek -turunan berdasarkan kueri yang telah ditentukan sebelumnya dengan parameter input dan parameter output, dan memiliki beberapa tataan hasil. Perhatikan struktur penimpaan DoFieldExchange .

// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputParam);
   RFX_Long(pFX, _T("Param1"), m_nCountParam);
   // The "Param1" name here is a dummy name 
   // that is never used

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param2"), m_strNameParam);
   // The "Param2" name here is a dummy name 
   // that is never used
}

 

// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");

// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor 
//       type for multiple rowset returning stored 
//       procedures
rs.Open(CRecordset::forwardOnly,
   _T("{? = CALL GetCourses( ? )}"),
   CRecordset::readOnly);

// Loop through all the data in the first result set
while (!rs.IsEOF())
{
   CString strFieldValue;
   for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
   {
      rs.GetFieldValue(nIndex, strFieldValue);

      // TO DO: Use field value string.
   }
   rs.MoveNext();
}

// Retrieve other result sets...
while (rs.FlushResultSet())
{
   // must call MoveNext because cursor is invalid
   rs.MoveNext();

   while (!rs.IsEOF())
   {
      CString strFieldValue;
      for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
      {
         rs.GetFieldValue(nIndex, strFieldValue);

         // TO DO: Use field value string.
      }
      rs.MoveNext();
   }
}


// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.

// TO DO: Use m_nCountParam

// Cleanup
rs.Close();

CRecordset::GetBookmark

Mendapatkan nilai marka buku untuk rekaman saat ini.

void GetBookmark(CDBVariant& varBookmark);

Parameter

varBookmark
Referensi ke objek yang CDBVariant mewakili marka buku pada rekaman saat ini.

Keterangan

Untuk menentukan apakah marka buku didukung pada recordset, panggil CanBookmark. Untuk membuat marka buku tersedia jika didukung, Anda harus mengatur CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota.

Catatan

Jika bookmark tidak didukung atau tidak tersedia, panggilan GetBookmark akan mengakibatkan pengecualian dilemparkan. Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.

GetBookmark menetapkan nilai marka buku untuk rekaman saat ini ke CDBVariant objek. Untuk kembali ke rekaman tersebut kapan saja setelah pindah ke rekaman lain, panggil SetBookmark dengan objek yang CDBVariant sesuai.

Catatan

Setelah operasi recordset tertentu, marka buku mungkin tidak lagi valid. Misalnya, jika Anda memanggil GetBookmark diikuti dengan Requery, Anda mungkin tidak dapat kembali ke rekaman dengan SetBookmark. Panggil CDatabase::GetBookmarkPersistence untuk memeriksa apakah Anda dapat dengan aman memanggil SetBookmark.

Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).

CRecordset::GetDefaultConnect

Dipanggil untuk mendapatkan string koneksi default.

virtual CString GetDefaultConnect();

Nilai hasil

CString yang berisi string koneksi default.

Keterangan

Kerangka kerja memanggil fungsi anggota ini untuk mendapatkan string koneksi default untuk sumber data yang menjadi dasar himpunan catatan. ClassWizard menerapkan fungsi ini untuk Anda dengan mengidentifikasi sumber data yang sama dengan yang Anda gunakan ClassWizard untuk mendapatkan informasi tentang tabel dan kolom. Anda mungkin akan merasa nyaman untuk mengandalkan koneksi default ini saat mengembangkan aplikasi Anda. Tetapi koneksi default mungkin tidak sesuai untuk pengguna aplikasi Anda. Jika demikian, Anda harus mengisi ulang fungsi ini, membuang ClassWizardversi. Untuk informasi selengkapnya tentang string koneksi, lihat Sumber Data (ODBC).

CRecordset::GetDefaultSQL

Dipanggil untuk mendapatkan string SQL default untuk dijalankan.

virtual CString GetDefaultSQL();

Nilai hasil

CString yang berisi pernyataan SQL default.

Keterangan

Kerangka kerja memanggil fungsi anggota ini untuk mendapatkan pernyataan SQL default tempat kumpulan rekaman didasarkan. Ini mungkin nama tabel atau pernyataan SQL SELECT .

Anda secara tidak langsung menentukan pernyataan SQL default dengan mendeklarasikan kelas recordset Anda dengan ClassWizard, dan ClassWizard melakukan tugas ini untuk Anda.

Jika Anda memerlukan string pernyataan SQL untuk penggunaan Anda sendiri, panggil GetSQL, yang mengembalikan pernyataan SQL yang digunakan untuk memilih rekaman recordset saat dibuka. Anda dapat mengedit string SQL default dalam penimpaan kelas Anda dari GetDefaultSQL. Misalnya, Anda dapat menentukan panggilan ke kueri yang telah ditentukan sebelumnya menggunakan CALL pernyataan. (Catatan, bagaimanapun, bahwa jika Anda mengedit GetDefaultSQL, Anda juga perlu memodifikasi m_nFields agar sesuai dengan jumlah kolom di sumber data.)

Untuk informasi selengkapnya, lihat Recordset: Mendeklarasikan Kelas untuk Tabel (ODBC).

Perhatian

Nama tabel akan kosong jika kerangka kerja tidak dapat mengidentifikasi nama tabel, jika beberapa nama tabel disediakan, atau jika CALL pernyataan tidak dapat ditafsirkan. Saat Anda menggunakan CALL pernyataan, jangan sisipkan spasi putih antara kurung kurawal dan CALL kata kunci, atau sebelum kurung kurawal atau sebelum SELECT kata kunci dalam SELECT pernyataan.

CRecordset::GetFieldValue

Mengambil data bidang dalam rekaman saat ini.

void GetFieldValue(
    LPCTSTR lpszName,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringA& strValue
);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringW& strValue
);

void GetFieldValue(
    short nIndex,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    short nIndex,
    CStringA& strValue);

void GetFieldValue(
    short nIndex,
    CStringW& strValue);

Parameter

lpszName
Nama bidang.

varValue Referensi ke CDBVariant objek yang akan menyimpan nilai bidang.

nFieldType
Tipe data ODBC C dari bidang . Menggunakan nilai default, DEFAULT_FIELD_TYPE, memaksa GetFieldValue untuk menentukan jenis data C dari jenis data SQL, berdasarkan tabel berikut. Jika tidak, Anda dapat menentukan jenis data secara langsung atau memilih jenis data yang kompatibel; misalnya, Anda dapat menyimpan jenis data apa pun ke dalam SQL_C_CHAR.

Jenis data C Tipe data SQL
SQL_C_BIT SQL_BIT
SQL_C_UTINYINT SQL_TINYINT
SQL_C_SSHORT SQL_SMALLINT
SQL_C_SLONG SQL_INTEGER
SQL_C_FLOAT SQL_REAL
SQL_C_DOUBLE SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY

Untuk informasi selengkapnya tentang jenis data ODBC, lihat topik "Jenis Data SQL" dan "Jenis Data C" di Lampiran D dari Windows SDK.

nIndex
Indeks bidang berbasis nol.

strValue
Referensi ke CString objek yang akan menyimpan nilai bidang yang dikonversi menjadi teks, terlepas dari jenis data bidang.

Keterangan

Anda dapat mencari bidang baik berdasarkan nama atau menurut indeks. Anda dapat menyimpan nilai bidang di CDBVariant objek atau CString objek.

Jika Anda telah menerapkan pengambilan baris massal, rekaman saat ini selalu diposisikan pada rekaman pertama dalam set baris. Untuk menggunakan GetFieldValue pada rekaman dalam set baris tertentu, Anda harus terlebih dahulu memanggil SetRowsetCursorPosition fungsi anggota untuk memindahkan kursor ke baris yang diinginkan dalam set baris tersebut. Lalu panggil GetFieldValue baris itu. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.

Anda dapat menggunakan GetFieldValue untuk mengambil bidang secara dinamis pada waktu proses daripada mengikatnya secara statis pada waktu desain. Misalnya, jika Anda telah mendeklarasikan objek kumpulan rekaman langsung dari CRecordset, Anda harus menggunakan GetFieldValue untuk mengambil data bidang; pertukaran bidang rekaman (RFX), atau pertukaran bidang rekaman massal (RFX massal), tidak diimplementasikan.

Catatan

Jika Anda mendeklarasikan objek recordset tanpa berasal dari CRecordset, jangan memuat Pustaka Kursor ODBC. Pustaka kursor mengharuskan kumpulan rekaman memiliki setidaknya satu kolom terikat; namun, saat Anda menggunakan CRecordset secara langsung, tidak ada kolom yang terikat. Anggota berfungsi CDatabase::OpenEx dan CDatabase::Open mengontrol apakah pustaka kursor akan dimuat.

GetFieldValue memanggil fungsi SQLGetDataODBC API . Jika driver Anda menghasilkan nilai SQL_NO_TOTAL untuk panjang aktual nilai bidang, GetFieldValue melemparkan pengecualian. Untuk informasi selengkapnya tentang SQLGetData, lihat Windows SDK.

Contoh

Kode sampel berikut mengilustrasikan panggilan ke GetFieldValue untuk objek recordset yang dideklarasikan langsung dari CRecordset.

// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);

// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));

// Create a CDBVariant object to
// store field data
CDBVariant varValue;

// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
   for (short index = 0; index < nFields; index++)
   {
      rs.GetFieldValue(index, varValue);
      // do something with varValue
   }
   rs.MoveNext();
}

rs.Close();
db.Close();

Catatan

Tidak seperti kelas CDaoRecordsetDAO , CRecordset tidak memiliki SetFieldValue fungsi anggota. Jika Anda membuat objek langsung dari CRecordset, objek tersebut secara efektif bersifat baca-saja.

Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::GetODBCFieldCount

Mengambil jumlah total bidang di objek recordset Anda.

short GetODBCFieldCount() const;

Nilai hasil

Jumlah bidang dalam kumpulan rekaman.

Keterangan

Untuk informasi selengkapnya tentang membuat kumpulan rekaman, lihat Recordset: Membuat dan Menutup Recordsets (ODBC).

CRecordset::GetODBCFieldInfo

Mendapatkan informasi tentang bidang dalam kumpulan rekaman.

void GetODBCFieldInfo(
    LPCTSTR lpszName,
    CODBCFieldInfo& fieldinfo);

void GetODBCFieldInfo(
    short nIndex,
    CODBCFieldInfo& fieldinfo);

Parameter

lpszName
Nama bidang.

fieldinfo
Referensi ke CODBCFieldInfo struktur.

nIndex
Indeks bidang berbasis nol.

Keterangan

Satu versi fungsi memungkinkan Anda mencari bidang berdasarkan nama. Versi lainnya memungkinkan Anda mencari bidang menurut indeks.

Untuk deskripsi tentang informasi yang dikembalikan, lihat strukturnya CODBCFieldInfo .

Untuk informasi selengkapnya tentang membuat kumpulan rekaman, lihat Recordset: Membuat dan Menutup Recordsets (ODBC).

CRecordset::GetRecordCount

Menentukan ukuran kumpulan rekaman.

long GetRecordCount() const;

Nilai hasil

Jumlah rekaman dalam kumpulan rekaman; 0 jika kumpulan rekaman tidak berisi rekaman; atau -1 jika jumlah rekaman tidak dapat ditentukan.

Keterangan

Perhatian

Jumlah rekaman dipertahankan sebagai "tanda air tinggi," rekaman bernomor tertinggi yang belum terlihat saat pengguna bergerak melalui rekaman. Jumlah total rekaman hanya diketahui setelah pengguna bergerak melampaui rekaman terakhir. Untuk alasan performa, jumlah tidak diperbarui saat Anda memanggil MoveLast. Untuk menghitung rekaman sendiri, panggil MoveNext berulang kali hingga IsEOF mengembalikan nonzero. Menambahkan rekaman melalui CRecordset:AddNew dan Update meningkatkan jumlah; menghapus rekaman melalui CRecordset::Delete mengurangi jumlah.

CRecordset::GetRowsetSize

Mendapatkan pengaturan saat ini untuk jumlah baris yang ingin Anda ambil selama pengambilan tertentu.

DWORD GetRowsetSize() const;

Nilai hasil

Jumlah baris yang akan diambil selama pengambilan tertentu.

Keterangan

Jika Anda menggunakan pengambilan baris massal, ukuran set baris default saat kumpulan rekaman dibuka adalah 25; jika tidak, itu adalah 1.

Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dalam dwOptions parameter Open fungsi anggota. Untuk mengubah pengaturan untuk ukuran set baris, panggil SetRowsetSize.

Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::GetRowsFetched

Menentukan berapa banyak rekaman yang diambil setelah pengambilan.

DWORD GetRowsFetched() const;

Nilai hasil

Jumlah baris yang diambil dari sumber data setelah pengambilan tertentu.

Keterangan

Ini berguna ketika Anda telah menerapkan pengambilan baris massal. Ukuran set baris biasanya menunjukkan berapa banyak baris yang akan diambil dari pengambilan. Namun, jumlah total baris dalam kumpulan rekaman juga memengaruhi berapa banyak baris yang akan diambil dalam set baris. Misalnya, jika himpunan MoveNext catatan Anda memiliki 10 rekaman dengan pengaturan ukuran set baris empat, maka perulangan melalui kumpulan rekaman dengan panggilan akan mengakibatkan set baris akhir hanya memiliki dua rekaman.

Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dalam parameter dwOptions dari Open fungsi anggota. Untuk menentukan ukuran set baris, panggil SetRowsetSize.

Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

CMultiCustomer rs(&m_dbCust);

// Set the rowset size
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// loop through the recordset by rowsets
while (!rs.IsEOF())
{
   for (int rowCount = 0; rowCount < (int)rs.GetRowsFetched(); rowCount++)
   {
      // do something
   }

   rs.MoveNext();
}

rs.Close();

CRecordset::GetRowStatus

Mendapatkan status untuk baris dalam set baris saat ini.

WORD GetRowStatus(WORD wRow) const;

Parameter

wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari 1 hingga ukuran set baris.

Nilai hasil

Nilai status untuk baris. Untuk detailnya, lihat Keterangan.

Keterangan

GetRowStatus mengembalikan nilai yang menunjukkan perubahan status ke baris sejak terakhir kali diambil dari sumber data, atau tidak ada baris yang terkait dengan wRow yang diambil. Tabel berikut mencantumkan kemungkinan nilai pengembalian.

Nilai status Deskripsi
SQL_ROW_SUCCESS Baris tidak berubah.
SQL_ROW_UPDATED Baris telah diperbarui.
SQL_ROW_DELETED Baris telah dihapus.
SQL_ROW_ADDED Baris telah ditambahkan.
SQL_ROW_ERROR Baris tidak dapat diambil karena kesalahan.
SQL_ROW_NOROW Tidak ada baris yang wRowsesuai dengan .

Untuk informasi selengkapnya, lihat fungsi SQLExtendedFetch ODBC API di Windows SDK.

CRecordset::GetStatus

Menentukan indeks rekaman saat ini dalam kumpulan rekaman dan apakah rekaman terakhir telah terlihat.

void GetStatus(CRecordsetStatus& rStatus) const;

Parameter

rStatus
Referensi ke CRecordsetStatus objek. Untuk informasi selengkapnya, lihat Keterangan.

Keterangan

CRecordset mencoba melacak indeks, tetapi dalam beberapa keadaan ini mungkin tidak mungkin. Lihat GetRecordCount untuk penjelasannya.

Struktur CRecordsetStatus memiliki bentuk berikut:

struct CRecordsetStatus
{
    long m_lCurrentRecord;
    BOOL m_bRecordCountFinal;
};

Dua anggota CRecordsetStatus memiliki arti berikut:

  • m_lCurrentRecord Berisi indeks berbasis nol dari rekaman saat ini dalam kumpulan rekaman, jika diketahui. Jika indeks tidak dapat ditentukan, anggota ini berisi AFX_CURRENT_RECORD_UNDEFINED (-2). Jika IsBOF TRUE (recordset kosong atau mencoba menggulir sebelum rekaman pertama), maka m_lCurrentRecord diatur ke AFX_CURRENT_RECORD_BOF (-1). Jika pada catatan pertama, maka diatur ke 0, rekaman kedua 1, dan sebagainya.

  • m_bRecordCountFinal Bukan nol jika jumlah total rekaman dalam kumpulan rekaman telah ditentukan. Umumnya ini harus dicapai dengan memulai di awal recordset dan memanggil MoveNext sampai IsEOF mengembalikan nonzero. Jika anggota ini nol, jumlah rekaman seperti yang dikembalikan oleh GetRecordCount, jika tidak -1, hanya merupakan jumlah "tanda air tinggi" dari rekaman.

CRecordset::GetSQL

Panggil fungsi anggota ini untuk mendapatkan pernyataan SQL yang digunakan untuk memilih rekaman recordset saat dibuka.

const CString& GetSQL() const;

Nilai hasil

const Referensi ke yang CString berisi pernyataan SQL.

Keterangan

Ini umumnya akan menjadi pernyataan SQL SELECT . String yang dikembalikan oleh GetSQL bersifat baca-saja.

String yang dikembalikan biasanya GetSQL berbeda dari string apa pun yang mungkin telah Anda teruskan ke recordset dalam lpszSQL parameter ke Open fungsi anggota. Ini karena kumpulan rekaman membuat pernyataan SQL lengkap berdasarkan apa yang Anda teruskan ke Open, apa yang Anda tentukan dengan ClassWizard, apa yang mungkin telah Anda tentukan dalam m_strFilter anggota data dan m_strSort , dan parameter apa pun yang mungkin telah Anda tentukan. Untuk detail tentang bagaimana kumpulan rekaman membuat pernyataan SQL ini, lihat Recordset: Cara Recordset Memilih Rekaman (ODBC).

Catatan

Panggil fungsi anggota ini hanya setelah memanggil Open.

CRecordset::GetTableName

Mendapatkan nama tabel SQL tempat kueri kumpulan rekaman didasarkan.

const CString& GetTableName() const;

Nilai hasil

const Referensi ke yang CString berisi nama tabel, jika kumpulan rekaman didasarkan pada tabel; jika tidak, string kosong.

Keterangan

GetTableName hanya valid jika kumpulan rekaman didasarkan pada tabel, bukan gabungan dari beberapa tabel atau kueri yang telah ditentukan sebelumnya (prosedur tersimpan). Namanya baca-saja.

Catatan

Panggil fungsi anggota ini hanya setelah memanggil Open.

CRecordset::IsBOF

Mengembalikan bukan nol jika kumpulan rekaman telah diposisikan sebelum rekaman pertama. Tidak ada rekaman saat ini.

BOOL IsBOF() const;

Nilai hasil

Bukan nol jika kumpulan rekaman tidak berisi rekaman atau jika Anda telah menggulir mundur sebelum rekaman pertama; jika tidak, 0.

Keterangan

Panggil fungsi anggota ini sebelum Anda menggulir dari rekaman untuk merekam untuk mempelajari apakah Anda telah pergi sebelum rekaman pertama dari kumpulan rekaman. Anda juga dapat menggunakan IsBOF bersama untuk IsEOF menentukan apakah kumpulan rekaman berisi rekaman apa pun atau kosong. Segera setelah Anda memanggil Open, jika kumpulan rekaman tidak berisi rekaman, IsBOF mengembalikan nonzero. Saat Anda membuka kumpulan rekaman yang memiliki setidaknya satu rekaman, rekaman pertama adalah rekaman saat ini dan IsBOF mengembalikan 0.

Jika rekaman pertama adalah rekaman saat ini dan Anda memanggil MovePrev, IsBOF akan mengembalikan nonzero. Jika IsBOF mengembalikan nonzero dan Anda memanggil MovePrev, kesalahan terjadi. Jika IsBOF mengembalikan nonzero, rekaman saat ini tidak terdefinisi, dan tindakan apa pun yang memerlukan rekaman saat ini akan mengakibatkan kesalahan.

Contoh

Contoh ini menggunakan IsBOF dan IsEOF untuk mendeteksi batas kumpulan rekaman saat kode menggulir melalui kumpulan rekaman di kedua arah.

// Open a recordset; first record is current
// Open a recordset; first record is current
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if(rsCustSet.IsBOF())
   return;
   // The recordset is empty

// Scroll to the end of the recordset, past
// the last record, so no record is current
while (!rsCustSet.IsEOF())
   rsCustSet.MoveNext();

// Move to the last record
rsCustSet.MoveLast();

// Scroll to beginning of the recordset, before
// the first record, so no record is current
while(!rsCustSet.IsBOF())
   rsCustSet.MovePrev();

// First record is current again
rsCustSet.MoveFirst();

CRecordset::IsDeleted

Menentukan apakah rekaman saat ini telah dihapus.

BOOL IsDeleted() const;

Nilai hasil

Bukan nol jika kumpulan rekaman diposisikan pada rekaman yang dihapus; jika tidak, 0.

Keterangan

Jika Anda menggulir ke rekaman dan IsDeleted mengembalikan TRUE (bukan nol), maka Anda harus menggulir ke rekaman lain sebelum anda dapat melakukan operasi recordset lainnya.

Hasilnya IsDeleted tergantung pada banyak faktor, seperti jenis recordset Anda, apakah set catatan Anda dapat diperbarui, apakah Anda menentukan CRecordset::skipDeletedRecords opsi saat Anda membuka kumpulan rekaman, apakah driver Anda mengemas rekaman yang dihapus, dan apakah ada beberapa pengguna.

Untuk informasi selengkapnya tentang CRecordset::skipDeletedRecords dan pengemasan driver, lihat fungsi Buka anggota.

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak boleh memanggil IsDeleted. Sebagai gantinya , panggil fungsi anggota GetRowStatus . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::IsEOF

Mengembalikan bukan nol jika kumpulan rekaman telah diposisikan setelah rekaman terakhir. Tidak ada rekaman saat ini.

BOOL IsEOF() const;

Nilai hasil

Bukan nol jika kumpulan rekaman tidak berisi rekaman atau jika Anda telah menggulir di luar rekaman terakhir; jika tidak, 0.

Keterangan

Panggil fungsi anggota ini saat Anda menggulir dari rekaman ke rekaman untuk mempelajari apakah Anda telah melampaui rekaman terakhir dari kumpulan rekaman. Anda juga dapat menggunakan IsEOF untuk menentukan apakah kumpulan rekaman berisi rekaman apa pun atau kosong. Segera setelah Anda memanggil Open, jika kumpulan rekaman tidak berisi rekaman, IsEOF mengembalikan nonzero. Saat Anda membuka kumpulan rekaman yang memiliki setidaknya satu rekaman, rekaman pertama adalah rekaman saat ini dan IsEOF mengembalikan 0.

Jika rekaman terakhir adalah rekaman saat ini saat Anda memanggil MoveNext, IsEOF akan mengembalikan bukan nol. Jika IsEOF mengembalikan nonzero dan Anda memanggil MoveNext, kesalahan terjadi. Jika IsEOF mengembalikan nonzero, rekaman saat ini tidak terdefinisi, dan tindakan apa pun yang memerlukan rekaman saat ini akan mengakibatkan kesalahan.

Contoh

Lihat contoh untuk IsBOF.

CRecordset::IsFieldDirty

Menentukan apakah anggota data bidang yang ditentukan telah diubah sejak Edit atau AddNew dipanggil.

BOOL IsFieldDirty(void* pv);

Parameter

pv
Penunjuk ke anggota data bidang yang statusnya ingin Anda periksa, atau NULL untuk menentukan apakah salah satu bidang kotor.

Nilai hasil

Bukan nol jika anggota data bidang yang ditentukan telah berubah sejak memanggil AddNew atau Edit; jika tidak, 0.

Keterangan

Data di semua anggota data bidang kotor akan ditransfer ke rekaman pada sumber data ketika rekaman saat ini diperbarui oleh panggilan ke Update fungsi CRecordset anggota (mengikuti panggilan ke Edit atau AddNew).

Catatan

Fungsi anggota ini tidak berlaku pada kumpulan rekaman yang menggunakan pengambilan baris massal. Jika Anda telah menerapkan pengambilan baris massal, maka IsFieldDirty akan selalu mengembalikan FALSE dan akan mengakibatkan pernyataan yang gagal. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Panggilan IsFieldDirty akan mengatur ulang efek panggilan sebelumnya ke SetFieldDirty karena status kotor bidang dievaluasi ulang. AddNew Dalam hal ini, jika nilai bidang saat ini berbeda dari nilai null pseudo, status bidang diatur kotor. Dalam hal ini Edit , jika nilai bidang berbeda dari nilai yang di-cache, maka status bidang diatur kotor.

IsFieldDirty diimplementasikan melalui DoFieldExchange.

Untuk informasi selengkapnya tentang bendera kotor, lihat Recordset: Cara Recordset Memilih Rekaman (ODBC).

CRecordset::IsFieldNull

Mengembalikan bukan nol jika bidang yang ditentukan dalam rekaman saat ini adalah Null (tidak memiliki nilai).

BOOL IsFieldNull(void* pv);

Parameter

pv
Penunjuk ke anggota data bidang yang statusnya ingin Anda periksa, atau NULL untuk menentukan apakah salah satu bidang adalah Null.

Nilai hasil

Bukan nol jika anggota data bidang yang ditentukan ditandai sebagai Null; jika tidak, 0.

Keterangan

Panggil fungsi anggota ini untuk menentukan apakah anggota data bidang yang ditentukan dari kumpulan rekaman telah ditandai sebagai Null. (Dalam terminologi database, Null berarti "tidak memiliki nilai" dan tidak sama seperti NULL di C++.) Jika anggota data bidang ditandai sebagai Null, itu ditafsirkan sebagai kolom rekaman saat ini yang tidak ada nilainya.

Catatan

Fungsi anggota ini tidak berlaku pada kumpulan rekaman yang menggunakan pengambilan baris massal. Jika Anda telah menerapkan pengambilan baris massal, maka IsFieldNull akan selalu kembali FALSE dan akan mengakibatkan pernyataan yang gagal. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

IsFieldNull diimplementasikan melalui DoFieldExchange.

CRecordset::IsFieldNullable

Mengembalikan bukan nol jika bidang yang ditentukan dalam rekaman saat ini dapat diatur ke Null (tidak memiliki nilai).

BOOL IsFieldNullable(void* pv);

Parameter

pv
Penunjuk ke anggota data bidang yang statusnya ingin Anda periksa, atau NULL untuk menentukan apakah salah satu bidang dapat diatur ke nilai Null.

Keterangan

Panggil fungsi anggota ini untuk menentukan apakah anggota data bidang yang ditentukan "dapat diubah ke null" (dapat diatur ke nilai Null; C++ NULL tidak sama dengan Null, yang, dalam terminologi database, berarti "tidak memiliki nilai").

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil IsFieldNullable. Sebagai gantinya GetODBCFieldInfo , panggil fungsi anggota untuk menentukan apakah bidang dapat diatur ke nilai Null. Anda selalu dapat memanggil GetODBCFieldInfo, terlepas dari apakah Anda telah menerapkan pengambilan baris massal. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Bidang yang tidak boleh Null harus memiliki nilai. Jika Anda mencoba mengatur bidang tersebut ke Null saat menambahkan atau memperbarui rekaman, sumber data menolak penambahan atau pembaruan, dan Update akan memberikan pengecualian. Pengecualian terjadi ketika Anda memanggil Update, bukan saat Anda memanggil SetFieldNull.

Menggunakan NULL untuk argumen pertama fungsi hanya akan menerapkan fungsi ke outputColumn bidang, bukan param bidang. Misalnya, panggilan

SetFieldNull(NULL);

hanya outputColumn akan mengatur bidang ke NULL; param bidang tidak akan terpengaruh.

Untuk mengerjakan param bidang, Anda harus menyediakan alamat aktual individu param yang ingin Anda kerjakan, seperti:

SetFieldNull(&m_strParam);

Ini berarti Anda tidak dapat mengatur semua param bidang ke NULL, seperti yang Anda bisa dengan outputColumn bidang.

IsFieldNullable diimplementasikan melalui DoFieldExchange.

CRecordset::IsOpen

Menentukan apakah kumpulan rekaman sudah terbuka.

BOOL IsOpen() const;

Nilai hasil

Bukan nol jika fungsi objek Open atau Requery anggota recordset sebelumnya telah dipanggil dan kumpulan rekaman belum ditutup; jika tidak, 0.

CRecordset::m_hstmt

Berisi handel ke struktur data pernyataan ODBC, dari jenis HSTMT, yang terkait dengan kumpulan rekaman.

Keterangan

Setiap kueri ke sumber data ODBC dikaitkan dengan HSTMT.

Perhatian

Jangan gunakan m_hstmt sebelumnya Open telah dipanggil.

Biasanya Anda tidak perlu mengakses HSTMT secara langsung, tetapi Anda mungkin memerlukannya untuk eksekusi langsung pernyataan SQL. Fungsi ExecuteSQL anggota kelas CDatabase memberikan contoh penggunaan m_hstmt.

CRecordset::m_nFields

Berisi jumlah anggota data bidang di kelas recordset; artinya, jumlah kolom yang dipilih oleh kumpulan rekaman dari sumber data.

Keterangan

Konstruktor untuk kelas recordset harus diinisialisasi m_nFields dengan angka yang benar. Jika Anda belum menerapkan pengambilan baris massal, ClassWizard tulis inisialisasi ini untuk Anda saat Anda menggunakannya untuk mendeklarasikan kelas recordset Anda. Anda juga dapat menulisnya secara manual.

Kerangka kerja menggunakan angka ini untuk mengelola interaksi antara anggota data bidang dan kolom terkait dari rekaman saat ini pada sumber data.

Perhatian

Nomor ini harus sesuai dengan jumlah "kolom output" yang terdaftar di DoFieldExchange atau DoBulkFieldExchange setelah panggilan ke SetFieldType dengan parameter CFieldExchange::outputColumn.

Anda dapat mengikat kolom secara dinamis, seperti yang dijelaskan dalam artikel "Recordset: Dynamically Binding Data Columns." Jika Anda melakukannya, Anda harus meningkatkan hitungan m_nFields untuk mencerminkan jumlah panggilan fungsi RFX atau RFX Massal di fungsi anggota atau DoBulkFieldExchange Anda DoFieldExchange untuk kolom yang terikat secara dinamis.

Untuk informasi selengkapnya, lihat artikel Recordset: Dynamically Binding Data Columns (ODBC) dan Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

lihat Pertukaran Bidang Rekaman: Menggunakan RFX.

CRecordset::m_nParams

Berisi jumlah anggota data parameter di kelas recordset; artinya, jumlah parameter yang diteruskan dengan kueri recordset.

Keterangan

Jika kelas recordset Anda memiliki anggota data parameter, konstruktor untuk kelas harus menginisialisasi m_nParams dengan angka yang benar. Nilai m_nParams default ke 0. Jika Anda menambahkan anggota data parameter (yang harus Anda lakukan secara manual) Anda juga harus menambahkan inisialisasi secara manual di konstruktor kelas untuk mencerminkan jumlah parameter (yang harus setidaknya sebesar jumlah tempat penampung '' dalam atau string Anda m_strFilterm_strSort ).

Kerangka kerja menggunakan angka ini saat membuat parameter kueri kumpulan rekaman.

Perhatian

Nomor ini harus sesuai dengan jumlah "param" yang terdaftar di DoFieldExchange atau setelah panggilan ke SetFieldType dengan nilai CFieldExchange::inputParamparameter , , CFieldExchange::paramCFieldExchange::outputParam, atau CFieldExchange::inoutParamDoBulkFieldExchange .

Contoh

Lihat artikel Recordset: Membuat parameter Recordset (ODBC) dan Record Field Exchange: Menggunakan RFX.

CRecordset::m_pDatabase

Berisi penunjuk ke CDatabase objek tempat kumpulan rekaman tersambung ke sumber data.

Keterangan

Variabel ini diatur dalam dua cara. Biasanya, Anda meneruskan penunjuk ke objek yang sudah tersambung CDatabase saat anda membuat objek recordset. Jika Anda meneruskan NULL , CRecordset buat CDatabase objek untuk Anda dan sambungkan. Dalam kedua kasus, CRecordset menyimpan pointer dalam variabel ini.

Biasanya Anda tidak perlu langsung menggunakan pointer yang disimpan di m_pDatabase. Namun, jika Anda menulis ekstensi Anda sendiri ke CRecordset, Anda mungkin perlu menggunakan pointer. Misalnya, Anda mungkin memerlukan pointer jika Anda melemparkan s Anda sendiri CDBException. Atau Anda mungkin membutuhkannya jika Anda perlu melakukan sesuatu menggunakan objek yang sama CDatabase , seperti menjalankan transaksi, mengatur batas waktu, atau memanggil ExecuteSQL fungsi anggota kelas CDatabase untuk menjalankan pernyataan SQL secara langsung.

CRecordset::m_strFilter

Setelah Anda membuat objek recordset, tetapi sebelum Anda memanggil fungsi anggotanya Open , gunakan anggota data ini untuk menyimpan yang CString berisi klausa SQL WHERE .

Keterangan

Kumpulan rekaman menggunakan string ini untuk membatasi (atau memfilter) rekaman yang dipilihnya selama Open panggilan atau Requery . Ini berguna untuk memilih subset rekaman, seperti "semua tenaga penjualan yang berbasis di California" ("state = CA"). Sintaks ODBC SQL untuk WHERE klausul adalah

WHERE search-condition

Jangan sertakan WHERE kata kunci dalam string Anda. Kerangka kerja memasoknya.

Anda juga dapat membuat parameter string filter dengan menempatkan tempat penampung '' di dalamnya, mendeklarasikan anggota data parameter di kelas Anda untuk setiap tempat penampung, dan meneruskan parameter ke kumpulan rekaman pada run time. Ini memungkinkan Anda membuat filter pada waktu proses. Untuk informasi selengkapnya, lihat Recordset: Parameterizing a Recordset (ODBC).

Untuk informasi selengkapnya tentang klausa SQL WHERE , lihat SQL. Untuk informasi selengkapnya tentang memilih dan memfilter rekaman, lihat Recordset: Memfilter Rekaman (ODBC).

Contoh

CCustomer rsCustSet(&m_dbCust);

// Set the filter
rsCustSet.m_strFilter = _T("L_Name = 'Flanders'");

// Run the filtered query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::m_strSort

Setelah Anda membuat objek recordset, tetapi sebelum Anda memanggil fungsi anggotanya Open , gunakan anggota data ini untuk menyimpan yang CString berisi klausa SQL ORDER BY .

Keterangan

Kumpulan rekaman menggunakan string ini untuk mengurutkan rekaman yang dipilihnya selama Open panggilan atau Requery . Anda bisa menggunakan fitur ini untuk mengurutkan kumpulan rekaman pada satu atau beberapa kolom. Sintaks ODBC SQL untuk ORDER BY klausul adalah

ORDER BY sort-specification [, sort-specification]...

di mana spesifikasi pengurutan adalah bilangan bulat atau nama kolom. Anda juga dapat menentukan urutan naik atau turun (urutan naik secara default) dengan menambahkan "ASC" atau "DESC" ke daftar kolom dalam string pengurutan. Rekaman yang dipilih diurutkan terlebih dahulu menurut kolom pertama yang tercantum, lalu menurut yang kedua, dan seterusnya. Misalnya, Anda dapat memesan kumpulan rekaman "Pelanggan" berdasarkan nama belakang, lalu nama depan. Jumlah kolom yang bisa Anda cantumkan bergantung pada sumber data. Untuk informasi selengkapnya, lihat Windows SDK.

Jangan sertakan ORDER BY kata kunci dalam string Anda. Kerangka kerja memasoknya.

Untuk informasi selengkapnya tentang klausa SQL, lihat SQL. Untuk informasi selengkapnya tentang mengurutkan rekaman, lihat Kumpulan Rekaman: Mengurutkan Rekaman (ODBC).

Contoh

CCustomer rsCustSet(&m_dbCust);

// Set the sort string
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");

// Run the sorted query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::Move

Memindahkan penunjuk rekaman saat ini dalam kumpulan rekaman, baik ke depan atau mundur.

virtual void Move(
    long nRows,
    WORD wFetchType = SQL_FETCH_RELATIVE);

Parameter

nRows
Jumlah baris untuk bergerak maju atau mundur. Nilai positif bergerak maju, menuju akhir kumpulan rekaman. Nilai negatif bergerak mundur, ke awal.

wFetchType
Menentukan set baris yang Move akan diambil. Untuk detailnya, lihat Keterangan.

Keterangan

Jika Anda meneruskan nilai 0 untuk nRows, Move me-refresh rekaman saat ini; Move akan mengakhiri semua saat ini AddNew atau Edit mode, dan akan memulihkan nilai rekaman saat ini sebelum AddNew atau Edit dipanggil.

Catatan

Saat Anda menelusuri kumpulan rekaman, Anda tidak dapat melewati rekaman yang dihapus. Lihat CRecordset::IsDeleted untuk informasi lebih lanjut. Saat Anda membuka CRecordset dengan skipDeletedRecords rangkaian opsi, Move tegaskan apakah parameternya nRows adalah 0. Perilaku ini mencegah refresh baris yang dihapus oleh aplikasi klien lain menggunakan data yang sama. dwOption Lihat parameter di Open untuk deskripsi skipDeletedRecords.

Move memposisikan ulang kumpulan rekaman menurut kumpulan baris. Berdasarkan nilai untuk nRows dan wFetchType, Move mengambil set baris yang sesuai lalu membuat rekaman pertama dalam kumpulan baris tersebut sebagai rekaman saat ini. Jika Anda belum menerapkan pengambilan baris massal, ukuran set baris selalu 1. Saat mengambil set baris, Move langsung memanggil CheckRowsetError fungsi anggota untuk menangani kesalahan apa pun yang dihasilkan dari pengambilan.

Bergantung pada nilai yang Anda berikan, Move setara dengan fungsi anggota lain CRecordset . Secara khusus, nilai wFetchType dapat menunjukkan fungsi anggota yang lebih intuitif dan seringkali metode yang disukai untuk memindahkan rekaman saat ini.

Tabel berikut mencantumkan nilai yang mungkin untuk wFetchType, kumpulan baris yang Move akan diambil berdasarkan wFetchType dan nRows, dan fungsi anggota yang setara yang sesuai dengan wFetchType.

wFetchType Kumpulan baris yang diambil Fungsi anggota yang setara
SQL_FETCH_RELATIVE (nilai default) Baris awal nRows himpunan baris dari baris pertama di set baris saat ini.
SQL_FETCH_NEXT Set baris berikutnya; nRows diabaikan. MoveNext
SQL_FETCH_PRIOR Set baris sebelumnya; nRows diabaikan. MovePrev
SQL_FETCH_FIRST Himpunan baris pertama dalam recordset; nRows diabaikan. MoveFirst
SQL_FETCH_LAST Himpunan baris lengkap terakhir dalam kumpulan rekaman; nRows diabaikan. MoveLast
SQL_FETCH_ABSOLUTE Jika nRows> 0, baris awal nRows set baris dari awal kumpulan rekaman. Jika nRows< 0, baris awal nRows set baris dari akhir kumpulan rekaman. Jika nRows = 0, maka kondisi awal file (BOF) dikembalikan. SetAbsolutePosition
SQL_FETCH_BOOKMARK Kumpulan baris dimulai pada baris yang nilai marka bukunya sesuai dengan nRows. SetBookmark

Catatan

Untuk recordset khusus penerusan, Move hanya valid dengan nilai SQL_FETCH_NEXT untuk wFetchType.

Perhatian

Move Panggilan melemparkan pengecualian jika kumpulan rekaman tidak memiliki rekaman. Untuk menentukan apakah kumpulan rekaman memiliki rekaman, panggilan IsBOF , dan IsEOF.

Catatan

Jika Anda telah menggulir melewati awal atau akhir kumpulan rekaman (IsBOF atau IsEOF mengembalikan nonzero), memanggil Move fungsi mungkin akan melemparkan CDBException. Misalnya, jika IsEOF mengembalikan nonzero dan IsBOF tidak, maka MoveNext akan melemparkan pengecualian, tetapi MovePrev tidak akan.

Catatan

Jika Anda memanggil Move saat rekaman saat ini sedang diperbarui atau ditambahkan, pembaruan akan hilang tanpa peringatan.

Untuk informasi selengkapnya tentang navigasi recordset, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC). Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC). Untuk informasi terkait, lihat fungsi SQLExtendedFetch ODBC API di Windows SDK.

Contoh

// rs is a CRecordset or a CRecordset-derived object

// Change the rowset size to 5
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// Move to the first record in the recordset
rs.MoveFirst();

// Move to the sixth record
rs.Move(5);
// Other equivalent ways to move to the sixth record:
rs.Move(6, SQL_FETCH_ABSOLUTE);
rs.SetAbsolutePosition(6);
// In this case, the sixth record is the first record in the next rowset,
// so the following are also equivalent:
rs.MoveFirst();
rs.Move(1, SQL_FETCH_NEXT);

rs.MoveFirst();
rs.MoveNext();

CRecordset::MoveFirst

Membuat rekaman pertama di kumpulan baris pertama menjadi rekaman saat ini.

void MoveFirst();

Keterangan

Terlepas dari apakah pengambilan baris massal telah diimplementasikan, ini akan selalu menjadi rekaman pertama dalam kumpulan rekaman.

Anda tidak perlu menelepon MoveFirst segera setelah membuka recordset. Pada saat itu, rekaman pertama (jika ada) adalah rekaman saat ini secara otomatis.

Catatan

Fungsi anggota ini tidak valid untuk kumpulan rekaman hanya-terusan.

Catatan

Saat Anda menelusuri kumpulan rekaman, Anda tidak dapat melewati rekaman yang dihapus. IsDeleted Lihat fungsi anggota untuk detailnya.

Perhatian

Memanggil salah Move satu fungsi akan melemparkan pengecualian jika kumpulan rekaman tidak memiliki rekaman. Untuk menentukan apakah kumpulan rekaman memiliki rekaman, panggilan IsBOF , dan IsEOF.

Catatan

Jika Anda memanggil salah Move satu fungsi saat rekaman saat ini sedang diperbarui atau ditambahkan, pembaruan akan hilang tanpa peringatan.

Untuk informasi selengkapnya tentang navigasi recordset, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC). Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

Lihat contoh untuk IsBOF.

CRecordset::MoveLast

Membuat rekaman pertama di kumpulan baris lengkap terakhir rekaman saat ini.

void MoveLast();

Keterangan

Jika Anda belum menerapkan pengambilan baris massal, kumpulan rekaman Anda memiliki ukuran set baris 1, jadi MoveLast berpindah ke rekaman terakhir dalam kumpulan rekaman.

Catatan

Fungsi anggota ini tidak valid untuk kumpulan rekaman hanya-terusan.

Catatan

Saat Anda menelusuri kumpulan rekaman, Anda tidak dapat melewati rekaman yang dihapus. IsDeleted Lihat fungsi anggota untuk detailnya.

Perhatian

Memanggil salah Move satu fungsi akan melemparkan pengecualian jika kumpulan rekaman tidak memiliki rekaman. Untuk menentukan apakah kumpulan rekaman memiliki rekaman, panggilan IsBOF , dan IsEOF.

Catatan

Jika Anda memanggil salah Move satu fungsi saat rekaman saat ini sedang diperbarui atau ditambahkan, pembaruan akan hilang tanpa peringatan.

Untuk informasi selengkapnya tentang navigasi recordset, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC). Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

Lihat contoh untuk IsBOF.

CRecordset::MoveNext

Membuat rekaman pertama di kumpulan baris berikutnya menjadi rekaman saat ini.

void MoveNext();

Keterangan

Jika Anda belum menerapkan pengambilan baris massal, kumpulan rekaman Anda memiliki ukuran set baris 1, jadi MoveNext berpindah ke rekaman berikutnya.

Catatan

Saat Anda menelusuri kumpulan rekaman, Anda tidak dapat melewati rekaman yang dihapus. IsDeleted Lihat fungsi anggota untuk detailnya.

Perhatian

Memanggil salah Move satu fungsi akan melemparkan pengecualian jika kumpulan rekaman tidak memiliki rekaman. Untuk menentukan apakah kumpulan rekaman memiliki rekaman, panggilan IsBOF , dan IsEOF.

Catatan

Disarankan juga agar Anda menelepon IsEOF sebelum memanggil MoveNext. Misalnya, jika Anda telah menggulir melewati akhir kumpulan rekaman, IsEOF akan mengembalikan nonzero; panggilan berikutnya untuk MoveNext akan melemparkan pengecualian.

Catatan

Jika Anda memanggil salah Move satu fungsi saat rekaman saat ini sedang diperbarui atau ditambahkan, pembaruan akan hilang tanpa peringatan.

Untuk informasi selengkapnya tentang navigasi recordset, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC). Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

Lihat contoh untuk IsBOF.

CRecordset::MovePrev

Membuat rekaman pertama di kumpulan baris sebelumnya menjadi rekaman saat ini.

void MovePrev();

Keterangan

Jika Anda belum menerapkan pengambilan baris massal, kumpulan rekaman Anda memiliki ukuran set baris 1, jadi MovePrev berpindah ke rekaman sebelumnya.

Catatan

Fungsi anggota ini tidak valid untuk kumpulan rekaman hanya-terusan.

Catatan

Saat Anda menelusuri kumpulan rekaman, Anda tidak dapat melewati rekaman yang dihapus. IsDeleted Lihat fungsi anggota untuk detailnya.

Perhatian

Memanggil salah Move satu fungsi akan melemparkan pengecualian jika kumpulan rekaman tidak memiliki rekaman. Untuk menentukan apakah kumpulan rekaman memiliki rekaman, panggilan IsBOF , dan IsEOF.

Catatan

Disarankan juga agar Anda menelepon IsBOF sebelum memanggil MovePrev. Misalnya, jika Anda telah menggulir di depan awal kumpulan rekaman, IsBOF akan mengembalikan nonzero; panggilan berikutnya untuk MovePrev akan melemparkan pengecualian.

Catatan

Jika Anda memanggil salah Move satu fungsi saat rekaman saat ini sedang diperbarui atau ditambahkan, pembaruan akan hilang tanpa peringatan.

Untuk informasi selengkapnya tentang navigasi recordset, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC). Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Contoh

Lihat contoh untuk IsBOF.

CRecordset::OnSetOptions

Dipanggil untuk mengatur opsi (digunakan pada pilihan) untuk pernyataan ODBC yang ditentukan.

virtual void OnSetOptions(HSTMT hstmt);

Parameter

hstmt
Pernyataan HSTMT ODBC yang opsinya akan ditetapkan.

Keterangan

Panggil OnSetOptions untuk mengatur opsi (digunakan pada pilihan) untuk pernyataan ODBC yang ditentukan. Kerangka kerja memanggil fungsi anggota ini untuk mengatur opsi awal untuk recordset. OnSetOptions menentukan dukungan sumber data untuk kursor yang dapat digulir dan untuk konkurensi kursor dan mengatur opsi kumpulan rekaman yang sesuai. (Sedangkan OnSetOptions digunakan untuk operasi pemilihan, OnSetUpdateOptions digunakan untuk operasi pembaruan.)

Ambil alih OnSetOptions untuk mengatur opsi khusus untuk driver atau sumber data. Misalnya, jika sumber data Anda mendukung pembukaan untuk akses eksklusif, Anda mungkin mengambil alih OnSetOptions untuk memanfaatkan kemampuan tersebut.

Untuk informasi selengkapnya tentang kursor, lihat ODBC.

CRecordset::OnSetUpdateOptions

Dipanggil untuk mengatur opsi (digunakan pada pembaruan) untuk pernyataan ODBC yang ditentukan.

virtual void OnSetUpdateOptions(HSTMT hstmt);

Parameter

hstmt
Pernyataan HSTMT ODBC yang opsinya akan ditetapkan.

Keterangan

Panggil OnSetUpdateOptions untuk mengatur opsi (digunakan pada pembaruan) untuk pernyataan ODBC yang ditentukan. Kerangka kerja memanggil fungsi anggota ini setelah membuat HSTMT untuk memperbarui rekaman dalam kumpulan rekaman. (Sedangkan OnSetOptions digunakan untuk operasi pemilihan, OnSetUpdateOptions digunakan untuk operasi pembaruan.) OnSetUpdateOptions menentukan dukungan sumber data untuk kursor yang dapat digulir dan untuk konkurensi kursor dan mengatur opsi recordset yang sesuai.

Ambil alih OnSetUpdateOptions untuk mengatur opsi pernyataan ODBC sebelum pernyataan tersebut digunakan untuk mengakses database.

Untuk informasi selengkapnya tentang kursor, lihat ODBC.

CRecordset::Open

Membuka kumpulan rekaman dengan mengambil tabel atau melakukan kueri yang diwakili oleh kumpulan rekaman.

virtual BOOL Open(
    UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
    LPCTSTR lpszSQL = NULL,
    DWORD dwOptions = none);

Parameter

nOpenType
Terima nilai default, AFX_DB_USE_DEFAULT_TYPE, atau gunakan salah satu nilai berikut dari enum OpenType:

  • CRecordset::dynaset Kumpulan rekaman dengan pengguliran dua arah. Membuka kumpulan rekaman menentukan keanggotaan dan urutan rekaman, tetapi perubahan yang dibuat oleh pengguna lain pada nilai data terlihat setelah operasi pengambilan. Dynaset juga dikenal sebagai recordset berbasis keyset.

  • CRecordset::snapshot Kumpulan rekaman statis dengan pengguliran dua arah. Membuka recordset menentukan keanggotaan dan urutan rekaman. Mengambil rekaman menentukan nilai data. Perubahan yang dibuat oleh pengguna lain tidak terlihat sampai kumpulan rekaman ditutup lalu dibuka kembali.

  • CRecordset::dynamic Kumpulan rekaman dengan pengguliran dua arah. Perubahan yang dilakukan oleh pengguna lain pada keanggotaan, pemesanan, dan nilai data terlihat setelah operasi pengambilan. Banyak driver ODBC tidak mendukung jenis recordset ini.

  • CRecordset::forwardOnly Kumpulan rekaman baca-saja dengan hanya menggulir ke depan.

    Untuk CRecordset, nilai defaultnya adalah CRecordset::snapshot. Mekanisme nilai default memungkinkan wizard Visual C++ berinteraksi dengan ODBC CRecordset dan DAO CDaoRecordset, yang memiliki default yang berbeda.

Untuk informasi selengkapnya tentang jenis recordset ini, lihat Recordset (ODBC). Untuk informasi terkait, lihat "Menggunakan Kursor yang Dapat Diblokir dan Dapat Digulir" di Windows SDK.

Perhatian

Jika jenis yang diminta tidak didukung, kerangka kerja akan melemparkan pengecualian.

lpszSQL
Penunjuk string yang berisi salah satu hal berikut ini:

  • Sebuah NULL pointer.

  • Nama tabel.

  • Pernyataan SQL SELECT (secara opsional dengan SQL WHERE atau ORDER BY klausa).

  • Pernyataan CALL yang menentukan nama kueri yang telah ditentukan sebelumnya (prosedur tersimpan). Berhati-hatilah untuk tidak memasukkan spasi putih antara kurung kurawal dan CALL kata kunci.

Untuk informasi selengkapnya tentang string ini, lihat tabel dan diskusi peran ClassWizard di bawah bagian Keterangan .

Catatan

Urutan kolom dalam tataan hasil Anda harus sesuai dengan urutan panggilan fungsi RFX atau RFX Massal dalam penimpaan fungsi atau DoBulkFieldExchange AndaDoFieldExchange.

dwOptions
Bitmask, yang dapat menentukan kombinasi nilai yang tercantum di bawah ini. Beberapa di antaranya saling eksklusif. Nilai defaultnya adalah none.

  • CRecordset::none Tidak ada opsi yang diatur. Nilai parameter ini saling eksklusif dengan semua nilai lainnya. Secara default, kumpulan rekaman dapat diperbarui dengan Edit atau Delete dan memungkinkan penambahan rekaman baru dengan AddNew. Updatability tergantung pada sumber data dan opsi yang nOpenType Anda tentukan. Pengoptimalan untuk penambahan massal tidak tersedia. Pengambilan baris massal tidak akan diimplementasikan. Rekaman yang dihapus tidak akan dilewati selama navigasi kumpulan rekaman. Marka buku tidak tersedia. Pemeriksaan bidang kotor otomatis diimplementasikan.

  • CRecordset::appendOnly Jangan izinkan Edit atau Delete pada recordset. Izinkan AddNew saja. Opsi ini saling eksklusif dengan CRecordset::readOnly.

  • CRecordset::readOnly Buka recordset sebagai baca-saja. Opsi ini saling eksklusif dengan CRecordset::appendOnly.

  • CRecordset::optimizeBulkAdd Gunakan pernyataan SQL yang disiapkan untuk mengoptimalkan penambahan banyak rekaman pada satu waktu. Hanya berlaku jika Anda tidak menggunakan fungsi SQLSetPos ODBC API untuk memperbarui recordset. Pembaruan pertama menentukan bidang mana yang ditandai kotor. Opsi ini saling eksklusif dengan CRecordset::useMultiRowFetch.

  • CRecordset::useMultiRowFetch Terapkan pengambilan baris massal untuk memungkinkan beberapa baris diambil dalam satu operasi pengambilan. Ini adalah fitur canggih yang dirancang untuk meningkatkan performa; namun, pertukaran bidang rekaman massal tidak didukung oleh ClassWizard. Opsi ini saling eksklusif dengan CRecordset::optimizeBulkAdd. Jika Anda menentukan CRecordset::useMultiRowFetch, maka opsi CRecordset::noDirtyFieldCheck akan diaktifkan secara otomatis (buffering ganda tidak akan tersedia); pada kumpulan rekaman hanya-terusan, opsi CRecordset::useExtendedFetch akan diaktifkan secara otomatis. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

  • CRecordset::skipDeletedRecords Lewati semua rekaman yang dihapus saat menavigasi melalui kumpulan rekaman. Ini akan memperlambat performa dalam pengambilan relatif tertentu. Opsi ini tidak valid pada kumpulan rekaman hanya-terusan. Jika Anda memanggil Move dengan parameter nRows yang diatur ke 0, dan CRecordset::skipDeletedRecords set opsi, Move akan menegaskan. CRecordset::skipDeletedRecords mirip dengan pengemasan driver, yang berarti bahwa baris yang dihapus dihapus dari kumpulan rekaman. Namun, jika driver Anda mengemas rekaman, maka hanya akan melewati rekaman yang Anda hapus; ini tidak akan melewati rekaman yang dihapus oleh pengguna lain saat kumpulan rekaman terbuka. CRecordset::skipDeletedRecords akan melewati baris yang dihapus oleh pengguna lain.

  • CRecordset::useBookmarks Dapat menggunakan marka buku pada kumpulan rekaman, jika didukung. Bookmark pengambilan data lambat tetapi meningkatkan performa untuk navigasi data. Tidak valid pada recordsets forward-only. Untuk informasi selengkapnya, lihat Recordset: Marka Buku dan Posisi Absolut (ODBC).

  • CRecordset::noDirtyFieldCheck Matikan pemeriksaan bidang kotor otomatis (buffering ganda). Ini akan meningkatkan performa; namun, Anda harus menandai bidang secara manual sebagai kotor dengan memanggil SetFieldDirty fungsi anggota dan SetFieldNull . Buffering ganda di kelas CRecordset mirip dengan buffering ganda di kelas CDaoRecordset. Namun, dalam CRecordset, Anda tidak dapat mengaktifkan buffering ganda pada bidang individual; Anda mengaktifkannya untuk semua bidang atau menonaktifkannya untuk semua bidang. Jika Anda menentukan opsi CRecordset::useMultiRowFetch, maka CRecordset::noDirtyFieldCheck diaktifkan secara otomatis; namun, SetFieldDirty dan SetFieldNull tidak dapat digunakan pada kumpulan rekaman yang menerapkan pengambilan baris massal.

  • CRecordset::executeDirect Jangan gunakan pernyataan SQL yang disiapkan. Untuk peningkatan performa, tentukan opsi ini jika Requery fungsi anggota tidak akan pernah dipanggil.

  • CRecordset::useExtendedFetch Terapkan SQLExtendedFetch alih-alih SQLFetch. Ini dirancang untuk mengimplementasikan pengambilan baris massal pada kumpulan rekaman khusus maju. Jika Anda menentukan opsi CRecordset::useMultiRowFetch pada kumpulan rekaman hanya-terusan, maka CRecordset::useExtendedFetch akan diaktifkan secara otomatis.

  • CRecordset::userAllocMultiRowBuffers Pengguna akan mengalokasikan buffer penyimpanan untuk data. Gunakan opsi ini dengan CRecordset::useMultiRowFetch jika Anda ingin mengalokasikan penyimpanan Anda sendiri. Jika tidak, kerangka kerja akan secara otomatis mengalokasikan penyimpanan yang diperlukan. Untuk informasi selengkapnya, lihat Recordset: Mengambil Rekaman secara Massal (ODBC). Menentukan CRecordset::userAllocMultiRowBuffers tanpa menentukan CRecordset::useMultiRowFetch hasil dalam pernyataan yang gagal.

Nilai hasil

Bukan nol jika CRecordset objek berhasil dibuka; jika tidak, 0 jika CDatabase::Open (jika dipanggil) mengembalikan 0.

Keterangan

Anda harus memanggil fungsi anggota ini untuk menjalankan kueri yang ditentukan oleh kumpulan rekaman. Sebelum memanggil Open, Anda harus membuat objek recordset.

Koneksi himpunan catatan ini ke sumber data tergantung pada cara Anda membuat kumpulan rekaman sebelum memanggil Open. Jika Anda meneruskan CDatabase objek ke konstruktor kumpulan rekaman yang belum tersambung ke sumber data, fungsi anggota ini menggunakan GetDefaultConnect untuk mencoba membuka objek database. Jika Anda meneruskan NULL ke konstruktor kumpulan rekaman, konstruktor membuat CDatabase objek untuk Anda, dan Open mencoba menyambungkan objek database. Untuk detail tentang menutup kumpulan rekaman dan koneksi dalam keadaan yang bervariasi ini, lihat Close.

Catatan

Akses ke sumber data melalui CRecordset objek selalu dibagikan. CDaoRecordset Tidak seperti kelas , Anda tidak dapat menggunakan CRecordset objek untuk membuka sumber data dengan akses eksklusif.

Saat Anda memanggil Open, kueri, biasanya pernyataan SQL SELECT , memilih rekaman berdasarkan kriteria yang diperlihatkan dalam tabel berikut.

Nilai parameter lpszSQL Rekaman yang dipilih ditentukan oleh Contoh
NULL String yang dikembalikan oleh GetDefaultSQL.
Nama tabel SQL Semua kolom daftar tabel di DoFieldExchange atau DoBulkFieldExchange. "Customer"
Nama kueri yang telah ditentukan sebelumnya (prosedur tersimpan) Kolom yang didefinisikan untuk dikembalikan oleh kueri. "{call OverDueAccts}"
SELECT daftar tabel daftar FROM kolom Kolom yang ditentukan dari tabel yang ditentukan. "SELECT CustId, CustName FROM

Customer"

Perhatian

Jangan sisipkan spasi kosong tambahan di string SQL Anda. Misalnya, jika Anda menyisipkan spasi putih antara kurung kurawal dan CALL kata kunci, MFC akan salah menafsirkan string SQL sebagai nama tabel dan memasukkannya ke dalam SELECT pernyataan, yang akan mengakibatkan pengecualian dilemparkan. Demikian pula, jika kueri yang telah ditentukan sebelumnya menggunakan parameter output, jangan sisipkan spasi putih antara kurung kurawal dan simbol ''. Terakhir, Anda tidak boleh menyisipkan spasi kosong sebelum kurung kurawal dalam CALL pernyataan atau sebelum SELECT kata kunci dalam SELECT pernyataan.

Prosedur yang biasa adalah meneruskan NULL ke Open; dalam hal ini, Open memanggil GetDefaultSQL. Jika Anda menggunakan kelas turunan CRecordset , GetDefaultSQL berikan nama tabel yang Anda tentukan di ClassWizard. Anda dapat menentukan informasi lain dalam lpszSQL parameter .

Apa pun yang Anda lewati, Open membuat string SQL akhir untuk kueri (string mungkin memiliki SQL WHERE dan ORDER BY klausa yang ditambahkan ke string yang lpszSQL Anda lewati) lalu menjalankan kueri. Anda dapat memeriksa string yang dibangun dengan memanggil GetSQL setelah memanggil Open. Untuk detail selengkapnya tentang bagaimana kumpulan rekaman membuat pernyataan SQL dan memilih rekaman, lihat Recordset: Cara Recordset Memilih Rekaman (ODBC).

Anggota data bidang kelas recordset Anda terikat ke kolom data yang dipilih. Jika ada rekaman yang dikembalikan, rekaman pertama menjadi rekaman saat ini.

Jika Anda ingin mengatur opsi untuk kumpulan rekaman, seperti filter atau pengurutan, tentukan ini setelah Anda membuat objek recordset tetapi sebelum Anda memanggil Open. Jika Anda ingin me-refresh rekaman di kumpulan rekaman setelah kumpulan rekaman sudah terbuka, panggil Requery.

Untuk informasi selengkapnya, termasuk contoh lainnya, lihat Recordset (ODBC), Recordset: Cara Recordsets Select Records (ODBC), dan Recordset: Membuat dan Menutup Recordsets (ODBC).

Contoh

Contoh kode berikut menunjukkan berbagai bentuk Open panggilan.

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

CRecordset::RefreshRowset

Memperbarui data dan status untuk baris di set baris saat ini.

void RefreshRowset(
    WORD wRow,
    WORD wLockType = SQL_LOCK_NO_CHANGE);

Parameter

wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari nol hingga ukuran set baris.

wLockType
Nilai yang menunjukkan cara mengunci baris setelah disegarkan. Untuk detailnya, lihat Keterangan.

Keterangan

Jika Anda meneruskan nilai nol untuk wRow, maka setiap baris dalam set baris akan di-refresh.

Untuk menggunakan RefreshRowset, Anda harus telah menerapkan pengambilan baris massal dengan menentukan CRecordset::useMulitRowFetch opsi dalam Open fungsi anggota.

RefreshRowset memanggil fungsi SQLSetPosODBC API . Parameter wLockType menentukan status kunci baris setelah SQLSetPos dijalankan. Tabel berikut ini menjelaskan kemungkinan nilai untuk wLockType.

wLockType Deskripsi
SQL_LOCK_NO_CHANGE (nilai default) Driver atau sumber data memastikan bahwa baris dalam keadaan terkunci atau tidak terkunci yang sama seperti sebelumnya RefreshRowset dipanggil.
SQL_LOCK_EXCLUSIVE Driver atau sumber data mengunci baris secara eksklusif. Tidak semua sumber data mendukung jenis kunci ini.
SQL_LOCK_UNLOCK Driver atau sumber data membuka kunci baris. Tidak semua sumber data mendukung jenis kunci ini.

Untuk informasi selengkapnya tentang SQLSetPos, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::Requery

Membangun kembali (me-refresh) kumpulan rekaman.

virtual BOOL Requery();

Nilai hasil

Bukan nol jika kumpulan rekaman berhasil dibangun kembali; jika tidak, 0.

Keterangan

Jika ada rekaman yang dikembalikan, rekaman pertama menjadi rekaman saat ini.

Agar kumpulan rekaman mencerminkan penambahan dan penghapusan yang Anda atau pengguna lain lakukan ke sumber data, Anda harus membangun kembali kumpulan rekaman dengan memanggil Requery. Jika kumpulan rekaman adalah dynaset, kumpulan catatan secara otomatis mencerminkan pembaruan yang Anda atau pengguna lain buat ke rekaman yang ada (tetapi bukan penambahan). Jika kumpulan rekaman adalah rekam jepret, Anda harus memanggil Requery untuk mencerminkan pengeditan oleh pengguna lain dan penambahan dan penghapusan.

Untuk dynaset atau rekam jepret, panggil Requery kapan saja Anda ingin membangun kembali kumpulan rekaman menggunakan filter atau pengurutan baru, atau nilai parameter baru. Atur properti filter atau pengurutan baru dengan menetapkan nilai baru ke m_strFilter dan m_strSort sebelum memanggil Requery. Atur parameter baru dengan menetapkan nilai baru ke anggota data parameter sebelum memanggil Requery. Jika string filter dan pengurutan tidak berubah, Anda dapat menggunakan kembali kueri, yang meningkatkan performa.

Jika upaya untuk membangun kembali kumpulan rekaman gagal, kumpulan rekaman akan ditutup. Sebelum memanggil Requery, Anda dapat menentukan apakah kumpulan rekaman dapat dikueri ulang dengan memanggil CanRestart fungsi anggota. CanRestart tidak menjamin bahwa Requery akan berhasil.

Perhatian

Hubungi Requery hanya setelah Anda menelepon Open.

Contoh

Contoh ini membangun kembali kumpulan rekaman untuk menerapkan urutan pengurutan yang berbeda.

CCustomer rsCustSet(&m_dbCust);

// Open the recordset
rsCustSet.Open();

// Use the recordset ...

// Set the sort order and Requery the recordset
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
if (!rsCustSet.CanRestart())
return;    // Unable to requery

if (!rsCustSet.Requery())
// Requery failed, so take action
AfxMessageBox(_T("Requery failed!"));

CRecordset::SetAbsolutePosition

Memposisikan kumpulan rekaman pada rekaman yang sesuai dengan nomor rekaman yang ditentukan.

void SetAbsolutePosition(long nRows);

Parameter

nRows
Posisi ordinal berbasis satu untuk rekaman saat ini dalam recordset.

Keterangan

SetAbsolutePosition memindahkan penunjuk rekaman saat ini berdasarkan posisi ordinal ini.

Catatan

Fungsi anggota ini tidak valid pada recordset khusus penerusan.

Untuk recordset ODBC, pengaturan posisi absolut 1 mengacu pada rekaman pertama dalam recordset; pengaturan 0 mengacu pada posisi awal file (BOF).

Anda juga dapat meneruskan nilai negatif ke SetAbsolutePosition. Dalam hal ini, posisi recordset dievaluasi dari akhir recordset. Misalnya, SetAbsolutePosition( -1 ) memindahkan penunjuk rekaman saat ini ke rekaman terakhir dalam kumpulan rekaman.

Catatan

Posisi absolut tidak dimaksudkan untuk digunakan sebagai nomor rekaman pengganti. Marka buku masih merupakan cara yang direkomendasikan untuk mempertahankan dan kembali ke posisi tertentu, karena posisi rekaman berubah saat rekaman sebelumnya dihapus. Selain itu, Anda tidak dapat yakin bahwa rekaman tertentu akan memiliki posisi absolut yang sama jika kumpulan rekaman dibuat ulang lagi karena urutan rekaman individual dalam kumpulan rekaman tidak dijamin kecuali dibuat dengan pernyataan SQL menggunakan ORDER BY klausa.

Untuk informasi selengkapnya tentang navigasi recordset dan marka buku, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC).

CRecordset::SetBookmark

Memposisikan kumpulan rekaman pada rekaman yang berisi marka buku yang ditentukan.

void SetBookmark(const CDBVariant& varBookmark);

Parameter

varBookmark
Referensi ke objek yang CDBVariant berisi nilai marka buku untuk rekaman tertentu.

Keterangan

Untuk menentukan apakah marka buku didukung pada recordset, panggil CanBookmark. Untuk membuat marka buku tersedia jika didukung, Anda harus mengatur CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota.

Catatan

Jika bookmark tidak didukung atau tidak tersedia, panggilan SetBookmark akan mengakibatkan pengecualian dilemparkan. Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.

Untuk terlebih dahulu mengambil marka buku untuk rekaman saat ini, panggil GetBookmark, yang menyimpan nilai marka buku ke CDBVariant objek. Nantinya, Anda dapat kembali ke rekaman tersebut dengan memanggil SetBookmark menggunakan nilai bookmark yang disimpan.

Catatan

Setelah operasi recordset tertentu, Anda harus memeriksa persistensi bookmark sebelum memanggil SetBookmark. Misalnya, jika Anda mengambil marka buku dengan GetBookmark lalu memanggil Requery, marka buku mungkin tidak lagi valid. Panggil CDatabase::GetBookmarkPersistence untuk memeriksa apakah Anda dapat dengan aman memanggil SetBookmark.

Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).

CRecordset::SetFieldDirty

Menandai anggota data bidang dari kumpulan rekaman sebagai diubah atau tidak berubah.

void SetFieldDirty(void* pv, BOOL bDirty = TRUE);

Parameter

pv
Berisi alamat anggota data bidang di kumpulan rekaman atau NULL. Jika NULL, semua anggota data bidang dalam kumpulan rekaman ditandai. (C++ NULL tidak sama dengan Null dalam terminologi database, yang berarti "tidak memiliki nilai.")

bDirty
TRUE jika anggota data bidang akan ditandai sebagai "kotor" (diubah). Jika tidak FALSE , jika anggota data bidang akan ditandai sebagai "bersih" (tidak berubah).

Keterangan

Menandai bidang sebagai tidak berubah memastikan bidang tidak diperbarui dan menghasilkan lebih sedikit lalu lintas SQL.

Catatan

Fungsi anggota ini tidak berlaku pada kumpulan rekaman yang menggunakan pengambilan baris massal. Jika Anda telah menerapkan pengambilan baris massal, maka SetFieldDirty akan mengakibatkan pernyataan yang gagal. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Kerangka kerja menandai anggota data bidang yang diubah untuk memastikan mereka akan ditulis ke rekaman pada sumber data dengan mekanisme pertukaran bidang rekaman (RFX). Mengubah nilai bidang umumnya mengatur bidang kotor secara otomatis, jadi Anda jarang perlu memanggil SetFieldDirty diri Anda sendiri, tetapi Terkadang Anda mungkin ingin memastikan bahwa kolom akan diperbarui atau disisipkan secara eksplisit terlepas dari nilai apa yang ada di anggota data bidang.

Perhatian

Panggil fungsi anggota ini hanya setelah Anda memanggil Edit atau AddNew.

Menggunakan NULL untuk argumen pertama fungsi hanya akan menerapkan fungsi ke outputColumn bidang, bukan param bidang. Misalnya, panggilan

SetFieldNull(NULL);

hanya outputColumn akan mengatur bidang ke NULL; param bidang tidak akan terpengaruh.

Untuk mengerjakan param bidang, Anda harus menyediakan alamat aktual individu param yang ingin Anda kerjakan, seperti:

SetFieldNull(&m_strParam);

Ini berarti Anda tidak dapat mengatur semua param bidang ke NULL, seperti yang Anda bisa dengan outputColumn bidang.

CRecordset::SetFieldNull

Menandai anggota data bidang dari kumpulan rekaman sebagai Null (secara khusus tidak memiliki nilai) atau sebagai non-Null.

void SetFieldNull(void* pv, BOOL bNull = TRUE);

Parameter

pv
Berisi alamat anggota data bidang dalam kumpulan rekaman atau NULL. Jika NULL, semua anggota data bidang dalam kumpulan rekaman ditandai. (C++ NULL tidak sama dengan Null dalam terminologi database, yang berarti "tidak memiliki nilai.")

bNull
Bukan nol jika anggota data bidang akan ditandai sebagai tidak memiliki nilai (Null). Jika tidak, 0 jika anggota data bidang akan ditandai sebagai non-Null.

Keterangan

Saat Anda menambahkan rekaman baru ke kumpulan rekaman, semua anggota data bidang awalnya diatur ke nilai Null dan ditandai sebagai "kotor" (diubah). Saat Anda mengambil rekaman dari sumber data, kolomnya sudah memiliki nilai atau Null.

Catatan

Jangan panggil fungsi anggota ini pada kumpulan rekaman yang menggunakan pengambilan baris massal. Jika Anda telah menerapkan pengambilan baris massal, memanggil SetFieldNull menghasilkan pernyataan yang gagal. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Jika Anda secara khusus ingin menunjuk bidang rekaman saat ini karena tidak memiliki nilai, panggil SetFieldNull dengan bNull atur ke untuk TRUE menandainya sebagai Null. Jika bidang sebelumnya ditandai Null dan sekarang Anda ingin memberinya nilai, tetapkan nilai barunya. Anda tidak perlu menghapus bendera Null dengan SetFieldNull. Untuk menentukan apakah bidang diizinkan menjadi Null, panggil IsFieldNullable.

Perhatian

Panggil fungsi anggota ini hanya setelah Anda memanggil Edit atau AddNew.

Menggunakan NULL untuk argumen pertama fungsi hanya akan menerapkan fungsi ke outputColumn bidang, bukan param bidang. Misalnya, panggilan

SetFieldNull(NULL);

hanya outputColumn akan mengatur bidang ke NULL; param bidang tidak akan terpengaruh.

Untuk mengerjakan param bidang, Anda harus menyediakan alamat aktual individu param yang ingin Anda kerjakan, seperti:

SetFieldNull(&m_strParam);

Ini berarti Anda tidak dapat mengatur semua param bidang ke NULL, seperti yang Anda bisa dengan outputColumn bidang.

Catatan

Saat mengatur parameter ke Null, panggilan ke SetFieldNull sebelum recordset dibuka menghasilkan pernyataan. Dalam hal ini, panggil SetParamNull.

SetFieldNull diimplementasikan melalui DoFieldExchange.

CRecordset::SetLockingMode

Mengatur mode penguncian ke penguncian "optimis" (default) atau penguncian "pesimis". Menentukan bagaimana rekaman dikunci untuk pembaruan.

void SetLockingMode(UINT nMode);

Parameter

nMode
Berisi salah satu nilai berikut dari enum LockMode:

  • optimistic Penguncian optimis mengunci rekaman yang diperbarui hanya selama panggilan ke Update.

  • pessimistic Penguncian pesimis mengunci rekaman segera setelah Edit dipanggil dan membuatnya tetap terkunci sampai Update panggilan selesai atau Anda pindah ke rekaman baru.

Keterangan

Panggil fungsi anggota ini jika Anda perlu menentukan salah satu dari dua strategi penguncian rekaman mana yang digunakan set rekaman untuk pembaruan. Secara default, mode penguncian himpunan rekaman adalah optimistic. Anda dapat mengubahnya menjadi strategi penguncian yang lebih hati-hati pessimistic . Panggil SetLockingMode setelah Anda membuat dan membuka objek recordset tetapi sebelum Anda memanggil Edit.

CRecordset::SetParamNull

Menandai parameter sebagai Null (secara khusus tidak memiliki nilai) atau sebagai non-Null.

void SetParamNull(
    int nIndex,
    BOOL bNull = TRUE);

Parameter

nIndex
Indeks berbasis nol parameter.

bNull
Jika TRUE (nilai default), parameter ditandai sebagai Null. Jika tidak, parameter ditandai sebagai non-Null.

Keterangan

Tidak seperti SetFieldNull, Anda dapat memanggil SetParamNull sebelum membuka kumpulan rekaman.

SetParamNull biasanya digunakan dengan kueri yang telah ditentukan sebelumnya (prosedur tersimpan).

CRecordset::SetRowsetCursorPosition

Memindahkan kursor ke baris dalam set baris saat ini.

void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);

Parameter

wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari 1 hingga ukuran set baris.

wLockType
Nilai yang menunjukkan cara mengunci baris setelah disegarkan. Untuk detailnya, lihat Keterangan.

Keterangan

Saat menerapkan pengambilan baris massal, rekaman diambil oleh set baris, di mana rekaman pertama dalam set baris yang diambil adalah rekaman saat ini. Untuk membuat rekaman lain dalam kumpulan baris rekaman saat ini, panggil SetRowsetCursorPosition. Misalnya, Anda dapat menggabungkan SetRowsetCursorPosition dengan GetFieldValue fungsi anggota untuk mengambil data secara dinamis dari catatan set rekaman Anda.

Untuk menggunakan SetRowsetCursorPosition, Anda harus telah menerapkan pengambilan baris massal dengan menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.

SetRowsetCursorPosition memanggil fungsi SQLSetPosODBC API . Parameter wLockType menentukan status kunci baris setelah SQLSetPos dijalankan. Tabel berikut ini menjelaskan kemungkinan nilai untuk wLockType.

wLockType Deskripsi
SQL_LOCK_NO_CHANGE (nilai default) Driver atau sumber data memastikan bahwa baris dalam keadaan terkunci atau tidak terkunci yang sama seperti sebelumnya SetRowsetCursorPosition dipanggil.
SQL_LOCK_EXCLUSIVE Driver atau sumber data mengunci baris secara eksklusif. Tidak semua sumber data mendukung jenis kunci ini.
SQL_LOCK_UNLOCK Driver atau sumber data membuka kunci baris. Tidak semua sumber data mendukung jenis kunci ini.

Untuk informasi selengkapnya tentang SQLSetPos, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::SetRowsetSize

Menentukan jumlah rekaman yang ingin Anda ambil selama pengambilan.

virtual void SetRowsetSize(DWORD dwNewRowsetSize);

Parameter

dwNewRowsetSize
Jumlah baris yang akan diambil selama pengambilan tertentu.

Keterangan

Fungsi anggota virtual ini menentukan berapa banyak baris yang ingin Anda ambil selama pengambilan tunggal saat menggunakan pengambilan baris massal. Untuk menerapkan pengambilan baris massal, Anda harus mengatur CRecordset::useMultiRowFetch opsi dalam dwOptions parameter Open fungsi anggota.

Catatan

Memanggil SetRowsetSize tanpa menerapkan pengambilan baris massal akan mengakibatkan pernyataan yang gagal.

Panggil SetRowsetSize sebelum memanggil Open untuk awalnya mengatur ukuran himpunan baris untuk kumpulan rekaman. Ukuran himpunan baris default saat menerapkan pengambilan baris massal adalah 25.

Catatan

Berhati-hatilah saat memanggil SetRowsetSize. Jika Anda mengalokasikan penyimpanan secara manual untuk data (seperti yang ditentukan oleh CRecordset::userAllocMultiRowBuffers opsi parameter dwOptions di Open), Anda harus memeriksa apakah Anda perlu merealokasi buffer penyimpanan ini setelah Anda memanggil SetRowsetSize, tetapi sebelum Anda melakukan operasi navigasi kursor apa pun.

Untuk mendapatkan pengaturan saat ini untuk ukuran set baris, panggil GetRowsetSize.

Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

CRecordset::Update

AddNew Menyelesaikan operasi atau Edit dengan menyimpan data baru atau yang diedit pada sumber data.

virtual BOOL Update();

Nilai hasil

Bukan nol jika satu rekaman berhasil diperbarui; jika tidak, 0 jika tidak ada kolom yang berubah. Jika tidak ada rekaman yang diperbarui, atau jika lebih dari satu rekaman diperbarui, pengecualian akan dilemparkan. Pengecualian juga dilemparkan untuk kegagalan lain pada sumber data.

Keterangan

Panggil fungsi anggota ini setelah panggilan ke AddNew fungsi atau Edit anggota. Panggilan ini diperlukan untuk menyelesaikan AddNew operasi atau Edit .

Catatan

Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Update. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).

Baik AddNew dan Edit siapkan buffer edit tempat data yang ditambahkan atau diedit ditempatkan untuk disimpan ke sumber data. Update menyimpan data. Hanya bidang yang ditandai atau terdeteksi sebagai diubah yang diperbarui.

Jika sumber data mendukung transaksi, Anda dapat melakukan Update panggilan (dan bagian yang sesuai AddNew atau Edit panggilan) dari transaksi. Untuk informasi selengkapnya tentang transaksi, lihat Transaksi (ODBC).

Perhatian

Jika Anda menelepon Update tanpa terlebih dahulu memanggil atau AddNewEdit, Update akan melempar CDBException. Jika Anda memanggil AddNew atau Edit, Anda harus memanggil Update sebelum memanggil Move operasi atau sebelum menutup kumpulan rekaman atau koneksi sumber data. Jika tidak, perubahan Anda akan hilang tanpa pemberitahuan.

Untuk detail tentang penanganan Update kegagalan, lihat Recordset: Cara Recordset Memperbarui Rekaman (ODBC).

Contoh

lihat Transaksi: Melakukan Transaksi dalam Recordset (ODBC).

Baca juga

CObject class
Bagan hierarki
CDatabase class
CRecordView class