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.
Topik ini berlaku untuk kelas MFC ODBC.
Terkadang Anda mungkin ingin dapat memilih rekaman pada waktu proses, menggunakan informasi yang telah Anda hitung atau peroleh dari pengguna akhir Anda. Parameter recordset memungkinkan Anda mencapai tujuan tersebut.
Topik ini menjelaskan:
Tujuan dari kumpulan rekaman berparameter.
Kapan dan mengapa Anda mungkin ingin membuat parameter kumpulan rekaman.
Cara mendeklarasikan anggota data parameter di kelas recordset Anda.
Cara meneruskan informasi parameter ke objek recordset pada run time.
Kumpulan Rekaman Berparameter
Recordset berparameter memungkinkan Anda meneruskan informasi parameter pada waktu proses. Ini memiliki dua efek berharga:
Ini dapat mengakibatkan kecepatan eksekusi yang lebih baik.
Ini memungkinkan Anda membuat kueri pada waktu proses, berdasarkan informasi yang tidak tersedia untuk Anda pada waktu desain, seperti informasi yang diperoleh dari pengguna Anda atau dihitung pada waktu proses.
Saat Anda memanggil Open untuk menjalankan kueri, kumpulan rekaman menggunakan informasi parameter untuk menyelesaikan pernyataan SQL SELECT-nya. Anda dapat membuat parameter kumpulan rekaman apa pun.
Kapan Menggunakan Parameter
Penggunaan umum untuk parameter meliputi:
Meneruskan argumen run-time ke kueri yang telah ditentukan sebelumnya.
Untuk meneruskan parameter ke prosedur tersimpan, Anda harus menentukan pernyataan ODBC CALL kustom lengkap — dengan tempat penampung parameter — saat Anda memanggil
Open, mengesampingkan pernyataan SQL default kumpulan rekaman. Untuk informasi selengkapnya, lihat CRecordset::Open di Referensi Perpustakaan Kelas dan SQL: Menyesuaikan Pernyataan SQL (ODBC) dan Recordset: Mendeklarasikan Kelas untuk Kueri yang Telah Ditentukan (ODBC).Melakukan banyak kueri secara efisien dengan informasi parameter yang berbeda.
Misalnya, setiap kali pengguna akhir Anda mencari informasi untuk siswa tertentu dalam database pendaftaran siswa, Anda dapat menentukan nama atau ID siswa sebagai parameter yang diperoleh dari pengguna. Kemudian, saat Anda memanggil fungsi anggota kumpulan rekaman
Requery, kueri hanya memilih catatan siswa tersebut.String filter dari kumpulan data Anda, yang disimpan di
m_strFilter, mungkin terlihat seperti ini:"StudentID = ?"Misalkan Anda mendapatkan ID siswa dalam variabel
strInputID. Saat Anda mengatur parameter kestrInputID(misalnya, ID siswa 100) nilai variabel terikat ke tempat penampung parameter yang diwakili oleh "?" dalam string filter.Tetapkan nilai parameter sebagai berikut:
strInputID = "100"; ... m_strParam = strInputID;Anda tidak ingin menyiapkan string filter dengan cara ini:
m_strFilter = "StudentID = 100"; // 100 is incorrectly quoted // for some driversUntuk diskusi tentang cara menggunakan tanda kutip dengan benar untuk string filter, lihat Recordset: Memfilter Rekaman (ODBC).
Nilai parameter berbeda setiap kali Anda mengajukan kueri ulang sekumpulan data untuk ID siswa baru.
Petunjuk / Saran
Menggunakan parameter lebih efisien daripada sekadar filter. Untuk kumpulan rekaman berparameter, database harus memproses pernyataan SQL SELECT hanya sekali. Untuk kumpulan rekaman yang difilter tanpa parameter, pernyataan SELECT harus diproses setiap kali Anda
Requerydengan nilai filter baru.
Untuk informasi selengkapnya tentang filter, lihat Kumpulan Rekaman: Memfilter Rekaman (ODBC).
Memparametrisasi Kelas Recordset Anda
Catatan
Bagian ini berlaku untuk objek yang berasal dari CRecordset di mana pengambilan baris secara massal belum diimplementasikan. Jika Anda menggunakan pengambilan baris dalam jumlah besar, menerapkan parameter adalah proses yang serupa. Untuk informasi selengkapnya, lihat Recordset: Mengambil Rekaman secara Massal (ODBC).
Sebelum Anda membuat kelas recordset, tentukan parameter apa yang Anda butuhkan, jenis datanya, dan bagaimana kumpulan rekaman menggunakannya.
Untuk memparameterisasi kelas recordset
Catatan
Wizard MFC ODBC Consumer tidak tersedia di Visual Studio 2019 dan yang lebih baru. Anda masih dapat membuat fungsionalitas ini secara manual.
Jalankan MFC ODBC Consumer Wizard dari Tambah Kelas untuk membuat kelas.
Tentukan anggota data bidang untuk kolom recordset.
Setelah wizard menulis kelas ke file dalam proyek Anda, buka file .h dan tambahkan satu atau beberapa anggota data parameter secara manual ke deklarasi kelas. Penambahan mungkin terlihat seperti contoh berikut, bagian dari kelas cuplikan yang dirancang untuk menjawab pertanyaan "Siswa mana yang ada di kelas senior?"
class CStudentSet : public CRecordset { // Field/Param Data CString m_strFirstName; CString m_strLastName; CString m_strStudentID; CString m_strGradYear; CString m_strGradYrParam; };Tambahkan anggota data parameter Anda setelah anggota data kolom yang dihasilkan wizard. Konvensinya adalah menambahkan kata "Param" ke setiap nama parameter yang ditentukan pengguna.
Ubah definisi fungsi anggota DoFieldExchange dalam file .cpp. Tambahkan panggilan fungsi RFX untuk setiap anggota data parameter yang Anda tambahkan ke kelas . Untuk informasi tentang cara menulis fungsi RFX Anda, lihat Pertukaran Bidang Rekaman: Cara Kerja RFX. Dahului panggilan RFX untuk parameter dengan satu panggilan ke:
pFX->SetFieldType( CFieldExchange::param ); // RFX calls for parameter data membersPada konstruktor kelas recordset Anda, tingkatkan jumlah parameter,
m_nParams.Silakan lihat Record Field Exchange: Working with the Wizard Code untuk informasi.
Saat Anda menulis kode yang membuat objek recordset kelas ini, letakkan "?" (tanda tanya) simbol di setiap tempat dalam string pernyataan SQL Anda di mana parameter akan diganti.
Pada waktu proses, tempat penampung "?" diisi, secara berurutan, berdasarkan nilai parameter yang Anda beri. Anggota data parameter pertama yang ditetapkan setelah panggilan SetFieldType menggantikan "?" pertama dalam string SQL, anggota data parameter kedua menggantikan yang kedua "?", dan sebagainya.
Catatan
Urutan parameter penting: urutan panggilan RFX untuk parameter dalam fungsi Anda DoFieldExchange harus cocok dengan urutan tempat penampung parameter dalam string SQL Anda.
Petunjuk / Saran
String yang paling mungkin bekerja dengan Anda adalah string yang Anda tentukan (jika ada) untuk anggota data kelas m_strFilter, tetapi beberapa driver ODBC mungkin mengizinkan parameter dalam klausul SQL lainnya.
Meneruskan Nilai Parameter pada Waktu Eksekusi
Anda harus menentukan nilai parameter sebelum memanggil Open (untuk objek recordset baru) atau Requery (untuk yang sudah ada).
Untuk meneruskan nilai parameter ke objek kumpulan rekaman pada waktu proses
Buat objek recordset.
Siapkan string, seperti string
m_strFilter, yang berisi perintah SQL atau bagian-bagiannya. Letakkan tempat penampung "?" di mana informasi parameter akan ditempatkan.Tetapkan nilai parameter run-time untuk setiap anggota data parameter objek.
OpenPanggil fungsi anggota (atauRequery, untuk recordset yang sudah ada).
Misalnya, Anda ingin menentukan string filter untuk kumpulan rekaman Anda menggunakan informasi yang diperoleh pada waktu proses. Asumsikan Anda telah membuat kumpulan data kelas CStudentSet yang disebut rsStudents sebelumnya — dan sekarang ingin mengkueri ulang untuk jenis informasi siswa tertentu.
// Set up a filter string with
// parameter placeholders
rsStudents.m_strFilter = "GradYear <= ?";
// Obtain or calculate parameter values
// to pass--simply assigned here
CString strGradYear = GetCurrentAcademicYear( );
// Assign the values to parameter data members
rsStudents.m_strGradYrParam = strGradYear;
// Run the query
if( !rsStudents.Requery( ) )
return FALSE;
Kumpulan rekaman berisi rekaman untuk siswa yang rekamannya memenuhi kondisi yang ditentukan oleh filter, yang dibangun dari parameter run-time. Dalam hal ini, recordset berisi rekaman untuk semua siswa senior.
Catatan
Jika diperlukan, Anda dapat mengatur nilai anggota data parameter ke Null, menggunakan SetParamNull. Anda juga dapat memeriksa apakah anggota data parameter adalah Null, menggunakan IsFieldNull.
Lihat juga
Recordset (ODBC)
Recordset: Menambahkan, Memperbarui, dan Menghapus Rekaman (ODBC)
Recordset: Cara Recordset Memilih Rekaman (ODBC)