Bagikan melalui


Fungsi JetOpenTemporaryTable

Berlaku untuk: Windows | Windows Server

Fungsi JetOpenTemporaryTable

Fungsi JetOpenTemporaryTable membuat tabel volatil dengan satu indeks yang dapat digunakan untuk menyimpan dan mengambil rekaman, sama seperti tabel biasa yang dibuat melalui JetCreateTableColumnIndex.

Windows Vista:JetOpenTemporaryTable diperkenalkan di Windows Vista.

Tabel sementara lebih cepat daripada tabel biasa karena sifatnya yang mudah menguras. Mereka dapat dengan cepat mengurutkan dan melakukan penghapusan duplikat pada kumpulan catatan ketika diakses secara murni berurutan.

    JET_ERR JET_API JetOpenTemporaryTable(
      __in          JET_SESID sesid,
      __in          JET_OPENTEMPORARYTABLE* popentemporarytable
    );

Parameter

sesid

Sesi yang akan digunakan untuk panggilan ini.

popentemporarytable

Penunjuk ke struktur JET_OPENTEMPORARYTABLE yang berisi deskripsi tabel sementara untuk dibuat pada input. Setelah panggilan berhasil, struktur berisi handel ke tabel sementara dan identifikasi kolom.

Tampilkan Nilai

Fungsi ini mengembalikan jenis data JET_ERR dengan salah satu kode pengembalian berikut. Untuk informasi selengkapnya tentang kemungkinan kesalahan ESE, lihat Kesalahan Mesin Penyimpanan yang Dapat Diperluas dan Parameter Penanganan Kesalahan.

Menampilkan kode

Deskripsi

JET_errSuccess

Operasi berhasil diselesaikan.

JET_errOutOfMemory

Operasi gagal karena memori tidak cukup dapat dialokasikan untuk menyelesaikannya.

JetOpenTemporaryTable dapat mengembalikan JET_errOutOfMemory jika ruang alamat proses host menjadi terlalu terfragmentasi. Manajer tabel sementara akan mengalokasikan potongan ruang alamat 1 MB untuk setiap tabel sementara yang dibuat terlepas dari jumlah data yang disimpan.

JET_errInvalidParameter

Salah satu parameter yang disediakan berisi nilai yang tidak terduga atau kombinasi beberapa nilai parameter menghasilkan hasil yang tidak terduga.

Kesalahan ini dikembalikan oleh JetOpenTemporaryTable dalam kondisi berikut:

  • Anggota cbStruct dari struktur JET_OPENTEMPORARYTABLE tidak sesuai dengan versi struktur ini yang didukung oleh versi mesin database tersebut

  • Anggota cbKeyMost dari struktur JET_OPENTEMPORARYTABLE kurang dari JET_cbKeyMostMin.

  • Anggota cbKeyMost dari struktur JET_OPENTEMPORARYTABLE lebih besar dari nilai terbesar yang didukung untuk ukuran halaman database untuk instans (JET_paramDatabasePageSize). Lihat parameter JET_paramKeyMost dalam daftar Parameter Informasi untuk informasi selengkapnya.

  • Anggota cbVarSegMac dari struktur JET_OPENTEMPORARYTABLE lebih besar dari anggota cbKeyMost .

JET_errNotInitialized

Operasi tidak dapat diselesaikan karena instans yang terkait dengan sesi belum diinisialisasi.

JET_errClientRequestToStopJetService

Operasi tidak dapat diselesaikan karena semua aktivitas pada instans yang terkait dengan sesi telah berhenti sebagai akibat dari panggilan ke JetStopService.

JET_errInstanceUnavailable

Operasi tidak dapat diselesaikan karena instans yang terkait dengan sesi mengalami kesalahan fatal yang mengharuskan akses ke semua data dicabut untuk melindungi integritas data tersebut.

Windows XP: Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru.

JET_errTermInProgress

Operasi tidak dapat diselesaikan karena instans yang terkait dengan sesi sedang dimatikan.

JET_errRestoreInProgress

Operasi tidak dapat diselesaikan karena operasi pemulihan sedang berlangsung pada instans yang terkait dengan sesi.

JET_errSessionSharingViolation

Sesi yang sama tidak dapat digunakan untuk lebih dari satu utas secara bersamaan.

Windows XP: Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru.

JET_errInvalidSesid

Handel sesi tidak valid atau mengacu pada sesi tertutup.

Catatan Kesalahan ini tidak dikembalikan dalam semua keadaan. Handel hanya divalidasi berdasarkan upaya terbaik.

JET_errOutOfCursors

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk membuka kursor baru. Sumber daya kursor dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramMaxCursors.

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.

