Fungsi JetRetrieveColumn
Berlaku untuk: Windows | Windows Server
Fungsi JetRetrieveColumn
Fungsi JetRetrieveColumn mengambil nilai kolom tunggal dari rekaman saat ini. Rekaman adalah rekaman yang terkait dengan entri indeks pada posisi kursor saat ini. Atau, fungsi ini dapat mengambil kolom dari rekaman yang sedang dibuat di buffer salinan kursor. Fungsi ini juga dapat mengambil data kolom dari entri indeks yang mereferensikan rekaman saat ini. Selain mengambil nilai kolom aktual, JetRetrieveColumn juga dapat digunakan untuk mengambil ukuran kolom, sebelum mengambil data kolom itu sendiri sehingga buffer aplikasi dapat berukuran tepat.
JET_ERR JET_API JetRetrieveColumn(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_COLUMNID columnid,
__out_opt void* pvData,
__in unsigned long cbData,
__out_opt unsigned long* pcbActual,
__in JET_GRBIT grbit,
__in_out_opt JET_RETINFO* pretinfo
);
Parameter
sesid
Sesi yang digunakan untuk panggilan ini.
tableid
Kursor yang digunakan untuk panggilan ini.
columnid
JET_COLUMNID kolom yang akan diambil.
Nilai kolom 0 (nol) dapat diberikan yang tidak merujuk ke kolom individual mana pun. Saat kolom 0 (nol) diberikan, semua kolom yang ditandai, jarang, dan kolom multinilai diperlakukan sebagai kolom tunggal. Ini memfasilitasi pengambilan semua kolom jarang yang ada dalam rekaman.
pvData
Buffer output yang menerima nilai kolom.
cbData
Ukuran maksimum, dalam byte, dari buffer output.
pcbActual
Menerima ukuran aktual, dalam byte, dari nilai kolom.
Jika parameter ini ADALAH NULL, maka ukuran sebenarnya dari nilai kolom tidak akan dikembalikan.
grbit
Sekelompok bit yang berisi opsi yang akan digunakan untuk panggilan ini, yang mencakup nol atau beberapa hal berikut:
Nilai |
Makna |
---|---|
JET_bitRetrieveCopy |
Bendera ini menyebabkan mengambil kolom untuk mengambil nilai yang dimodifikasi alih-alih nilai asli. Jika nilai belum dimodifikasi, maka nilai asli diambil. Dengan cara ini, nilai yang belum disisipkan atau diperbarui dapat diambil selama operasi menyisipkan atau memperbarui rekaman. |
JET_bitRetrieveFromIndex |
Opsi ini digunakan untuk mengambil nilai kolom dari indeks, jika memungkinkan, tanpa mengakses rekaman. Dengan cara ini, pemuatan rekaman yang tidak perlu dapat dihindari ketika data yang diperlukan tersedia dari entri indeks itu sendiri. Dalam kasus di mana nilai kolom asli tidak dapat diambil dari indeks, karena transformasi atau pemotokan data yang tidak dapat diubah, rekaman akan diakses dan data diambil seperti biasa. Ini adalah opsi performa dan hanya boleh ditentukan ketika kemungkinan nilai kolom dapat diambil dari indeks. Opsi ini tidak boleh ditentukan jika indeks saat ini adalah indeks berkluster, karena entri indeks untuk indeks berkluster, atau primer, adalah rekaman itu sendiri. Bit ini tidak dapat diatur jika JET_bitRetrieveFromPrimaryBookmark juga diatur. |
JET_bitRetrieveFromPrimaryBookmark |
Opsi ini digunakan untuk mengambil nilai kolom dari marka buku indeks, dan mungkin berbeda dari nilai indeks saat kolom muncul baik dalam indeks utama maupun indeks saat ini. Opsi ini tidak boleh ditentukan jika indeks saat ini adalah indeks terkluster, atau primer. Bit ini tidak dapat diatur jika JET_bitRetrieveFromIndex juga diatur. |
JET_bitRetrieveTag |
Opsi ini digunakan untuk mengambil nomor urutan nilai kolom multinilai dalam pretinfo-itagSequence>. Bidang itagSequence biasanya merupakan input untuk mengambil nilai kolom multinilai dari rekaman. Namun, saat mengambil nilai dari indeks, dimungkinkan juga untuk mengaitkan entri indeks dengan nomor urutan tertentu dan mengambil nomor urutan ini juga. Mengambil nomor urut dapat menjadi operasi yang mahal dan hanya boleh dilakukan jika perlu. |
JET_bitRetrieveNull |
Opsi ini digunakan untuk mengambil nilai NULL kolom multinilai. Jika opsi ini tidak ditentukan, nilai NULL kolom multinilai akan otomatis dilewati. |
JET_bitRetrieveIgnoreDefault |
Opsi ini hanya memengaruhi kolom multinilai dan menyebabkan nilai NULL dikembalikan saat nomor urutan yang diminta adalah 1 dan tidak ada nilai yang ditetapkan untuk kolom dalam rekaman. |
JET_bitRetrieveLongId |
Bendera ini hanya untuk penggunaan internal dan tidak dimaksudkan untuk digunakan dalam aplikasi Anda. |
JET_bitRetrieveLongValueRefCount |
Bendera ini hanya untuk penggunaan internal dan tidak dimaksudkan untuk digunakan dalam aplikasi Anda. |
JET_bitRetrieveTuple |
Bendera ini akan memungkinkan pengambilan segmen tuple indeks. Bit ini harus ditentukan dengan JET_bitRetrieveFromIndex. |
pretinfo
Jika pretinfo diberikan sebagai NULL maka fungsi bertingkah seolah-olah itagSequence 1 dan ibLongValue 0 (nol) diberikan. Hal ini menyebabkan pengambilan kolom mengambil nilai pertama kolom multinilai, dan mengambil data panjang pada offset 0 (nol).
Parameter ini digunakan untuk menyediakan satu atau beberapa hal berikut:
Nilai |
Makna |
---|---|
ibLongValue |
Memberikan offset biner ke dalam nilai kolom yang panjang saat mengambil sebagian nilai kolom. |
itagSequence |
Memberikan nomor urut dari nilai kolom multinilai yang diinginkan. Perhatikan bahwa bidang ini hanya diatur jika JET_bitRetrieveTag ditentukan. Jika tidak, itu tidak dimodifikasi. |
columnidNextTagged |
Mengembalikan ID kolom dari nilai kolom yang dikembalikan saat mengambil semua kolom yang ditandai, jarang, dan multinilai, menggunakan columnid passing 0 (nol). |
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_errBadColumnId |
ID kolom yang diberikan berada di luar batas hukum ID kolom. |
JET_errBadItagSequence |
Nilai nomor urutan kolom multinilai yang tidak valid telah diteruskan dalam pretinfo-itagSequence>. Nilai yang valid untuk nomor urutan nilai kolom multinilai adalah 1 atau lebih besar. Nilai 0 (nol) tidak valid untuk fungsi ini. |
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_errColumnNotFound |
Kolom yang dijelaskan oleh columnid yang diberikan tidak ada dalam tabel. |
JET_errIndexTuplesCannotRetrieveFromIndex |
Kolom yang diindeks sebagai substring tidak dapat diambil dari indeks, karena hanya sebagian kecil kolom yang biasanya ada di setiap entri indeks. |
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. Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru. |
JET_errInvalidBufferSize |
Dalam beberapa kasus, buffer yang diberikan untuk kolom ambil harus berukuran cukup untuk mengembalikan jumlah nilai kolom apa pun. Misalnya, kolom escrow yang dapat diperbarui disesuaikan agar konsisten untuk konteks transaksional sesi panggilan dan penyesuaian ini memerlukan buffer yang disediakan oleh pemanggil. Jika ruang buffer tidak cukup disediakan, maka JET_errInvalidBufferSize dikembalikan dan tidak ada data kolom apa pun yang dikembalikan. |
JET_errInvalidParameter |
Satu atau beberapa parameter yang diberikan salah. Ini dapat terjadi jika retinfo.cbStruct lebih kecil dari ukuran JET_RETINFO. |
JET_errInvalidgrbit |
Opsi yang disediakan tidak diketahui atau kombinasi ilegal dari pengaturan bit yang diketahui. |
JET_errNoCurrentRecord |
Kursor tidak diposisikan pada rekaman. Ini dapat terjadi karena berbagai alasan. Misalnya, ini akan terjadi jika kursor saat ini diposisikan setelah rekaman terakhir pada indeks saat ini. |
JET_errNotInitialized |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi belum diinisialisasi. |
JET_errRestoreInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi 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_errTermInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi sedang dimatikan. |
JET_wrnBufferTruncated |
Seluruh nilai kolom tidak dapat diambil karena buffer yang diberikan lebih kecil dari ukuran kolom. |
JET_wrnColumnNull |
Nilai kolom yang diambil adalah NULL. |
Jika berhasil, nilai kolom untuk kolom yang diberikan, disalin ke dalam buffer yang diberikan. Kurang dari semua nilai kolom disalin dengan JET_wrnBufferTruncated peringatan dikembalikan. Jika pcbActual diberikan, ukuran aktual nilai kolom dikembalikan. Perhatikan bahwa nilai NULL memiliki panjang 0 (nol) dan dengan demikian akan mengatur ukuran yang dikembalikan ke 0 (nol). Jika kolom yang diambil adalah kolom multinilai, dan pretinfo diberikan, dan JET_bitReturnTag diatur sebagai opsi, maka jumlah urutan nilai kolom dikembalikan dalam pretinfo-itagSequence>.
Jika gagal, lokasi kursor dibiarkan tidak berubah dan tidak ada data yang disalin ke dalam buffer yang disediakan.
Keterangan
Panggilan ini digunakan hanya sekali untuk mengambil data berukuran tetap atau diketahui untuk kolom non-multinilai. Namun, ketika data kolom berukuran tidak diketahui, panggilan ini biasanya digunakan dua kali. Ini dipanggil terlebih dahulu untuk menentukan ukuran data sehingga dapat mengalokasikan ruang penyimpanan yang diperlukan. Kemudian, panggilan yang sama dilakukan lagi untuk mengambil data kolom. Ketika jumlah nilai aktual tidak diketahui, karena kolom multinilai, panggilan biasanya digunakan tiga kali. Pertama untuk mendapatkan jumlah nilai dan kemudian dua kali lagi untuk mengalokasikan penyimpanan dan mengambil data aktual.
Mengambil semua nilai untuk kolom multinilai dapat dilakukan dengan berulang kali memanggil fungsi ini dengan nilai pretinfo-itagSequence> dimulai dari 1 dan meningkat pada setiap panggilan berikutnya. Nilai kolom terakhir diketahui diambil ketika JET_wrnColumnNull dikembalikan dari fungsi . Perhatikan bahwa metode ini tidak dapat dilakukan jika kolom multinilai memiliki nilai NULL eksplisit yang diatur dalam urutan nilainya, karena nilai ini akan dilewati. Jika aplikasi ingin mengambil semua nilai kolom multinilai, termasuk yang secara eksplisit diatur ke NULL, maka JetRetrieveColumns harus digunakan alih-alih JetRetrieveColumn. Perhatikan bahwa fungsi ini tidak mengembalikan jumlah nilai untuk fungsi multinilai saat nilai itagSequence 0 (nol) diberikan. Hanya JetRetrieveColumns yang akan mengembalikan jumlah nilai nilai kolom saat nilai itagSequence 0 (nol) diteruskan.
Jika fungsi ini dipanggil pada tingkat transaksi 0 (nol), misalnya, sesi panggilan tidak sendiri dalam transaksi, maka transaksi dibuka dan ditutup dalam fungsi. Tujuan dari ini adalah untuk mengembalikan hasil yang konsisten dalam kasus bahwa nilai panjang mencakup halaman database. Perhatikan bahwa transaksi dirilis antara panggilan fungsi dan serangkaian panggilan ke fungsi ini ketika sesi tidak dalam transaksi dapat mengembalikan data yang diperbarui setelah panggilan pertama ke fungsi ini.
Nilai kolom default akan diambil ketika kolom belum diatur secara eksplisit ke nilai lain, kecuali opsi JET_bitRetrieveIgnoreDefault diatur.
Mengambil nilai kolom autoincrement dari buffer salinan sebelum menyisipkan adalah cara umum untuk mengidentifikasi rekaman secara unik untuk tautan saat menyisipkan data yang dinormalisasi ke dalam beberapa tabel. Nilai autoincrement dialokasikan ketika operasi penyisipan dimulai dan dapat diambil dari penyangga salinan kapan saja hingga pembaruan selesai.
Saat mengambil semua kolom yang diberi tag, multinilai, dan jarang, dengan mengatur columnid ke 0 (nol), kolom diambil dalam urutan columnid dari columnid terendah ke columnid tertinggi. Urutan nilai kolom yang sama dikembalikan setiap kali nilai kolom diambil. Urutannya deterministik.
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_COLUMNID
JET_ERR
JET_SESID
JET_TABLEID
JET_RETINFO
JetSetColumn
JetRetrieveColumns
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