Bagikan melalui


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:

  • Parameter precordlist adalah NULL.

  • Anggota cbStruct dari struktur JET_RECORDLIST yang ditentukan dalam parameter precordlist tidak sama dengan ukuran struktur JET_RECORDLIST .

  • Parameter cindexrange adalah nol.

  • Parameter cindexrange lebih besar dari 64.

  • Anggota cbStruct untuk elemen apa pun dalam array yang ditentukan oleh parameter rgindexrange tidak sama dengan ukuran struktur JET_IndexRange .

  • Elemen dalam array rgindexrange berisi JET_TABLEIDdari tabel yang berbeda.

  • Elemen dalam array rgindexrange berisi JET_TABLEID yang tidak diposisikan pada indeks sekunder.

  • Satu atau beberapa elemen dalam array rgindexrange berisi JET_TABLEIDs yang diposisikan pada indeks sekunder yang sama.

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:

  1. 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.

  2. Ulangi langkah 1 dengan kursor baru pada indeks "nama belakang" untuk semua orang yang "nama belakang" dimulai dengan 'G'.

  3. Teruskan kriteria ini ke JetIntersectIndexes untuk menghitung hasilnya ke dalam tabel sementara.

  4. 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