JET_errCannotMaterializeForwardOnlySort

JetOpenTemporaryTable gagal karena JET_bitTTForwardOnly ditentukan dan tabel sementara yang ditentukan tidak dapat dibuat menggunakan pengoptimalan maju-saja.

Windows Server 2003: Kesalahan ini hanya akan dikembalikan oleh Windows Server 2003 dan rilis yang lebih baru.

JET_errTooManyColumns

Upaya dilakukan untuk menambahkan terlalu banyak kolom ke tabel. Tabel tidak boleh memiliki lebih dari JET_ccolFixedMost kolom tetap, tidak lebih dari JET_ccolVarMost kolom dengan panjang variabel, dan tidak lebih dari kolom yang diberi tag JET_ccolTaggedMost.

JET_errTooManyOpenTables

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan skema tabel. Untuk mengonfigurasi jumlah tabel yang memiliki skema yang dapat di-cache, gunakan JetSetSystemParameter dengan JET_paramMaxOpenTables.

JET_errInvalidCodePage

Anggota cp dari struktur JET_COLUMNDEF tidak diatur ke halaman kode yang valid. Satu-satunya nilai yang valid untuk kolom teks adalah Bahasa Inggris (1252) dan Unicode (1200). Nilai 0 berarti default akan digunakan (Inggris, 1252).

JET_errInvalidColumnType

Anggota coltypJET_COLUMNDEF tidak diatur ke jenis kolom yang valid.

JET_errInvalidLanguageId

Indeks tidak dapat dibuat karena upaya dilakukan untuk menggunakan ID lokal yang tidak valid. ID lokal mungkin benar-benar tidak valid atau paket bahasa terkait mungkin tidak diinstal.

JET_errInvalidLCMapStringFlags

Indeks tidak dapat dibuat karena upaya dilakukan untuk menggunakan set bendera normalisasi yang tidak valid.

Windows XP: Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru.

Windows 2000: Pada Windows 2000, bendera normalisasi yang tidak valid akan menghasilkan JET_errIndexInvalidDef.

JET_errIndexInvalidDef

Indeks tidak dapat dibuat karena definisi indeks tidak valid ditentukan. JetOpenTemporaryTable akan mengembalikan kesalahan ini dalam kondisi berikut:

  • Lokal Netral Bahasa ditentukan.

  • Sekumpulan bendera normalisasi yang tidak valid ditentukan.

Windows 2000: Kesalahan ini hanya akan dikembalikan oleh Windows 2000.

JET_errTooManyOpenIndexes

Operasi gagal karena mesin tidak dapat mengalokasikan sumber daya yang diperlukan untuk menyimpan indeks tabel. Untuk mengonfigurasi jumlah indeks yang memiliki skema yang dapat di-cache, gunakan JetSetSystemParameter dengan JET_paramMaxOpenTables.

Jika berhasil, kursor yang dibuka pada tabel sementara yang baru dibuat akan dikembalikan. Status database sementara akan disiapkan untuk memuat tabel sementara baru. Status database biasa apa pun yang digunakan oleh mesin database akan tetap tidak berubah.

Jika gagal, tabel sementara tidak akan dibuat dan kursor tidak akan dikembalikan. Status database sementara dapat diubah. Status database biasa apa pun yang digunakan oleh mesin database akan tetap tidak berubah.

Keterangan

Tabel sementara tidak mendukung pelengkap penuh opsi definisi kolom yang biasanya didukung oleh mesin database. Bahkan, hanya JET_bitColumnFixed dan JET_bitColumnTagged yang didukung. Ini berarti bahwa tidak dimungkinkan untuk membuat kolom kenaikan otomatis, versi, atau multinilai dalam tabel sementara. Akhirnya, kolom pembaruan escrow tidak didukung karena hanya dapat digunakan oleh satu sesi pada satu waktu. Jika salah satu opsi ini diminta, opsi tersebut akan diabaikan.

Tabel sementara tidak mendukung nilai default. Jika definisi kolom disediakan yang berisi spesifikasi nilai default, spesifikasi tersebut akan diabaikan.

Tabel sementara dikembalikan ke pemanggil sebagai hasil dari banyak fungsi ESE yang berbeda. Misalnya, JetGetIndexInfo dengan kumpulan opsi JET_IdxInfo akan mengembalikan tabel sementara yang berisi daftar semua kolom kunci dalam indeks tertentu. Tabel sementara mengikuti aturan siklus hidup yang sama dengan tabel sementara biasa seperti yang dijelaskan di sini.

Tabel sementara juga digunakan secara internal oleh mesin database untuk banyak tugas. Yang paling penting dari tugas-tugas ini adalah pembuatan indeks melalui tabel yang ada. Tabel sementara akan digunakan untuk mengurutkan kunci indeks yang digunakan untuk membangun indeks tersebut.

