Fungsi JetIntersectIndexes
Berlaku untuk: Windows | Windows Server
Fungsi JetIntersectIndexes
Fungsi JetIntersectIndexes menghitung persimpangan antara beberapa set entri indeks dari indeks sekunder yang berbeda pada tabel yang sama. Operasi ini berguna untuk menemukan kumpulan rekaman dalam tabel yang cocok dengan dua kriteria atau lebih yang dapat diekspresikan menggunakan rentang indeks.
JET_ERR JET_API JetIntersectIndexes(
__in JET_SESID sesid,
__in JET_INDEXRANGE* rgindexrange,
__in unsigned long cindexrange,
__in_out JET_RECORDLIST* precordlist,
__in JET_GRBIT grbit
);
Parameter
sesid
Sesi yang digunakan untuk panggilan ini.
rgindexrange
Penunjuk ke array struktur JET_IndexRange . Setiap struktur mencakup JET_TABLEID yang telah disiapkan untuk menahan salah satu rentang indeks yang akan dipotong. Untuk informasi selengkapnya, lihat JET_IndexRange.
cindexrange
Jumlah struktur JET_IndexRange dalam array yang terkandung dalam parameter rgindexrange .
precordlist
Penunjuk ke struktur JET_RECORDLIST . Struktur ini akan diisi dengan informasi yang cukup untuk melintasi tabel sementara dengan hasil dari JetIntersectIndexes.
Buffer output yang menerima struktur JET_RECORDLIST . Struktur berisi deskripsi kumpulan hasil persimpangan.
grbit
Disiapkan untuk penggunaan masa mendatang.
Tampilkan Nilai
Fungsi ini mengembalikan jenis data JET_ERR dengan salah satu kode pengembalian berikut. Untuk informasi selengkapnya tentang kesalahan ESE, lihat Kesalahan Mesin Penyimpanan yang Dapat Diperluas dan Parameter Penanganan Kesalahan.
Menampilkan kode |
Deskripsi |
---|---|
JET_errSuccess |
Operasi berhasil diselesaikan. |
JET_errClientRequestToStopJetService |
Tidak mungkin untuk menyelesaikan operasi karena semua aktivitas pada instans yang terkait dengan sesi telah berhenti sebagai akibat dari panggilan ke JetStopService. |
JET_errInstanceUnavailable |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi telah mengalami kesalahan fatal yang mengharuskan akses ke semua data dicabut untuk melindungi integritas data tersebut. Windows XP: Nilai yang dikembalikan ini diperkenalkan di Windows XP. |
JET_errInvalidgrbit |
Salah satu opsi yang diminta tidak valid, digunakan dengan tidak benar, atau tidak diimplementasikan. Kesalahan ini dikembalikan oleh JetIntersectIndexes ketika: Grbit yang terkandung dalam struktur JET_IndexRange yang ditunjukkan oleh elemen apa pun dalam array rgindexrange tidak sama dengan JET_bitRecordInIndex. |
JET_errInvalidParameter |
Salah satu parameter yang disediakan berisi nilai yang tidak terduga atau nilai yang tidak konsisten saat dikombinasikan dengan nilai parameter lain. Kesalahan ini dikembalikan oleh JetIntersectIndexes karena alasan berikut:
|
JET_errInvalidSesid |
Handel sesi tidak valid atau mengacu pada sesi tertutup. Kesalahan ini tidak dikembalikan dalam semua keadaan. Handel hanya divalidasi berdasarkan upaya terbaik. |
JET_errNotInitialized |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi belum diinisialisasi. |
JET_errOutOfCursors |
Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk membuka kursor baru. Sumber daya kursor dikonfigurasi dengan memanggil JetSetSystemParameter dengan JET_paramMaxCursors ditentukan dalam parameter paramid . |
JET_errOutOfMemory |
Operasi gagal karena memori tidak cukup dapat dialokasikan untuk menyelesaikannya. JetIntersectIndexes dapat mengembalikan JET_errOutOfMemory jika ruang alamat proses host menjadi terlalu terfragmentasi. Manajer tabel sementara akan selalu mengalokasikan potongan ruang alamat 1MB untuk setiap tabel sementara yang dibuat terlepas dari jumlah data yang akan disimpan. JetIntersectIndexes akan membuat satu tabel sementara untuk setiap JET_IndexRange yang ditentukan dalam parameter rgindexrange , dan satu tabel sementara untuk output dalam JET_RECORDLIST. |
JET_errRestoreInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi karena operasi pemulihan sedang berlangsung pada instans yang terkait dengan sesi. |
JET_errSessionSharingViolation |
Adalah ilegal untuk menggunakan sesi yang sama dari lebih dari satu utas secara bersamaan. Windows XP: Nilai yang dikembalikan ini diperkenalkan di Windows XP. |
JET_errTermInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi sedang dimatikan. |
JET_errTooManyOpenIndexes |
Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan indeks tabel. Jumlah indeks yang skemanya dapat di-cache dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxOpenTables ditentukan dalam parameter paramid . |
JET_errTooManyOpenTables |
Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan skema tabel. Jumlah tabel yang skemanya dapat di-cache dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxOpenTables ditentukan dalam parameter paramid . |
JET_errTooManySorts |
Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk membuat tabel sementara. Sumber daya tabel sementara dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxTemporaryTables ditentukan dalam parameter paramid . |
Jika berhasil, tabel sementara baru dikembalikan yang berisi marka buku rekaman yang cocok dengan kriteria yang diwakili oleh masing-masing deskripsi rentang indeks input.
Jika gagal, tabel sementara yang berisi hasil tidak akan dibuat. Status database sementara dapat diubah. Status database biasa apa pun yang digunakan oleh mesin database akan tetap tidak berubah. Posisi JET_TABLEIDsaat ini yang disediakan untuk fungsi ini dapat diubah.
Keterangan
JetIntersectIndexes dapat digunakan untuk memfilter rekaman secara efisien dalam tabel dengan beberapa kriteria jika kriteria tersebut dapat dinyatakan dalam hal indeks sekunder di atas tabel tersebut. Misalnya, pertimbangkan bahwa Anda memiliki tabel yang sangat besar yang berisi orang-orang. Tabel dapat memiliki kolom untuk id pengguna, nama depan, nama belakang, dan sebagainya. Misalkan masing-masing kolom ini diindeks secara terpisah dan indeks utama tabel melebihi id pengguna. Jika Anda ingin menemukan semua orang yang nama depannya dimulai dengan A dan yang nama belakangnya dimulai dengan G, Anda akan melakukan langkah-langkah berikut:
Buka kursor baru pada tabel, dan atur kursor tersebut untuk menggunakan indeks di atas kolom "nama depan". Kemudian siapkan rentang indeks untuk semua orang yang "nama depan"nya dimulai dengan 'A', dan buat struktur JET_IndexRange yang berisi kursor ini.
Ulangi langkah 1 dengan kursor baru pada indeks "nama belakang" untuk semua orang yang "nama belakang" dimulai dengan 'G'.
Teruskan kriteria ini ke JetIntersectIndexes untuk menghitung hasilnya ke dalam tabel sementara.
Melintasi tabel sementara dan mengambil setiap rekaman yang melewati kriteria menurut marka buku.
Tabel sementara yang berisi tataan hasil adalah tabel sederhana dengan satu kolom yang berisi bookmark setiap rekaman yang melewati semua kriteria yang digunakan untuk menghitung persimpangan. Tataan hasil diurutkan dalam urutan yang sama dengan indeks utama dan tidak berisi entri duplikat. Aplikasi dapat menghitung hasil persimpangan dengan menghitung baris dalam tabel sementara, mengambil marka buku untuk setiap hasil menggunakan JetRetrieveColumn, lalu mengunjungi rekaman dalam database dengan memanggil JetGotoBookmark dengan bookmark tersebut pada kursor yang diposisikan pada indeks utama.
Tabel sementara yang dikembalikan oleh JetIntersectIndexes hanya dapat dipindai ke arah depan. Ini juga harus ditutup melalui JetCloseTable ketika pemindaian telah selesai. Untuk informasi selengkapnya tentang tabel sementara dan cara kerjanya, lihat JetOpenTemporaryTable.
JetIntersectIndexes umumnya merupakan cara yang efisien dan nyaman untuk memfilter rekaman berdasarkan beberapa kriteria terindeks. Namun, ada beberapa tips penting yang harus diikuti untuk memaksimalkan kegunaan fitur ini. Jika Anda tahu bahwa salah satu kriteria sangat ketat sehingga rentang indeks yang dihasilkan memiliki sangat sedikit rekaman maka mungkin lebih baik untuk hanya berjalan rentang indeks itu dan memfilter rekaman di tingkat aplikasi. Selanjutnya, jika Anda tahu bahwa Anda memiliki kriteria yang jauh kurang ketat daripada kriteria lain dalam persimpangan Anda, maka Anda dapat mempertimbangkan untuk menghilangkan kriteria yang jauh lebih ketat dari persimpangan. Terakhir, jika Anda tahu bahwa salah satu kriteria sama sekali tidak ketat sehingga rentang indeks yang dihasilkan hampir sebesar indeks utama maka tidak mungkin bersinggungan dengan rentang indeks tersebut akan menguntungkan (mengurangi ukuran) kumpulan hasil. Dalam semua kasus, Anda harus memilih kriteria dengan cara yang akan mengambil entri indeks sekecil mungkin pada input dan menghasilkan set bookmark yang paling spesifik pada output untuk performa maksimum.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien |
Memerlukan Windows Vista, Windows XP, atau Windows 2000 Professional. |
Server |
Memerlukan Windows Server 2008, Windows Server 2003, atau Windows 2000 Server. |
Header |
Dinyatakan dalam Esent.h. |
Pustaka |
Gunakan ESENT.lib. |
DLL |
Membutuhkan ESENT.dll. |
Lihat juga
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_IndexRange
JET_RECORDLIST
JetGotoBookmark
JetRetrieveColumn
JetSetIndexRange
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk