Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
AddNew menyiapkan rekaman baru yang kosong menggunakan anggota data bidang himpunan rekaman. Setelah Anda memanggil AddNew, atur nilai yang Anda inginkan di anggota data bidang himpunan catatan. (Anda tidak perlu memanggil Edit fungsi anggota untuk tujuan ini; gunakan Edit hanya untuk rekaman yang ada.) Saat Anda memanggil Update, nilai yang diubah di anggota data bidang disimpan di sumber data.
Perhatian
Jika Anda menggulir ke rekaman baru sebelum memanggil Update, rekaman baru hilang, dan tidak ada peringatan yang diberikan.
Jika sumber data mendukung transaksi, Anda dapat melakukan panggilan sebagai AddNew bagian dari transaksi. Untuk informasi selengkapnya tentang transaksi, lihat kelas CDatabase. Panggil CDatabase::BeginTrans sebelum memanggil AddNew.
Catatan
Untuk dinaset, rekaman baru ditambahkan ke recordset sebagai rekaman terakhir. Rekaman yang ditambahkan tidak ditambahkan ke rekam jepret; Anda harus memanggil Requery untuk menyegarkan kumpulan rekaman.
Ini ilegal untuk memanggil AddNew recordset yang fungsi anggotanya Open belum dipanggil.
CDBException akan dilemparkan jika Anda memanggil AddNew kumpulan rekaman yang tidak dapat ditambahkan. Anda dapat menentukan apakah recordset dapat diperbarui dengan memanggil CanAppend.
Untuk informasi selengkapnya, lihat artikel berikut ini: Recordset: Cara Rekaman Memperbarui Rekaman (ODBC), Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC), dan Transaksi (ODBC).
Contoh
lihat Transaksi: Melakukan Transaksi dalam Recordset (ODBC).
CRecordset::CanAppend
Menentukan apakah kumpulan rekaman yang dibuka sebelumnya memungkinkan Anda menambahkan rekaman baru.
BOOL CanAppend() const;
Nilai hasil
Bukan nol jika kumpulan rekaman memungkinkan penambahan rekaman baru; jika tidak, 0.
CanAppend akan mengembalikan 0 jika Anda membuka recordset sebagai baca-saja.
CRecordset::CanBookmark
Menentukan apakah kumpulan rekaman memungkinkan Anda menandai rekaman menggunakan marka buku.
BOOL CanBookmark() const;
Nilai hasil
Bukan nol jika recordset mendukung marka buku; jika tidak, 0.
Keterangan
Fungsi ini tidak bergantung pada CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota.
CanBookmark menunjukkan apakah driver ODBC dan jenis kursor yang diberikan mendukung marka buku.
CRecordset::useBookmarks menunjukkan apakah marka buku akan tersedia, asalkan didukung.
Catatan
Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.
Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).
CRecordset::Cancel
Meminta agar sumber data membatalkan operasi asinkron yang sedang berlangsung atau proses dari utas kedua.
void Cancel();
Keterangan
Kelas MFC ODBC tidak lagi menggunakan pemrosesan asinkron; untuk melakukan operasi asinkron, Anda harus langsung memanggil fungsi SQLSetConnectOptionODBC API . Untuk informasi selengkapnya, lihat "Menjalankan Fungsi Secara Asinkron" di Panduan Pemrogram ODBC SDK.
CRecordset::CancelUpdate
Membatalkan pembaruan yang tertunda, yang disebabkan oleh Edit operasi atau AddNew , sebelumnya Update dipanggil.
void CancelUpdate();
Keterangan
Catatan
Fungsi anggota ini tidak berlaku pada kumpulan rekaman yang menggunakan pengambilan baris massal, karena kumpulan rekaman tersebut tidak dapat memanggil Edit, , AddNewatau Update. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Jika pemeriksaan bidang kotor otomatis diaktifkan, CancelUpdate akan memulihkan variabel anggota ke nilai yang mereka miliki sebelumnya Edit atau AddNew dipanggil; jika tidak, perubahan nilai apa pun akan tetap ada. Secara default, pemeriksaan bidang otomatis diaktifkan saat kumpulan rekaman dibuka. Untuk menonaktifkannya, Anda harus menentukan CRecordset::noDirtyFieldCheck dalam parameter fungsi Anggota terbukadwOptions.
Untuk informasi selengkapnya tentang memperbarui data, lihat Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC).
CRecordset::CanRestart
Menentukan apakah kumpulan rekaman memungkinkan memulai ulang kuerinya (untuk me-refresh rekamannya) dengan memanggil Requery fungsi anggota.
BOOL CanRestart() const;
Nilai hasil
Bukan nol jika kueri ulang diizinkan; jika tidak, 0.
CRecordset::CanScroll
Menentukan apakah kumpulan rekaman memungkinkan pengguliran.
BOOL CanScroll() const;
Nilai hasil
Bukan nol jika kumpulan rekaman memungkinkan pengguliran; jika tidak, 0.
Keterangan
Untuk informasi selengkapnya tentang menggulir, lihat Recordset: Scrolling (ODBC).
CRecordset::CanTransact
Menentukan apakah set rekaman mengizinkan transaksi.
BOOL CanTransact() const;
Nilai hasil
Nonzero jika recordset memungkinkan transaksi; jika tidak, 0.
Keterangan
Untuk informasi selengkapnya, lihat Transaksi (ODBC).
CRecordset::CanUpdate
Menentukan apakah kumpulan rekaman dapat diperbarui.
BOOL CanUpdate() const;
Nilai hasil
Bukan nol jika set rekaman dapat diperbarui; jika tidak, 0.
Keterangan
Kumpulan rekaman mungkin bersifat baca-saja jika sumber data yang mendasar bersifat baca-saja atau jika Anda menentukan CRecordset::readOnly dalam dwOptions parameter saat Anda membuka kumpulan rekaman.
CRecordset::CheckRowsetError
Dipanggil untuk menangani kesalahan yang dihasilkan selama pengambilan rekaman.
virtual void CheckRowsetError(RETCODE nRetCode);
Parameter
nRetCode
Kode pengembalian fungsi ODBC API. Untuk detailnya, lihat Keterangan.
Keterangan
Fungsi anggota virtual ini menangani kesalahan yang terjadi ketika rekaman diambil, dan berguna selama pengambilan baris massal. Anda mungkin ingin mempertimbangkan untuk mengambil alih CheckRowsetError untuk menerapkan penanganan kesalahan Anda sendiri.
CheckRowsetError dipanggil secara otomatis dalam operasi navigasi kursor, seperti Open, Requery, atau operasi apa pun Move . Ini melewati nilai pengembalian dari fungsi SQLExtendedFetchODBC API . Tabel berikut mencantumkan nilai yang mungkin untuk nRetCode parameter .
| nKode Ulang | Deskripsi |
|---|---|
SQL_SUCCESS |
Fungsi berhasil diselesaikan; tidak ada informasi tambahan yang tersedia. |
SQL_SUCCESS_WITH_INFO |
Fungsi berhasil diselesaikan, mungkin dengan kesalahan nonfatal. Informasi tambahan dapat diperoleh dengan memanggil SQLError. |
SQL_NO_DATA_FOUND |
Semua baris dari kumpulan hasil telah diambil. |
SQL_ERROR |
Fungsi gagal. Informasi tambahan dapat diperoleh dengan memanggil SQLError. |
SQL_INVALID_HANDLE |
Fungsi gagal karena handel lingkungan, handel koneksi, atau handel pernyataan yang tidak valid. Ini menunjukkan kesalahan pemrograman. Tidak ada informasi tambahan yang tersedia dari SQLError. |
SQL_STILL_EXECUTING |
Fungsi yang dimulai secara asinkron masih dijalankan. Secara default, MFC tidak akan pernah meneruskan nilai ini ke CheckRowsetError; MFC akan terus memanggil SQLExtendedFetch sampai tidak lagi kembali SQL_STILL_EXECUTING. |
Untuk informasi selengkapnya tentang SQLError, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::Close
Menutup kumpulan rekaman.
virtual void Close();
Keterangan
ODBC HSTMT dan semua memori kerangka kerja yang dialokasikan untuk kumpulan rekaman dibatalkan alokasinya. Biasanya setelah memanggil Close, Anda menghapus objek recordset C++ jika dialokasikan dengan new.
Anda dapat menghubungi Open lagi setelah memanggil Close. Ini memungkinkan Anda menggunakan kembali objek recordset. Alternatifnya adalah memanggil Requery.
Contoh
// Construct a snapshot object
CCustomer rsCustSet(NULL);
if (!rsCustSet.Open())
return;
// Use the snapshot ...
// Close the snapshot
rsCustSet.Close();
// Destructor is called when the function exits
CRecordset::CRecordset
Membuat CRecordset objek.
CRecordset(CDatabase* pDatabase = NULL);
Parameter
pDatabase
Berisi penunjuk ke CDatabase objek atau nilai NULL. Jika tidak NULL dan CDatabase fungsi anggota objek Open belum dipanggil untuk menyambungkannya ke sumber data, set rekaman mencoba membukanya untuk Anda selama panggilannya sendiri Open . Jika Anda lulus NULL, CDatabase objek dibangun dan terhubung untuk Anda menggunakan informasi sumber data yang Anda tentukan saat anda memperoleh kelas recordset anda dengan ClassWizard.
Keterangan
Anda dapat menggunakan CRecordset secara langsung atau mendapatkan kelas khusus aplikasi dari CRecordset. Anda dapat menggunakan ClassWizard untuk memperoleh kelas recordset Anda.
Catatan
Kelas turunan harus menyediakan konstruktornya sendiri. Di konstruktor kelas turunan Anda, panggil konstruktor CRecordset::CRecordset, meneruskan parameter yang sesuai bersama dengannya.
Teruskan NULL ke konstruktor recordset Anda untuk membuat CDatabase objek dan terhubung untuk Anda secara otomatis. Ini adalah singkatan berguna yang tidak mengharuskan Anda untuk membangun dan menghubungkan CDatabase objek sebelum membuat kumpulan rekaman Anda.
Contoh
Untuk informasi selengkapnya, lihat Recordset: Mendeklarasikan Kelas untuk Tabel (ODBC).
CRecordset::Delete
Menghapus rekaman saat ini.
virtual void Delete();
Keterangan
Setelah penghapusan berhasil, anggota data bidang kumpulan rekaman diatur ke nilai Null, dan Anda harus secara eksplisit memanggil salah Move satu fungsi untuk memindahkan rekaman yang dihapus. Setelah Anda memindahkan rekaman yang dihapus, tidak dimungkinkan untuk kembali ke rekaman tersebut. Jika sumber data mendukung transaksi, Anda dapat melakukan Delete panggilan sebagai bagian dari transaksi. Untuk informasi selengkapnya, lihat Transaksi (ODBC).
Catatan
Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Delete. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Perhatian
Kumpulan rekaman harus dapat diperbarui dan harus ada rekaman yang valid saat ini dalam kumpulan rekaman saat Anda memanggil Delete; jika tidak, kesalahan terjadi. Misalnya, jika Anda menghapus rekaman tetapi tidak menggulir ke rekaman baru sebelum Anda memanggil Delete lagi, Delete melempar CDBException.
Tidak seperti AddNew dan Edit, panggilan ke Delete tidak diikuti oleh panggilan ke Update.
Delete Jika panggilan gagal, anggota data bidang dibiarkan tidak berubah.
Contoh
Contoh ini memperlihatkan kumpulan rekaman yang dibuat pada bingkai fungsi. Contoh mengasumsikan keberadaan m_dbCust, variabel anggota jenis CDatabase yang sudah terhubung ke sumber data.
// Create a derived CRecordset object
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();
if (rsCustSet.IsEOF() || !rsCustSet.CanUpdate() ||
!rsCustSet.CanTransact())
{
return;
}
m_dbCust.BeginTrans();
// Perhaps scroll to a new record...
// Delete the current record
rsCustSet.Delete();
// Finished commands for this transaction
if (IDYES == AfxMessageBox(_T("Commit transaction?"), MB_YESNO))
m_dbCust.CommitTrans();
else // User changed mind
m_dbCust.Rollback();
CRecordset::DoBulkFieldExchange
Dipanggil untuk bertukar baris data massal dari sumber data ke kumpulan rekaman. Menerapkan pertukaran bidang rekaman massal (RFX Massal).
virtual void DoBulkFieldExchange(CFieldExchange* pFX);
Parameter
pFX
Penunjuk ke CFieldExchange objek. Kerangka kerja sudah menyiapkan objek ini untuk menentukan konteks untuk operasi pertukaran bidang.
Keterangan
Saat pengambilan baris massal diimplementasikan, kerangka kerja memanggil fungsi anggota ini untuk mentransfer data secara otomatis dari sumber data ke objek kumpulan rekaman Anda.
DoBulkFieldExchange juga mengikat anggota data parameter Anda, jika ada, ke tempat penampung parameter dalam string pernyataan SQL untuk pilihan kumpulan rekaman.
Jika pengambilan baris massal tidak diimplementasikan, kerangka kerja akan memanggil DoFieldExchange. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi parameter dwOptions dalam Open fungsi anggota.
Catatan
DoBulkFieldExchange hanya tersedia jika Anda menggunakan kelas yang berasal dari CRecordset. Jika Anda telah membuat objek recordset langsung dari CRecordset, Anda harus memanggil GetFieldValue fungsi anggota untuk mengambil data.
Pertukaran bidang rekaman massal (RFX massal) mirip dengan pertukaran bidang rekaman (RFX). Data secara otomatis ditransfer dari sumber data ke objek recordset. Namun, Anda tidak dapat memanggil AddNew, , EditDelete, atau Update untuk mentransfer perubahan kembali ke sumber data. Kelas CRecordset saat ini tidak menyediakan mekanisme untuk memperbarui baris data massal; namun, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API .
ClassWizard tidak mendukung pertukaran bidang rekaman massal; oleh karena itu, Anda harus mengambil DoBulkFieldExchange alih secara manual dengan menulis panggilan ke fungsi RFX Massal. Untuk informasi selengkapnya tentang fungsi-fungsi ini, lihat Fungsi Pertukaran Bidang Rekaman.
Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC). Untuk informasi terkait, lihat Record Field Exchange (RFX).
CRecordset::DoFieldExchange
Dipanggil untuk bertukar data (di kedua arah) antara anggota data bidang dari himpunan rekaman dan rekaman terkait pada sumber data. Menerapkan pertukaran bidang rekaman (RFX).
virtual void DoFieldExchange(CFieldExchange* pFX);
Parameter
pFX
Penunjuk ke CFieldExchange objek. Kerangka kerja sudah menyiapkan objek ini untuk menentukan konteks untuk operasi pertukaran bidang.
Keterangan
Saat pengambilan baris massal tidak diimplementasikan, kerangka kerja memanggil fungsi anggota ini untuk secara otomatis bertukar data antara anggota data bidang objek recordset Anda dan kolom yang sesuai dari rekaman saat ini pada sumber data.
DoFieldExchange juga mengikat anggota data parameter Anda, jika ada, ke tempat penampung parameter dalam string pernyataan SQL untuk pilihan kumpulan rekaman.
Jika pengambilan baris massal diimplementasikan, kerangka kerja akan memanggil DoBulkFieldExchange. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.
Catatan
DoFieldExchange hanya tersedia jika Anda menggunakan kelas yang berasal dari CRecordset. Jika Anda telah membuat objek kumpulan rekaman langsung dari CRecordset, Anda harus memanggil fungsi anggota GetFieldValue untuk mengambil data.
Pertukaran data bidang, yang disebut pertukaran bidang rekaman (RFX), berfungsi di kedua arah: dari anggota data bidang objek rekaman ke bidang rekaman pada sumber data, dan dari rekaman pada sumber data ke objek kumpulan rekaman.
Satu-satunya tindakan yang biasanya harus Anda ambil untuk diterapkan DoFieldExchange untuk kelas recordset turunan Anda adalah membuat kelas dengan ClassWizard dan menentukan nama dan jenis data anggota data bidang. Anda juga dapat menambahkan kode ke apa yang ditulis ClassWizard untuk menentukan anggota data parameter atau untuk menangani kolom apa pun yang Anda ikat secara dinamis. Untuk informasi selengkapnya, lihat Recordset: Dynamically Binding Data Columns (ODBC).
Saat Anda mendeklarasikan kelas recordset turunan Anda dengan ClassWizard, wizard menulis penimpaan DoFieldExchange untuk Anda, yang menyerupai contoh berikut:
void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
// Macros such as RFX_Text() and RFX_Int() are dependent on the
// type of the member variable, not the type of the field in the database.
// ODBC will try to automatically convert the column value to the requested type
RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
RFX_Long(pFX, _T("[BillingID]"), m_BillingID);
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param"), m_strParam);
}
Untuk informasi selengkapnya tentang fungsi RFX, lihat Fungsi Pertukaran Bidang Rekaman.
Untuk contoh dan detail lebih lanjut tentang DoFieldExchange, lihat Pertukaran Bidang Rekaman: Cara Kerja RFX. Untuk informasi umum tentang RFX, lihat Pertukaran Bidang Rekaman.
CRecordset::Edit
Perbolehkan perubahan pada rekaman saat ini.
virtual void Edit();
Keterangan
Setelah memanggil Edit, Anda dapat mengubah anggota data bidang dengan langsung mengatur ulang nilainya. Operasi selesai saat Anda memanggil Update fungsi anggota untuk menyimpan perubahan Anda pada sumber data.
Catatan
Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Edit. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Edit menyimpan nilai anggota data himpunan catatan. Jika Anda memanggil Edit, membuat perubahan, lalu memanggil Edit lagi, nilai rekaman dipulihkan ke apa yang mereka lakukan sebelum panggilan pertama Edit .
Dalam beberapa kasus, Anda mungkin ingin memperbarui kolom dengan membuatnya Null (tidak berisi data). Untuk melakukannya, panggil SetFieldNull dengan parameter TRUE untuk menandai bidang Null; ini juga menyebabkan kolom diperbarui. Jika Anda ingin bidang ditulis ke sumber data meskipun nilainya belum berubah, panggil SetFieldDirty dengan parameter TRUE. Ini berfungsi bahkan jika bidang memiliki nilai Null.
Jika sumber data mendukung transaksi, Anda dapat melakukan Edit panggilan sebagai bagian dari transaksi. Panggil CDatabase::BeginTrans sebelum memanggil Edit dan setelah recordset dibuka. Selain itu, panggilan CDatabase::CommitTrans bukan pengganti panggilan Update untuk menyelesaikan Edit operasi. Untuk informasi selengkapnya tentang transaksi, lihat kelas CDatabase.
Bergantung pada mode penguncian saat ini, rekaman yang diperbarui dapat dikunci Edit hingga Anda memanggil Update atau menggulir ke rekaman lain, atau mungkin hanya dikunci selama Edit panggilan. Anda dapat mengubah mode penguncian dengan SetLockingMode.
Nilai sebelumnya dari rekaman saat ini dipulihkan jika Anda menggulir ke rekaman baru sebelum memanggil Update.
CDBException dilemparkan jika Anda memanggil Edit kumpulan rekaman yang tidak dapat diperbarui atau jika tidak ada rekaman saat ini.
Untuk informasi selengkapnya, lihat artikel Transaksi (ODBC) dan Recordset: Mengunci Rekaman (ODBC).
Contoh
// To edit a record, first set up the edit buffer
rsCustSet.Edit();
// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");
// Finally, complete the operation
if (!rsCustSet.Update())
{
// Handle the failure to update
AfxMessageBox(_T("Couldn't update record!"));
}
CRecordset::FlushResultSet
Mengambil kumpulan hasil berikutnya dari kueri yang telah ditentukan sebelumnya (prosedur tersimpan), jika ada beberapa kumpulan hasil.
BOOL FlushResultSet();
Nilai hasil
Nonzero jika ada lebih banyak tataan hasil yang akan diambil; jika tidak, 0.
Keterangan
Anda harus memanggil FlushResultSet hanya ketika Anda selesai dengan kursor pada tataan hasil saat ini. Saat Anda mengambil hasil berikutnya yang ditetapkan dengan memanggil FlushResultSet, kursor Anda tidak valid pada tataan hasil tersebut MoveNext ; Anda harus memanggil fungsi anggota setelah memanggil FlushResultSet.
Jika kueri yang telah ditentukan sebelumnya menggunakan parameter output atau parameter input/output, Anda harus memanggil FlushResultSet hingga kueri kembali FALSE(nilai 0), untuk mendapatkan nilai parameter ini.
FlushResultSet memanggil fungsi SQLMoreResultsODBC API . Jika SQLMoreResults mengembalikan SQL_ERROR atau SQL_INVALID_HANDLE, maka FlushResultSet akan melemparkan pengecualian. Untuk informasi selengkapnya tentang SQLMoreResults, lihat Windows SDK.
Prosedur tersimpan Anda harus memiliki bidang terikat jika Anda ingin memanggil FlushResultSet.
Contoh
Kode berikut mengasumsikan bahwa COutParamRecordset adalah CRecordsetobjek -turunan berdasarkan kueri yang telah ditentukan sebelumnya dengan parameter input dan parameter output, dan memiliki beberapa tataan hasil. Perhatikan struktur penimpaan DoFieldExchange .
// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Long(pFX, _T("Param1"), m_nCountParam);
// The "Param1" name here is a dummy name
// that is never used
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param2"), m_strNameParam);
// The "Param2" name here is a dummy name
// that is never used
}
// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");
// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor
// type for multiple rowset returning stored
// procedures
rs.Open(CRecordset::forwardOnly,
_T("{? = CALL GetCourses( ? )}"),
CRecordset::readOnly);
// Loop through all the data in the first result set
while (!rs.IsEOF())
{
CString strFieldValue;
for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
// Retrieve other result sets...
while (rs.FlushResultSet())
{
// must call MoveNext because cursor is invalid
rs.MoveNext();
while (!rs.IsEOF())
{
CString strFieldValue;
for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
{
rs.GetFieldValue(nIndex, strFieldValue);
// TO DO: Use field value string.
}
rs.MoveNext();
}
}
// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.
// TO DO: Use m_nCountParam
// Cleanup
rs.Close();
CRecordset::GetBookmark
Mendapatkan nilai marka buku untuk rekaman saat ini.
void GetBookmark(CDBVariant& varBookmark);
Parameter
varBookmark
Referensi ke objek yang CDBVariant mewakili marka buku pada rekaman saat ini.
Keterangan
Untuk menentukan apakah marka buku didukung pada recordset, panggil CanBookmark. Untuk membuat marka buku tersedia jika didukung, Anda harus mengatur CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota.
Catatan
Jika bookmark tidak didukung atau tidak tersedia, panggilan GetBookmark akan mengakibatkan pengecualian dilemparkan. Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.
GetBookmark menetapkan nilai marka buku untuk rekaman saat ini ke CDBVariant objek. Untuk kembali ke rekaman tersebut kapan saja setelah pindah ke rekaman lain, panggil SetBookmark dengan objek yang CDBVariant sesuai.
Catatan
Setelah operasi recordset tertentu, marka buku mungkin tidak lagi valid. Misalnya, jika Anda memanggil GetBookmark diikuti dengan Requery, Anda mungkin tidak dapat kembali ke rekaman dengan SetBookmark. Panggil CDatabase::GetBookmarkPersistence untuk memeriksa apakah Anda dapat dengan aman memanggil SetBookmark.
Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).
CRecordset::GetDefaultConnect
Dipanggil untuk mendapatkan string koneksi default.
virtual CString GetDefaultConnect();
Nilai hasil
CString yang berisi string koneksi default.
Keterangan
Kerangka kerja memanggil fungsi anggota ini untuk mendapatkan string koneksi default untuk sumber data yang menjadi dasar himpunan catatan.
ClassWizard menerapkan fungsi ini untuk Anda dengan mengidentifikasi sumber data yang sama dengan yang Anda gunakan ClassWizard untuk mendapatkan informasi tentang tabel dan kolom. Anda mungkin akan merasa nyaman untuk mengandalkan koneksi default ini saat mengembangkan aplikasi Anda. Tetapi koneksi default mungkin tidak sesuai untuk pengguna aplikasi Anda. Jika demikian, Anda harus mengisi ulang fungsi ini, membuang ClassWizardversi. Untuk informasi selengkapnya tentang string koneksi, lihat Sumber Data (ODBC).
CRecordset::GetDefaultSQL
Dipanggil untuk mendapatkan string SQL default untuk dijalankan.
virtual CString GetDefaultSQL();
Nilai hasil
CString yang berisi pernyataan SQL default.
Keterangan
Kerangka kerja memanggil fungsi anggota ini untuk mendapatkan pernyataan SQL default tempat kumpulan rekaman didasarkan. Ini mungkin nama tabel atau pernyataan SQL SELECT .
Anda secara tidak langsung menentukan pernyataan SQL default dengan mendeklarasikan kelas recordset Anda dengan ClassWizard, dan ClassWizard melakukan tugas ini untuk Anda.
Jika Anda memerlukan string pernyataan SQL untuk penggunaan Anda sendiri, panggil GetSQL, yang mengembalikan pernyataan SQL yang digunakan untuk memilih rekaman recordset saat dibuka. Anda dapat mengedit string SQL default dalam penimpaan kelas Anda dari GetDefaultSQL. Misalnya, Anda dapat menentukan panggilan ke kueri yang telah ditentukan sebelumnya menggunakan CALL pernyataan. (Catatan, bagaimanapun, bahwa jika Anda mengedit GetDefaultSQL, Anda juga perlu memodifikasi m_nFields agar sesuai dengan jumlah kolom di sumber data.)
Untuk informasi selengkapnya, lihat Recordset: Mendeklarasikan Kelas untuk Tabel (ODBC).
Perhatian
Nama tabel akan kosong jika kerangka kerja tidak dapat mengidentifikasi nama tabel, jika beberapa nama tabel disediakan, atau jika CALL pernyataan tidak dapat ditafsirkan. Saat Anda menggunakan CALL pernyataan, jangan sisipkan spasi putih antara kurung kurawal dan CALL kata kunci, atau sebelum kurung kurawal atau sebelum SELECT kata kunci dalam SELECT pernyataan.
CRecordset::GetFieldValue
Mengambil data bidang dalam rekaman saat ini.
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE);
void GetFieldValue(
LPCTSTR lpszName,
CStringA& strValue
);
void GetFieldValue(
LPCTSTR lpszName,
CStringW& strValue
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE);
void GetFieldValue(
short nIndex,
CStringA& strValue);
void GetFieldValue(
short nIndex,
CStringW& strValue);
Parameter
lpszName
Nama bidang.
varValue Referensi ke CDBVariant objek yang akan menyimpan nilai bidang.
nFieldType
Tipe data ODBC C dari bidang . Menggunakan nilai default, DEFAULT_FIELD_TYPE, memaksa GetFieldValue untuk menentukan jenis data C dari jenis data SQL, berdasarkan tabel berikut. Jika tidak, Anda dapat menentukan jenis data secara langsung atau memilih jenis data yang kompatibel; misalnya, Anda dapat menyimpan jenis data apa pun ke dalam SQL_C_CHAR.
| Jenis data C | Tipe data SQL |
|---|---|
SQL_C_BIT |
SQL_BIT |
SQL_C_UTINYINT |
SQL_TINYINT |
SQL_C_SSHORT |
SQL_SMALLINT |
SQL_C_SLONG |
SQL_INTEGER |
SQL_C_FLOAT |
SQL_REAL |
SQL_C_DOUBLE |
SQL_FLOATSQL_DOUBLE |
SQL_C_TIMESTAMP |
SQL_DATESQL_TIMESQL_TIMESTAMP |
SQL_C_CHAR |
SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR |
SQL_C_BINARY |
SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY |
Untuk informasi selengkapnya tentang jenis data ODBC, lihat topik "Jenis Data SQL" dan "Jenis Data C" di Lampiran D dari Windows SDK.
nIndex
Indeks bidang berbasis nol.
strValue
Referensi ke CString objek yang akan menyimpan nilai bidang yang dikonversi menjadi teks, terlepas dari jenis data bidang.
Keterangan
Anda dapat mencari bidang baik berdasarkan nama atau menurut indeks. Anda dapat menyimpan nilai bidang di CDBVariant objek atau CString objek.
Jika Anda telah menerapkan pengambilan baris massal, rekaman saat ini selalu diposisikan pada rekaman pertama dalam set baris. Untuk menggunakan GetFieldValue pada rekaman dalam set baris tertentu, Anda harus terlebih dahulu memanggil SetRowsetCursorPosition fungsi anggota untuk memindahkan kursor ke baris yang diinginkan dalam set baris tersebut. Lalu panggil GetFieldValue baris itu. Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.
Anda dapat menggunakan GetFieldValue untuk mengambil bidang secara dinamis pada waktu proses daripada mengikatnya secara statis pada waktu desain. Misalnya, jika Anda telah mendeklarasikan objek kumpulan rekaman langsung dari CRecordset, Anda harus menggunakan GetFieldValue untuk mengambil data bidang; pertukaran bidang rekaman (RFX), atau pertukaran bidang rekaman massal (RFX massal), tidak diimplementasikan.
Catatan
Jika Anda mendeklarasikan objek recordset tanpa berasal dari CRecordset, jangan memuat Pustaka Kursor ODBC. Pustaka kursor mengharuskan kumpulan rekaman memiliki setidaknya satu kolom terikat; namun, saat Anda menggunakan CRecordset secara langsung, tidak ada kolom yang terikat. Anggota berfungsi CDatabase::OpenEx dan CDatabase::Open mengontrol apakah pustaka kursor akan dimuat.
GetFieldValue memanggil fungsi SQLGetDataODBC API . Jika driver Anda menghasilkan nilai SQL_NO_TOTAL untuk panjang aktual nilai bidang, GetFieldValue melemparkan pengecualian. Untuk informasi selengkapnya tentang SQLGetData, lihat Windows SDK.
Contoh
Kode sampel berikut mengilustrasikan panggilan ke GetFieldValue untuk objek recordset yang dideklarasikan langsung dari CRecordset.
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
for (short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
Catatan
Tidak seperti kelas CDaoRecordsetDAO , CRecordset tidak memiliki SetFieldValue fungsi anggota. Jika Anda membuat objek langsung dari CRecordset, objek tersebut secara efektif bersifat baca-saja.
Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::GetODBCFieldCount
Mengambil jumlah total bidang di objek recordset Anda.
short GetODBCFieldCount() const;
Nilai hasil
Jumlah bidang dalam kumpulan rekaman.
Keterangan
Untuk informasi selengkapnya tentang membuat kumpulan rekaman, lihat Recordset: Membuat dan Menutup Recordsets (ODBC).
CRecordset::GetODBCFieldInfo
Mendapatkan informasi tentang bidang dalam kumpulan rekaman.
void GetODBCFieldInfo(
LPCTSTR lpszName,
CODBCFieldInfo& fieldinfo);
void GetODBCFieldInfo(
short nIndex,
CODBCFieldInfo& fieldinfo);
Parameter
lpszName
Nama bidang.
fieldinfo
Referensi ke CODBCFieldInfo struktur.
nIndex
Indeks bidang berbasis nol.
Keterangan
Satu versi fungsi memungkinkan Anda mencari bidang berdasarkan nama. Versi lainnya memungkinkan Anda mencari bidang menurut indeks.
Untuk deskripsi tentang informasi yang dikembalikan, lihat strukturnya CODBCFieldInfo .
Untuk informasi selengkapnya tentang membuat kumpulan rekaman, lihat Recordset: Membuat dan Menutup Recordsets (ODBC).
CRecordset::GetRecordCount
Menentukan ukuran kumpulan rekaman.
long GetRecordCount() const;
Nilai hasil
Jumlah rekaman dalam kumpulan rekaman; 0 jika kumpulan rekaman tidak berisi rekaman; atau -1 jika jumlah rekaman tidak dapat ditentukan.
Keterangan
Perhatian
Jumlah rekaman dipertahankan sebagai "tanda air tinggi," rekaman bernomor tertinggi yang belum terlihat saat pengguna bergerak melalui rekaman. Jumlah total rekaman hanya diketahui setelah pengguna bergerak melampaui rekaman terakhir. Untuk alasan performa, jumlah tidak diperbarui saat Anda memanggil MoveLast. Untuk menghitung rekaman sendiri, panggil MoveNext berulang kali hingga IsEOF mengembalikan nonzero. Menambahkan rekaman melalui CRecordset::AddNew dan Update meningkatkan jumlah; menghapus rekaman melalui CRecordset::Delete mengurangi jumlah.
CRecordset::GetRowsetSize
Mendapatkan pengaturan saat ini untuk jumlah baris yang ingin Anda ambil selama pengambilan tertentu.
DWORD GetRowsetSize() const;
Nilai hasil
Jumlah baris yang akan diambil selama pengambilan tertentu.
Keterangan
Jika Anda menggunakan pengambilan baris massal, ukuran set baris default saat kumpulan rekaman dibuka adalah 25; jika tidak, itu adalah 1.
Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dalam dwOptions parameter Open fungsi anggota. Untuk mengubah pengaturan untuk ukuran set baris, panggil SetRowsetSize.
Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::GetRowsFetched
Menentukan berapa banyak rekaman yang diambil setelah pengambilan.
DWORD GetRowsFetched() const;
Nilai hasil
Jumlah baris yang diambil dari sumber data setelah pengambilan tertentu.
Keterangan
Ini berguna ketika Anda telah menerapkan pengambilan baris massal. Ukuran set baris biasanya menunjukkan berapa banyak baris yang akan diambil dari pengambilan. Namun, jumlah total baris dalam kumpulan rekaman juga memengaruhi berapa banyak baris yang akan diambil dalam set baris. Misalnya, jika himpunan MoveNext catatan Anda memiliki 10 rekaman dengan pengaturan ukuran set baris empat, maka perulangan melalui kumpulan rekaman dengan panggilan akan mengakibatkan set baris akhir hanya memiliki dua rekaman.
Untuk menerapkan pengambilan baris massal, Anda harus menentukan CRecordset::useMultiRowFetch opsi dalam parameter dwOptions dari Open fungsi anggota. Untuk menentukan ukuran set baris, panggil SetRowsetSize.
Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Contoh
CMultiCustomer rs(&m_dbCust);
// Set the rowset size
rs.SetRowsetSize(5);
// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);
// loop through the recordset by rowsets
while (!rs.IsEOF())
{
for (int rowCount = 0; rowCount < (int)rs.GetRowsFetched(); rowCount++)
{
// do something
}
rs.MoveNext();
}
rs.Close();
CRecordset::GetRowStatus
Mendapatkan status untuk baris dalam set baris saat ini.
WORD GetRowStatus(WORD wRow) const;
Parameter
wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari 1 hingga ukuran set baris.
Nilai hasil
Nilai status untuk baris. Untuk detailnya, lihat Keterangan.
Keterangan
GetRowStatus mengembalikan nilai yang menunjukkan perubahan status ke baris sejak terakhir kali diambil dari sumber data, atau tidak ada baris yang terkait dengan wRow yang diambil. Tabel berikut mencantumkan kemungkinan nilai pengembalian.
| Nilai status | Deskripsi |
|---|---|
SQL_ROW_SUCCESS |
Baris tidak berubah. |
SQL_ROW_UPDATED |
Baris telah diperbarui. |
SQL_ROW_DELETED |
Baris telah dihapus. |
SQL_ROW_ADDED |
Baris telah ditambahkan. |
SQL_ROW_ERROR |
Baris tidak dapat diambil karena kesalahan. |
SQL_ROW_NOROW |
Tidak ada baris yang wRowsesuai dengan . |
Untuk informasi selengkapnya, lihat fungsi SQLExtendedFetch ODBC API di Windows SDK.
CRecordset::GetStatus
Menentukan indeks rekaman saat ini dalam kumpulan rekaman dan apakah rekaman terakhir telah terlihat.
void GetStatus(CRecordsetStatus& rStatus) const;
Parameter
rStatus
Referensi ke CRecordsetStatus objek. Untuk informasi selengkapnya, lihat Keterangan.
Keterangan
CRecordset mencoba melacak indeks, tetapi dalam beberapa keadaan ini mungkin tidak mungkin. Lihat GetRecordCount untuk penjelasannya.
Struktur CRecordsetStatus memiliki bentuk berikut:
struct CRecordsetStatus
{
long m_lCurrentRecord;
BOOL m_bRecordCountFinal;
};
Dua anggota CRecordsetStatus memiliki arti berikut:
m_lCurrentRecordBerisi indeks berbasis nol dari rekaman saat ini dalam kumpulan rekaman, jika diketahui. Jika indeks tidak dapat ditentukan, anggota ini berisiAFX_CURRENT_RECORD_UNDEFINED(-2). JikaIsBOFTRUE (recordset kosong atau mencoba menggulir sebelum rekaman pertama), makam_lCurrentRecorddiatur keAFX_CURRENT_RECORD_BOF(-1). Jika pada catatan pertama, maka diatur ke 0, rekaman kedua 1, dan sebagainya.m_bRecordCountFinalBukan nol jika jumlah total rekaman dalam kumpulan rekaman telah ditentukan. Umumnya ini harus dicapai dengan memulai di awal recordset dan memanggilMoveNextsampaiIsEOFmengembalikan 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 DoFieldExchange Anda DoBulkFieldExchange untuk kolom yang terikat secara dinamis.
Untuk informasi selengkapnya, lihat artikel Recordset: Dynamically Binding Data Columns (ODBC) dan Recordset: Mengambil Rekaman secara Massal (ODBC).
Contoh
lihat Pertukaran Bidang Rekaman: Menggunakan RFX.
CRecordset::m_nParams
Berisi jumlah anggota data parameter di kelas recordset; artinya, jumlah parameter yang diteruskan dengan kueri recordset.
Keterangan
Jika kelas recordset Anda memiliki anggota data parameter, konstruktor untuk kelas harus menginisialisasi m_nParams dengan angka yang benar. Nilai m_nParams default ke 0. Jika Anda menambahkan anggota data parameter (yang harus Anda lakukan secara manual) Anda juga harus menambahkan inisialisasi secara manual di konstruktor kelas untuk mencerminkan jumlah parameter (yang harus setidaknya sebesar jumlah tempat penampung '' dalam atau string Anda m_strFilterm_strSort ).
Kerangka kerja menggunakan angka ini saat membuat parameter kueri kumpulan rekaman.
Perhatian
Nomor ini harus sesuai dengan jumlah "param" yang terdaftar di DoFieldExchange atau setelah panggilan ke DoBulkFieldExchange dengan nilai SetFieldTypeparameter , , CFieldExchange::inputParamCFieldExchange::param, atau CFieldExchange::outputParamCFieldExchange::inoutParam .
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.
| Tipe wFetch | 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::dynasetKumpulan 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::snapshotKumpulan 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::dynamicKumpulan 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::forwardOnlyKumpulan rekaman baca-saja dengan hanya menggulir ke depan.Untuk
CRecordset, nilai defaultnya adalahCRecordset::snapshot. Mekanisme nilai default memungkinkan wizard Visual Studio berinteraksi dengan ODBCCRecordsetdan 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
NULLpointer.Nama tabel.
Pernyataan SQL
SELECT(secara opsional dengan SQLWHEREatauORDER BYklausa).Pernyataan
CALLyang menentukan nama kueri yang telah ditentukan sebelumnya (prosedur tersimpan). Berhati-hatilah untuk tidak memasukkan spasi putih antara kurung kurawal danCALLkata 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 DoFieldExchange AndaDoBulkFieldExchange.
dwOptions
Bitmask, yang dapat menentukan kombinasi nilai yang tercantum di bawah ini. Beberapa di antaranya saling eksklusif. Nilai defaultnya adalah none.
CRecordset::noneTidak ada opsi yang diatur. Nilai parameter ini saling eksklusif dengan semua nilai lainnya. Secara default, kumpulan rekaman dapat diperbarui denganEditatauDeletedan memungkinkan penambahan rekaman baru denganAddNew. Updatability tergantung pada sumber data dan opsi yangnOpenTypeAnda 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::appendOnlyJangan izinkanEditatauDeletepada recordset. IzinkanAddNewsaja. Opsi ini saling eksklusif denganCRecordset::readOnly.CRecordset::readOnlyBuka recordset sebagai baca-saja. Opsi ini saling eksklusif denganCRecordset::appendOnly.CRecordset::optimizeBulkAddGunakan pernyataan SQL yang disiapkan untuk mengoptimalkan penambahan banyak rekaman pada satu waktu. Hanya berlaku jika Anda tidak menggunakan fungsiSQLSetPosODBC API untuk memperbarui recordset. Pembaruan pertama menentukan bidang mana yang ditandai kotor. Opsi ini saling eksklusif denganCRecordset::useMultiRowFetch.CRecordset::useMultiRowFetchTerapkan 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::noDirtyFieldCheckakan diaktifkan secara otomatis (buffering ganda tidak akan tersedia); pada kumpulan rekaman hanya-terusan, opsiCRecordset::useExtendedFetchakan diaktifkan secara otomatis. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).CRecordset::skipDeletedRecordsLewati 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 memanggilMovedengan parameter nRows yang diatur ke 0, danCRecordset::skipDeletedRecordsset opsi,Moveakan menegaskan.CRecordset::skipDeletedRecordsmirip 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::skipDeletedRecordsakan melewati baris yang dihapus oleh pengguna lain.CRecordset::useBookmarksDapat 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::noDirtyFieldCheckMatikan pemeriksaan bidang kotor otomatis (buffering ganda). Ini akan meningkatkan performa; namun, Anda harus menandai bidang secara manual sebagai kotor dengan memanggilSetFieldDirtyfungsi anggota danSetFieldNull. Buffering ganda di kelasCRecordsetmirip 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::noDirtyFieldCheckdiaktifkan secara otomatis; namun,SetFieldDirtydanSetFieldNulltidak dapat digunakan pada kumpulan rekaman yang menerapkan pengambilan baris massal.CRecordset::executeDirectJangan gunakan pernyataan SQL yang disiapkan. Untuk peningkatan performa, tentukan opsi ini jikaRequeryfungsi anggota tidak akan pernah dipanggil.CRecordset::useExtendedFetchTerapkanSQLExtendedFetchalih-alihSQLFetch. Ini dirancang untuk mengimplementasikan pengambilan baris massal pada kumpulan rekaman khusus maju. Jika Anda menentukan opsiCRecordset::useMultiRowFetchpada kumpulan rekaman hanya-terusan, makaCRecordset::useExtendedFetchakan diaktifkan secara otomatis.CRecordset::userAllocMultiRowBuffersPengguna akan mengalokasikan buffer penyimpanan untuk data. Gunakan opsi ini denganCRecordset::useMultiRowFetchjika 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::userAllocMultiRowBufferstanpa menentukanCRecordset::useMultiRowFetchhasil 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 FROMCustomer" |
Perhatian
Jangan sisipkan spasi kosong tambahan di string SQL Anda. Misalnya, jika Anda menyisipkan spasi putih antara kurung kurawal dan CALL kata kunci, MFC akan salah menafsirkan string SQL sebagai nama tabel dan memasukkannya ke dalam SELECT pernyataan, yang akan mengakibatkan pengecualian dilemparkan. Demikian pula, jika kueri yang telah ditentukan sebelumnya menggunakan parameter output, jangan sisipkan spasi putih antara kurung kurawal dan simbol ''. Terakhir, Anda tidak boleh menyisipkan spasi kosong sebelum kurung kurawal dalam CALL pernyataan atau sebelum SELECT kata kunci dalam SELECT pernyataan.
Prosedur yang biasa adalah meneruskan NULL ke Open; dalam hal ini, Open memanggil GetDefaultSQL. Jika Anda menggunakan kelas turunan CRecordset , GetDefaultSQL berikan nama tabel yang Anda tentukan di ClassWizard. Anda dapat menentukan informasi lain dalam lpszSQL parameter .
Apa pun yang Anda lewati, Open membuat string SQL akhir untuk kueri (string mungkin memiliki SQL WHERE dan ORDER BY klausa yang ditambahkan ke string yang lpszSQL Anda lewati) lalu menjalankan kueri. Anda dapat memeriksa string yang dibangun dengan memanggil GetSQL setelah memanggil Open. Untuk detail selengkapnya tentang bagaimana kumpulan rekaman membuat pernyataan SQL dan memilih rekaman, lihat Recordset: Cara Recordset Memilih Rekaman (ODBC).
Anggota data bidang kelas recordset Anda terikat ke kolom data yang dipilih. Jika ada rekaman yang dikembalikan, rekaman pertama menjadi rekaman saat ini.
Jika Anda ingin mengatur opsi untuk kumpulan rekaman, seperti filter atau pengurutan, tentukan ini setelah Anda membuat objek recordset tetapi sebelum Anda memanggil Open. Jika Anda ingin me-refresh rekaman di kumpulan rekaman setelah kumpulan rekaman sudah terbuka, panggil Requery.
Untuk informasi selengkapnya, termasuk contoh lainnya, lihat Recordset (ODBC), Recordset: Cara Recordsets Select Records (ODBC), dan Recordset: Membuat dan Menutup Recordsets (ODBC).
Contoh
Contoh kode berikut menunjukkan berbagai bentuk Open panggilan.
// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived
// objects
// Open rs using the default SQL statement, implement bookmarks, and turn
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks |
CRecordset::noDirtyFieldCheck);
// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));
// Accept all defaults
rsDefault.Open();
CRecordset::RefreshRowset
Memperbarui data dan status untuk baris di set baris saat ini.
void RefreshRowset(
WORD wRow,
WORD wLockType = SQL_LOCK_NO_CHANGE);
Parameter
wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari nol hingga ukuran set baris.
wLockType
Nilai yang menunjukkan cara mengunci baris setelah disegarkan. Untuk detailnya, lihat Keterangan.
Keterangan
Jika Anda meneruskan nilai nol untuk wRow, maka setiap baris dalam set baris akan di-refresh.
Untuk menggunakan RefreshRowset, Anda harus telah menerapkan pengambilan baris massal dengan menentukan CRecordset::useMulitRowFetch opsi dalam Open fungsi anggota.
RefreshRowset memanggil fungsi SQLSetPosODBC API . Parameter wLockType menentukan status kunci baris setelah SQLSetPos dijalankan. Tabel berikut ini menjelaskan kemungkinan nilai untuk wLockType.
| wLockType | Deskripsi |
|---|---|
SQL_LOCK_NO_CHANGE (nilai default) |
Driver atau sumber data memastikan bahwa baris dalam keadaan terkunci atau tidak terkunci yang sama seperti sebelumnya RefreshRowset dipanggil. |
SQL_LOCK_EXCLUSIVE |
Driver atau sumber data mengunci baris secara eksklusif. Tidak semua sumber data mendukung jenis kunci ini. |
SQL_LOCK_UNLOCK |
Driver atau sumber data membuka kunci baris. Tidak semua sumber data mendukung jenis kunci ini. |
Untuk informasi selengkapnya tentang SQLSetPos, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::Requery
Membangun kembali (me-refresh) kumpulan rekaman.
virtual BOOL Requery();
Nilai hasil
Bukan nol jika kumpulan rekaman berhasil dibangun kembali; jika tidak, 0.
Keterangan
Jika ada rekaman yang dikembalikan, rekaman pertama menjadi rekaman saat ini.
Agar kumpulan rekaman mencerminkan penambahan dan penghapusan yang Anda atau pengguna lain lakukan ke sumber data, Anda harus membangun kembali kumpulan rekaman dengan memanggil Requery. Jika kumpulan rekaman adalah dynaset, kumpulan catatan secara otomatis mencerminkan pembaruan yang Anda atau pengguna lain buat ke rekaman yang ada (tetapi bukan penambahan). Jika kumpulan rekaman adalah rekam jepret, Anda harus memanggil Requery untuk mencerminkan pengeditan oleh pengguna lain dan penambahan dan penghapusan.
Untuk dynaset atau rekam jepret, panggil Requery kapan saja Anda ingin membangun kembali kumpulan rekaman menggunakan filter atau pengurutan baru, atau nilai parameter baru. Atur properti filter atau pengurutan baru dengan menetapkan nilai baru ke m_strFilter dan m_strSort sebelum memanggil Requery. Atur parameter baru dengan menetapkan nilai baru ke anggota data parameter sebelum memanggil Requery. Jika string filter dan pengurutan tidak berubah, Anda dapat menggunakan kembali kueri, yang meningkatkan performa.
Jika upaya untuk membangun kembali kumpulan rekaman gagal, kumpulan rekaman akan ditutup. Sebelum memanggil Requery, Anda dapat menentukan apakah kumpulan rekaman dapat dikueri ulang dengan memanggil CanRestart fungsi anggota.
CanRestart tidak menjamin bahwa Requery akan berhasil.
Perhatian
Hubungi Requery hanya setelah Anda menelepon Open.
Contoh
Contoh ini membangun kembali kumpulan rekaman untuk menerapkan urutan pengurutan yang berbeda.
CCustomer rsCustSet(&m_dbCust);
// Open the recordset
rsCustSet.Open();
// Use the recordset ...
// Set the sort order and Requery the recordset
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
if (!rsCustSet.CanRestart())
return; // Unable to requery
if (!rsCustSet.Requery())
// Requery failed, so take action
AfxMessageBox(_T("Requery failed!"));
CRecordset::SetAbsolutePosition
Memposisikan kumpulan rekaman pada rekaman yang sesuai dengan nomor rekaman yang ditentukan.
void SetAbsolutePosition(long nRows);
Parameter
nRows
Posisi ordinal berbasis satu untuk rekaman saat ini dalam recordset.
Keterangan
SetAbsolutePosition memindahkan penunjuk rekaman saat ini berdasarkan posisi ordinal ini.
Catatan
Fungsi anggota ini tidak valid pada recordset khusus penerusan.
Untuk recordset ODBC, pengaturan posisi absolut 1 mengacu pada rekaman pertama dalam recordset; pengaturan 0 mengacu pada posisi awal file (BOF).
Anda juga dapat meneruskan nilai negatif ke SetAbsolutePosition. Dalam hal ini, posisi recordset dievaluasi dari akhir recordset. Misalnya, SetAbsolutePosition( -1 ) memindahkan penunjuk rekaman saat ini ke rekaman terakhir dalam kumpulan rekaman.
Catatan
Posisi absolut tidak dimaksudkan untuk digunakan sebagai nomor rekaman pengganti. Marka buku masih merupakan cara yang direkomendasikan untuk mempertahankan dan kembali ke posisi tertentu, karena posisi rekaman berubah saat rekaman sebelumnya dihapus. Selain itu, Anda tidak dapat yakin bahwa rekaman tertentu akan memiliki posisi absolut yang sama jika kumpulan rekaman dibuat ulang lagi karena urutan rekaman individual dalam kumpulan rekaman tidak dijamin kecuali dibuat dengan pernyataan SQL menggunakan ORDER BY klausa.
Untuk informasi selengkapnya tentang navigasi recordset dan marka buku, lihat artikel Recordset: Scrolling (ODBC) dan Recordset: Bookmarks and Absolute Positions (ODBC).
CRecordset::SetBookmark
Memposisikan kumpulan rekaman pada rekaman yang berisi marka buku yang ditentukan.
void SetBookmark(const CDBVariant& varBookmark);
Parameter
varBookmark
Referensi ke objek yang CDBVariant berisi nilai marka buku untuk rekaman tertentu.
Keterangan
Untuk menentukan apakah marka buku didukung pada recordset, panggil CanBookmark. Untuk membuat marka buku tersedia jika didukung, Anda harus mengatur CRecordset::useBookmarks opsi dalam dwOptions parameter Open fungsi anggota.
Catatan
Jika bookmark tidak didukung atau tidak tersedia, panggilan SetBookmark akan mengakibatkan pengecualian dilemparkan. Marka buku tidak didukung pada kumpulan rekaman hanya-terusan.
Untuk terlebih dahulu mengambil marka buku untuk rekaman saat ini, panggil GetBookmark, yang menyimpan nilai marka buku ke CDBVariant objek. Nantinya, Anda dapat kembali ke rekaman tersebut dengan memanggil SetBookmark menggunakan nilai bookmark yang disimpan.
Catatan
Setelah operasi recordset tertentu, Anda harus memeriksa persistensi bookmark sebelum memanggil SetBookmark. Misalnya, jika Anda mengambil marka buku dengan GetBookmark lalu memanggil Requery, marka buku mungkin tidak lagi valid. Panggil CDatabase::GetBookmarkPersistence untuk memeriksa apakah Anda dapat dengan aman memanggil SetBookmark.
Untuk informasi selengkapnya tentang bookmark dan navigasi recordset, lihat artikel Recordset: Bookmarks and Absolute Positions (ODBC) dan Recordset: Scrolling (ODBC).
CRecordset::SetFieldDirty
Menandai anggota data bidang dari kumpulan rekaman sebagai diubah atau tidak berubah.
void SetFieldDirty(void* pv, BOOL bDirty = TRUE);
Parameter
pv
Berisi alamat anggota data bidang 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:
optimisticPenguncian optimis mengunci rekaman yang diperbarui hanya selama panggilan keUpdate.pessimisticPenguncian pesimis mengunci rekaman segera setelahEditdipanggil dan membuatnya tetap terkunci sampaiUpdatepanggilan selesai atau Anda pindah ke rekaman baru.
Keterangan
Panggil fungsi anggota ini jika Anda perlu menentukan salah satu dari dua strategi penguncian rekaman mana yang digunakan set rekaman untuk pembaruan. Secara default, mode penguncian himpunan rekaman adalah optimistic. Anda dapat mengubahnya menjadi strategi penguncian yang lebih hati-hati pessimistic . Panggil SetLockingMode setelah Anda membuat dan membuka objek recordset tetapi sebelum Anda memanggil Edit.
CRecordset::SetParamNull
Menandai parameter sebagai Null (secara khusus tidak memiliki nilai) atau sebagai non-Null.
void SetParamNull(
int nIndex,
BOOL bNull = TRUE);
Parameter
nIndex
Indeks berbasis nol parameter.
bNull
Jika TRUE (nilai default), parameter ditandai sebagai Null. Jika tidak, parameter ditandai sebagai non-Null.
Keterangan
Tidak seperti SetFieldNull, Anda dapat memanggil SetParamNull sebelum membuka kumpulan rekaman.
SetParamNull biasanya digunakan dengan kueri yang telah ditentukan sebelumnya (prosedur tersimpan).
CRecordset::SetRowsetCursorPosition
Memindahkan kursor ke baris dalam set baris saat ini.
void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);
Parameter
wRow
Posisi berbasis satu baris dalam set baris saat ini. Nilai ini dapat berkisar dari 1 hingga ukuran set baris.
wLockType
Nilai yang menunjukkan cara mengunci baris setelah disegarkan. Untuk detailnya, lihat Keterangan.
Keterangan
Saat menerapkan pengambilan baris massal, rekaman diambil oleh set baris, di mana rekaman pertama dalam set baris yang diambil adalah rekaman saat ini. Untuk membuat rekaman lain dalam kumpulan baris rekaman saat ini, panggil SetRowsetCursorPosition. Misalnya, Anda dapat menggabungkan SetRowsetCursorPosition dengan GetFieldValue fungsi anggota untuk mengambil data secara dinamis dari catatan set rekaman Anda.
Untuk menggunakan SetRowsetCursorPosition, Anda harus telah menerapkan pengambilan baris massal dengan menentukan CRecordset::useMultiRowFetch opsi dwOptions parameter dalam Open fungsi anggota.
SetRowsetCursorPosition memanggil fungsi SQLSetPosODBC API . Parameter wLockType menentukan status kunci baris setelah SQLSetPos dijalankan. Tabel berikut ini menjelaskan kemungkinan nilai untuk wLockType.
wLockType |
Deskripsi |
|---|---|
SQL_LOCK_NO_CHANGE (nilai default) |
Driver atau sumber data memastikan bahwa baris dalam keadaan terkunci atau tidak terkunci yang sama seperti sebelumnya SetRowsetCursorPosition dipanggil. |
SQL_LOCK_EXCLUSIVE |
Driver atau sumber data mengunci baris secara eksklusif. Tidak semua sumber data mendukung jenis kunci ini. |
SQL_LOCK_UNLOCK |
Driver atau sumber data membuka kunci baris. Tidak semua sumber data mendukung jenis kunci ini. |
Untuk informasi selengkapnya tentang SQLSetPos, lihat Windows SDK. Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::SetRowsetSize
Menentukan jumlah rekaman yang ingin Anda ambil selama pengambilan.
virtual void SetRowsetSize(DWORD dwNewRowsetSize);
Parameter
dwNewRowsetSize
Jumlah baris yang akan diambil selama pengambilan tertentu.
Keterangan
Fungsi anggota virtual ini menentukan berapa banyak baris yang ingin Anda ambil selama pengambilan tunggal saat menggunakan pengambilan baris massal. Untuk menerapkan pengambilan baris massal, Anda harus mengatur CRecordset::useMultiRowFetch opsi dalam dwOptions parameter Open fungsi anggota.
Catatan
Memanggil SetRowsetSize tanpa menerapkan pengambilan baris massal akan mengakibatkan pernyataan yang gagal.
Panggil SetRowsetSize sebelum memanggil Open untuk awalnya mengatur ukuran himpunan baris untuk kumpulan rekaman. Ukuran himpunan baris default saat menerapkan pengambilan baris massal adalah 25.
Catatan
Berhati-hatilah saat memanggil SetRowsetSize. Jika Anda mengalokasikan penyimpanan secara manual untuk data (seperti yang ditentukan oleh CRecordset::userAllocMultiRowBuffers opsi parameter dwOptions di Open), Anda harus memeriksa apakah Anda perlu merealokasi buffer penyimpanan ini setelah Anda memanggil SetRowsetSize, tetapi sebelum Anda melakukan operasi navigasi kursor apa pun.
Untuk mendapatkan pengaturan saat ini untuk ukuran set baris, panggil GetRowsetSize.
Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
CRecordset::Update
AddNew Menyelesaikan operasi atau Edit dengan menyimpan data baru atau yang diedit pada sumber data.
virtual BOOL Update();
Nilai hasil
Bukan nol jika satu rekaman berhasil diperbarui; jika tidak, 0 jika tidak ada kolom yang berubah. Jika tidak ada rekaman yang diperbarui, atau jika lebih dari satu rekaman diperbarui, pengecualian akan dilemparkan. Pengecualian juga dilemparkan untuk kegagalan lain pada sumber data.
Keterangan
Panggil fungsi anggota ini setelah panggilan ke AddNew fungsi atau Edit anggota. Panggilan ini diperlukan untuk menyelesaikan AddNew operasi atau Edit .
Catatan
Jika Anda telah menerapkan pengambilan baris massal, Anda tidak dapat memanggil Update. Ini akan mengakibatkan pernyataan yang gagal. Meskipun kelas CRecordset tidak menyediakan mekanisme untuk memperbarui baris data massal, Anda dapat menulis fungsi Anda sendiri dengan menggunakan fungsi SQLSetPosODBC API . Untuk informasi selengkapnya tentang pengambilan baris massal, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Baik AddNew dan Edit siapkan buffer edit tempat data yang ditambahkan atau diedit ditempatkan untuk disimpan ke sumber data.
Update menyimpan data. Hanya bidang yang ditandai atau terdeteksi sebagai diubah yang diperbarui.
Jika sumber data mendukung transaksi, Anda dapat melakukan Update panggilan (dan bagian yang sesuai AddNew atau Edit panggilan) dari transaksi. Untuk informasi selengkapnya tentang transaksi, lihat Transaksi (ODBC).
Perhatian
Jika Anda menelepon Update tanpa terlebih dahulu memanggil atau AddNewEdit, Update akan melempar CDBException. Jika Anda memanggil AddNew atau Edit, Anda harus memanggil Update sebelum memanggil Move operasi atau sebelum menutup kumpulan rekaman atau koneksi sumber data. Jika tidak, perubahan Anda akan hilang tanpa pemberitahuan.
Untuk detail tentang penanganan Update kegagalan, lihat Recordset: Cara Recordset Memperbarui Rekaman (ODBC).
Contoh
lihat Transaksi: Melakukan Transaksi dalam Recordset (ODBC).
Lihat juga
CObject kelas
Bagan hierarki
CDatabase kelas
CRecordView kelas