Semua tabel sementara disimpan dalam database sementara. Database sementara adalah file database khusus yang dipertahankan selama masa pakai instans ESE dan dihapus ketika instans tersebut dimatikan atau dimulai ulang. Lokasi database sementara dapat dikonfigurasi menggunakan JetSetSystemParameter dengan JET_paramTempPath. Penempatan database sementara pada disk relatif terhadap file log transaksi dan file database Anda mungkin penting jika aplikasi Anda sering menggunakan tabel sementara atau sering membuat indeks.

Siklus hidup tabel sementara terkait dengan kursor yang mereferensikannya. Jika semua kursor yang mereferensikan tabel sementara ditutup, baik secara implisit maupun eksplisit, tabel sementara akan dihapus. Jika tabel sementara dibuat di dalam transaksi dan transaksi tersebut kemudian digulung balik, tabel sementara akan dihapus karena kursor apa pun yang mereferensikannya saat ini akan ditutup secara implisit. Kursor baru hanya dapat mereferensikan tabel sementara melalui penggunaan JetDupCursor. Dalam hal ini, kursor baru akan diposisikan pada entri indeks pertama tabel sementara. JetDupCursor hanya akan berfungsi selama fase penggunaan tertentu untuk tabel sementara. Lihat keterangan mengenai kemampuan kursor tabel sementara untuk informasi selengkapnya. Tidak dimungkinkan untuk mereferensikan tabel sementara dari lebih dari satu sesi pada satu waktu.

Hati Ada masalah penting di JetDupCursor yang memengaruhi tabel sementara. Jika upaya dilakukan untuk menduplikasi tabel sementara yang berada dalam mode maju-saja maka kursor yang dihasilkan tidak akan dibuat dengan benar dan akan tidak berfungsi. Masih aman untuk menduplikasi kursor di atas tabel sementara yang terwujud.

Manajer tabel sementara dapat menerapkan tabel sementara dengan tiga cara. Metode pertama adalah mempertahankan tabel dalam memori. Strategi ini adalah yang tercepat tetapi hanya dapat digunakan untuk tabel kecil, sederhana, sementara. Metode kedua adalah membuat pengurutan berbasis disk yang dapat didorong menggunakan iterator khusus maju. Strategi ini hanya dapat digunakan dalam keadaan tertentu dan merupakan cara tercepat untuk mengurutkan dan menghapus duplikat dari himpunan data yang sangat besar. Metode ketiga adalah membuat Pohon B+ di database sementara untuk menahan tabel sementara. Strategi ini adalah yang paling lambat, tetapi yang paling serbaguna, dan disebut sebagai tabel sementara materialisasi. Strategi ini dapat digunakan dalam kombinasi untuk akhirnya mencapai fungsionalitas yang diminta dari tabel sementara.

Ketika tabel sementara tidak terwujud, tabel tersebut digunakan terutama dalam dua fase utama. Fase pertama adalah fase penyisipan di mana tabel diisi dengan himpunan data awalnya. Selama fase ini, hanya penyisipan data yang diizinkan. Fase ini berakhir ketika upaya dilakukan untuk memindahkan kursor menggunakan JetMove atau JetSeek. Fase kedua adalah fase ekstraksi data. Selama fase ini, data yang disimpan dalam tabel sementara dapat diekstraksi sesuai dengan kemampuan yang diminta ketika tabel sementara dibuat.

Kapabilitas Kursor Tabel Sementara

Ketika tabel sementara terwujud, kursor memiliki kemampuan berikut tetapi mungkin lebih dibatasi oleh opsi yang diminta:

Ketika tabel sementara tidak terwujud dan berada dalam fase sisipan, kursor memiliki kemampuan berikut tetapi mungkin lebih dibatasi oleh opsi yang diminta:

Ketika tabel sementara tidak terwujud dan berada dalam fase ekstrak, kursor memiliki kemampuan berikut tetapi dapat dibatasi lebih lanjut oleh opsi yang diminta:

Persyaratan

Persyaratan Nilai

Klien

Memerlukan Windows Vista.

Server

Membutuhkan Windows Server 2008.

Header

Dinyatakan dalam Esent.h.

Pustaka

Gunakan ESENT.lib.

DLL

Membutuhkan ESENT.dll.

Lihat juga

JET_ERR
JET_SESID
JET_OPENTEMPORARYTABLE
JetCloseTable
JetCreateTableColumnIndex
JetDupCursor
JetMove
JetRollback
JetSeek
JetSetSystemParameter
Parameter Informasi
Parameter Database Sementara