Bagikan melalui


Recordset: Membuat parameter Recordset (ODBC)

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:

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::Buka di Referensi Pustaka Kelas dan SQL: Menyesuaikan Pernyataan SQL (ODBC) dan Recordset Himpunan Catatan Anda: 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 kumpulan rekaman Anda, disimpan di m_strFilter, mungkin terlihat seperti ini:

    "StudentID = ?"
    

    Misalkan Anda mendapatkan ID siswa dalam variabel strInputID. Saat Anda mengatur parameter ke strInputID (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 drivers
    

    Untuk diskusi tentang cara menggunakan tanda kutip dengan benar untuk string filter, lihat Recordset: Memfilter Rekaman (ODBC).

    Nilai parameter berbeda setiap kali Anda mengkueri ulang kumpulan rekaman untuk ID siswa baru.

    Tip

    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 Requery dengan nilai filter baru.

Untuk informasi selengkapnya tentang filter, lihat Kumpulan Rekaman: Memfilter Rekaman (ODBC).

Membuat parameter kelas recordset Anda

Catatan

Bagian ini berlaku untuk objek yang berasal dari CRecordset tempat pengambilan baris massal belum diimplementasikan. Jika Anda menggunakan pengambilan baris massal, menerapkan parameter adalah proses yang sama. 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 membuat parameter 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.

  1. Jalankan Wizard Konsumen ODBC MFC dari Tambahkan Kelas untuk membuat kelas.

  2. Tentukan anggota data bidang untuk kolom kumpulan rekaman.

  3. 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 rekam jepret yang dirancang untuk menjawab kueri "Siswa mana yang berada 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 bidang yang dihasilkan wizard. Konvensinya adalah menambahkan kata "Param" ke setiap nama parameter yang ditentukan pengguna.

  4. 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 menulis fungsi RFX Anda, lihat Pertukaran Bidang Rekaman: Cara Kerja RFX. Mendahului panggilan RFX untuk parameter dengan satu panggilan ke:

    pFX->SetFieldType( CFieldExchange::param );
    // RFX calls for parameter data members
    
  5. Di konstruktor kelas recordset Anda, kenaikan jumlah parameter, m_nParams.

    Untuk informasi, lihat Pertukaran Bidang Rekaman: Bekerja dengan Kode Panduan.

  6. 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 lewati. 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.

Tip

String yang paling mungkin dikerjakan adalah string yang Anda tentukan (jika ada) untuk anggota data m_strFilter kelas, tetapi beberapa driver ODBC mungkin mengizinkan parameter dalam klausul SQL lainnya.

Meneruskan Nilai Parameter pada Run Time

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

  1. Buat objek recordset.

  2. Siapkan string atau string, seperti m_strFilter string, yang berisi pernyataan SQL, atau bagian-bagiannya. Letakkan tempat penampung "?" di mana informasi parameter akan pergi.

  3. Tetapkan nilai parameter run-time untuk setiap anggota data parameter objek.

  4. Open Panggil fungsi anggota (atau Requery, 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 rekaman kelas CStudentSet sebelumnya — yang disebut rsStudents — dan sekarang ingin mengkuerinya kembali 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.

Baca juga

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