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 Connectivity (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 dynaset atau rekam jepret, baik itu yang dapat diperbarui atau baca-saja (ini tergantung pada kemampuan sumber data Konektivitas Database Terbuka (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
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 SQLSetPos
ODBC 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 SQLSetConnectOption
ODBC 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
, , AddNew
atau 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 SQLExtendedFetch
ODBC 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 SQLSetPos
ODBC 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
, , Edit
Delete
, 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 SQLSetPos
ODBC 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 SQLSetPos
ODBC 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 SQLMoreResults
ODBC 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 CRecordset
objek -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 ClassWizard
versi. 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 SQLGetData
ODBC 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 CDaoRecordset
DAO , 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 wRow sesuai 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 berisiAFX_CURRENT_RECORD_UNDEFINED
(-2). JikaIsBOF
TRUE (recordset kosong atau mencoba menggulir sebelum rekaman pertama), makam_lCurrentRecord
diatur keAFX_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 memanggilMoveNext
sampaiIsEOF
mengembalikan nonzero. Jika anggota ini nol, jumlah rekaman seperti yang dikembalikan olehGetRecordCount
, 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_strFilter
m_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::inputParam
parameter , , CFieldExchange::param
CFieldExchange::outputParam
, atau CFieldExchange::inoutParam
DoBulkFieldExchange
.
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 adalahCRecordset::snapshot
. Mekanisme nilai default memungkinkan wizard Visual C++ berinteraksi dengan ODBCCRecordset
dan DAOCDaoRecordset
, 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 SQLWHERE
atauORDER BY
klausa).Pernyataan
CALL
yang menentukan nama kueri yang telah ditentukan sebelumnya (prosedur tersimpan). Berhati-hatilah untuk tidak memasukkan spasi putih antara kurung kurawal danCALL
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 denganEdit
atauDelete
dan memungkinkan penambahan rekaman baru denganAddNew
. Updatability tergantung pada sumber data dan opsi yangnOpenType
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 izinkanEdit
atauDelete
pada recordset. IzinkanAddNew
saja. Opsi ini saling eksklusif denganCRecordset::readOnly
.CRecordset::readOnly
Buka recordset sebagai baca-saja. Opsi ini saling eksklusif denganCRecordset::appendOnly
.CRecordset::optimizeBulkAdd
Gunakan pernyataan SQL yang disiapkan untuk mengoptimalkan penambahan banyak rekaman pada satu waktu. Hanya berlaku jika Anda tidak menggunakan fungsiSQLSetPos
ODBC API untuk memperbarui recordset. Pembaruan pertama menentukan bidang mana yang ditandai kotor. Opsi ini saling eksklusif denganCRecordset::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 olehClassWizard
. Opsi ini saling eksklusif denganCRecordset::optimizeBulkAdd
. Jika Anda menentukanCRecordset::useMultiRowFetch
, maka opsiCRecordset::noDirtyFieldCheck
akan diaktifkan secara otomatis (buffering ganda tidak akan tersedia); pada kumpulan rekaman hanya-terusan, opsiCRecordset::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 memanggilMove
dengan parameter nRows yang diatur ke 0, danCRecordset::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 memanggilSetFieldDirty
fungsi anggota danSetFieldNull
. Buffering ganda di kelasCRecordset
mirip dengan buffering ganda di kelasCDaoRecordset
. Namun, dalamCRecordset
, Anda tidak dapat mengaktifkan buffering ganda pada bidang individual; Anda mengaktifkannya untuk semua bidang atau menonaktifkannya untuk semua bidang. Jika Anda menentukan opsiCRecordset::useMultiRowFetch
, makaCRecordset::noDirtyFieldCheck
diaktifkan secara otomatis; namun,SetFieldDirty
danSetFieldNull
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 jikaRequery
fungsi anggota tidak akan pernah dipanggil.CRecordset::useExtendedFetch
TerapkanSQLExtendedFetch
alih-alihSQLFetch
. Ini dirancang untuk mengimplementasikan pengambilan baris massal pada kumpulan rekaman khusus maju. Jika Anda menentukan opsiCRecordset::useMultiRowFetch
pada kumpulan rekaman hanya-terusan, makaCRecordset::useExtendedFetch
akan diaktifkan secara otomatis.CRecordset::userAllocMultiRowBuffers
Pengguna akan mengalokasikan buffer penyimpanan untuk data. Gunakan opsi ini denganCRecordset::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). MenentukanCRecordset::userAllocMultiRowBuffers
tanpa menentukanCRecordset::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 SQLSetPos
ODBC 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 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.")
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.
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
.
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 keUpdate
.pessimistic
Penguncian pesimis mengunci rekaman segera setelahEdit
dipanggil dan membuatnya tetap terkunci sampaiUpdate
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 SQLSetPos
ODBC 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 SQLSetPos
ODBC 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 AddNew
Edit
, 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).
Lihat juga
CObject
class
Bagan hierarki
CDatabase
class
CRecordView
class