Bagikan melalui


Dynaset

Topik ini menjelaskan dinaset dan membahas ketersediaannya.

Catatan

Topik ini berlaku untuk kelas ODBC MFC, termasuk CRecordset. Untuk informasi tentang dinaset di kelas DAO, lihat CDaoRecordset. Dengan DAO, Anda dapat membuka kumpulan rekaman jenis dynaset.

Dinaset adalah kumpulan rekaman dengan properti dinamis. Selama masa pakainya, objek recordset dalam mode dynaset (biasanya disebut dynaset) tetap disinkronkan dengan sumber data dengan cara berikut. Di lingkungan multipengguna, pengguna lain mungkin mengedit atau menghapus rekaman yang ada di dinaset Anda atau menambahkan rekaman ke tabel yang diwakili dinaset Anda. Rekaman yang ditambahkan atau dihapus aplikasi Anda dari kumpulan rekaman tercermin dalam dinaset Anda. Rekaman yang ditambahkan pengguna lain ke tabel tidak akan tercermin dalam dinaset Anda hingga Anda membangun kembali dinaset dengan memanggil fungsi anggotanya Requery . Saat pengguna lain menghapus rekaman, kode MFC melompati penghapusan di kumpulan rekaman Anda. Perubahan pengeditan pengguna lain pada rekaman yang ada tercermin dalam dinaset Anda segera setelah Anda menggulir ke rekaman yang terpengaruh.

Demikian pula, pengeditan yang Anda buat pada rekaman dalam dinaset tercermin dalam dinaset yang digunakan oleh pengguna lain. Rekaman yang Anda tambahkan tidak tercermin dalam dinaset pengguna lain hingga mereka mengkueri kembali dinaset mereka. Rekaman yang Anda hapus ditandai sebagai "dihapus" di kumpulan rekaman pengguna lain. Jika Anda memiliki beberapa koneksi ke database yang sama (beberapa CDatabase objek), kumpulan rekaman yang terkait dengan koneksi tersebut memiliki status yang sama dengan kumpulan rekaman pengguna lain.

Dynasets paling berharga ketika data harus dinamis, seperti (misalnya) dalam sistem reservasi maskapai.

Catatan

Untuk menggunakan dynaset, Anda harus memiliki driver ODBC untuk sumber data Anda yang mendukung dinaset dan pustaka kursor ODBC tidak boleh dimuat. Untuk informasi selengkapnya, lihat Ketersediaan Dynasets.

Untuk menentukan bahwa kumpulan rekaman adalah dynaset, teruskan CRecordset::dynaset sebagai parameter pertama ke Open fungsi anggota objek recordset Anda.

Catatan

Untuk dinaset yang dapat diperbarui, driver ODBC Anda harus mendukung pernyataan pembaruan yang diposisikan atau ::SQLSetPos fungsi ODBC API. Jika keduanya didukung, MFC menggunakan ::SQLSetPos untuk efisiensi.

Ketersediaan Dynasets

Kelas database MFC mendukung dinaset jika persyaratan berikut terpenuhi:

  • DLL pustaka kursor ODBC tidak boleh digunakan untuk sumber data ini.

    Jika pustaka kursor digunakan, pustaka kursor menutupi beberapa fungsionalitas driver ODBC yang mendasarinya yang diperlukan untuk dukungan dynaset. Jika Anda ingin menggunakan dinaset (dan driver ODBC Anda memiliki fungsionalitas yang diperlukan untuk dinaset, seperti yang dijelaskan di bagian ini), Anda dapat menyebabkan MFC tidak memuat pustaka kursor saat Anda membuat CDatabase objek. Untuk informasi selengkapnya, lihat ODBC dan fungsi anggota OpenEx atau Buka kelas CDatabase.

    Dalam terminologi ODBC, dinaset dan rekam jepret disebut sebagai kursor. Kursor adalah mekanisme yang digunakan untuk melacak posisinya dalam kumpulan rekaman.

  • Driver ODBC untuk sumber data Anda harus mendukung kursor berbasis keyset.

    Kursor berbasis set kunci mengelola data dari tabel dengan mendapatkan dan menyimpan sekumpulan kunci. Kunci digunakan untuk mendapatkan data saat ini dari tabel saat pengguna menggulir ke rekaman tertentu. Untuk menentukan apakah driver Anda menyediakan dukungan ini, panggil ::SQLGetInfo fungsi ODBC API dengan parameter SQL_SCROLL_OPTIONS .

    Jika Anda mencoba membuka dynaset tanpa dukungan keyset, Anda mendapatkan CDBException dengan nilai kode pengembalian AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.

  • Driver ODBC untuk sumber data Anda harus mendukung pengambilan yang diperluas.

    Pengambilan yang diperluas adalah kemampuan untuk menggulir mundur serta meneruskan rekaman kueri SQL Anda yang dihasilkan. Untuk menentukan apakah driver Anda mendukung kemampuan ini, panggil ::SQLGetFunctions fungsi ODBC API dengan parameter SQL_API_SQLEXTENDEDFETCH .

Jika Anda ingin dynaset yang dapat diperbarui (atau rekam jepret, untuk itu), driver ODBC Anda juga harus mendukung ::SQLSetPos fungsi ODBC API atau pembaruan yang diposisikan. Fungsi ini ::SQLSetPos memungkinkan MFC memperbarui sumber data tanpa mengirim pernyataan SQL. Jika dukungan ini tersedia, MFC menggunakannya sebagai preferensi untuk membuat pembaruan menggunakan SQL. Untuk menentukan apakah driver Anda mendukung ::SQLSetPos, panggil ::SQLGetInfo dengan parameter SQL_POS_OPERATIONS .

Pembaruan yang diposisikan menggunakan sintaks SQL (dari formulir WHERE CURRENT OF<cursorname>) untuk mengidentifikasi baris tertentu dalam tabel pada sumber data. Untuk menentukan apakah driver Anda mendukung pembaruan yang diposisikan, panggil ::SQLGetInfo dengan parameter SQL_POSITIONED_STATEMENTS .

Umumnya, dinaset MFC (tetapi tidak hanya set catatan forward-only) memerlukan driver ODBC dengan kesesuaian API tingkat 2. Jika driver untuk sumber data Anda sesuai dengan set API tingkat 1, Anda masih dapat menggunakan rekam jepret yang dapat diperbarui dan baca-saja dan himpunan rekaman khusus maju, tetapi bukan dinaset. Namun, driver tingkat 1 dapat mendukung dinaset jika mendukung pengambilan yang diperluas dan kursor berbasis keyset. Untuk informasi selengkapnya tentang tingkat kesuaian ODBC, lihat ODBC.

Catatan

Jika Anda ingin menggunakan rekam jepret dan dinaset, Anda harus mendasarkannya pada dua objek yang berbeda CDatabase (dua koneksi yang berbeda).

Tidak seperti rekam jepret, yang menggunakan penyimpanan menengah yang dikelola oleh pustaka kursor ODBC, dinaset mengambil rekaman langsung dari sumber data segera setelah Anda menggulirnya. Ini membuat rekaman awalnya dipilih oleh dynaset yang disinkronkan dengan sumber data.

Untuk daftar driver ODBC yang disertakan dalam versi Visual C++ ini dan untuk informasi tentang mendapatkan driver tambahan, lihat Daftar Driver ODBC.

Lihat juga

Konektivitas Database Terbuka (ODBC)