Bagikan melalui


Fungsi SQLExtendedFetch

Kesesuaian
Versi diperkenalkan: Kepatuhan Standar ODBC 1.0: Tidak digunakan lagi

Ringkasan
SQLExtendedFetch mengambil kumpulan baris data yang ditentukan dari kumpulan hasil dan mengembalikan data untuk semua kolom terikat. Kumpulan baris dapat ditentukan pada posisi absolut atau relatif atau berdasarkan marka buku.

Catatan

Di ODBC 3*.x*, SQLExtendedFetch telah digantikan oleh SQLFetchScroll. Aplikasi ODBC 3*.x* tidak boleh memanggil SQLExtendedFetch; sebaliknya mereka harus memanggil SQLFetchScroll. Driver Manager memetakan SQLFetchScroll ke SQLExtendedFetch saat bekerja dengan driver ODBC 2*.x*. Driver ODBC 3*.x* harus mendukung SQLExtendedFetch jika mereka ingin bekerja dengan aplikasi ODBC 2*.x* yang menyebutnya. Untuk informasi selengkapnya, lihat "Komentar" dan Blokir Kursor, Kursor yang Dapat Digulir, dan Kompatibilitas Mundur dalam Lampiran G: Panduan Driver untuk Kompatibilitas Mundur.

Sintaks

  
SQLRETURN SQLExtendedFetch(  
      SQLHSTMT         StatementHandle,  
      SQLUSMALLINT     FetchOrientation,  
      SQLLEN           FetchOffset,  
      SQLULEN *        RowCountPtr,  
      SQLUSMALLINT *   RowStatusArray);  

Argumen

StatementHandle
[Input] Handel pernyataan.

FetchOrientation
[Input] Jenis pengambilan. Ini sama dengan FetchOrientation di SQLFetchScroll.

FetchOffset
[Input] Jumlah baris yang akan diambil. Ini sama dengan FetchOffset di SQLFetchScroll, dengan satu pengecualian. Ketika FetchOrientation SQL_FETCH_BOOKMARK, FetchOffset adalah bookmark panjang tetap, bukan offset dari bookmark. Dengan kata lain, SQLExtendedFetch mengambil marka buku dari argumen ini, bukan atribut pernyataan SQL_ATTR_FETCH_BOOKMARK_PTR. Ini tidak mendukung marka buku panjang variabel dan tidak mendukung pengambilan set baris pada offset (selain 0) dari marka buku.

RowCountPtr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah baris yang benar-benar diambil. Buffer ini digunakan dengan cara yang sama seperti buffer yang ditentukan oleh atribut pernyataan SQL_ATTR_ROWS_FETCHED_PTR. Buffer ini hanya digunakan oleh SQLExtendedFetch. Ini tidak digunakan oleh SQLFetch atau SQLFetchScroll.

RowStatusArray
[Output] Penunjuk ke array untuk mengembalikan status setiap baris. Array ini digunakan dengan cara yang sama dengan array yang ditentukan oleh atribut pernyataan SQL_ATTR_ROW_STATUS_PTR.

Namun, alamat array ini tidak disimpan di bidang SQL_DESC_STATUS_ARRAY_PTR di IRD. Selain itu, array ini hanya digunakan oleh SQLExtendedFetch dan oleh SQLBulkOperations dengan Operasi SQL_ADD atau SQLSetPos ketika dipanggil setelah SQLExtendedFetch. Ini tidak digunakan oleh SQLFetch atau SQLFetchScroll, dan tidak digunakan oleh SQLBulkOperations atau SQLSetPos ketika dipanggil setelah SQLFetch atau SQLFetchScroll. Ini juga tidak digunakan ketika SQLBulkOperations dengan Operasi SQL_ADD dipanggil sebelum fungsi pengambilan dipanggil. Dengan kata lain, ini hanya digunakan dalam status pernyataan S7. Ini tidak digunakan dalam pernyataan menyatakan S5 atau S6. Untuk informasi selengkapnya, lihat Transisi Pernyataan di Lampiran B: Tabel Transisi Status ODBC.

Aplikasi harus menyediakan penunjuk yang valid dalam argumen RowStatusArray ; jika tidak, perilaku SQLExtendedFetch dan perilaku panggilan ke SQLBulkOperations atau SQLSetPos setelah kursor diposisikan oleh SQLExtendedFetch tidak ditentukan.

Kembali

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, atau SQL_INVALID_HANDLE.

Diagnostik

Ketika SQLExtendedFetch mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLError. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLExtendedFetch dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATEs yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya. Jika kesalahan terjadi pada satu kolom, SQLGetDiagField dapat dipanggil dengan DiagIdentifier SQL_DIAG_COLUMN_NUMBER untuk menentukan kolom tempat kesalahan terjadi; dan SQLGetDiagField dapat dipanggil dengan DiagIdentifier SQL_DIAG_ROW_NUMBER untuk menentukan baris yang berisi kolom tersebut.

SQLSTATE Kesalahan Deskripsi
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01004 Data string, terpotong kanan String atau data biner yang dikembalikan untuk kolom menghasilkan pemotongan karakter nonblank atau data biner non-NULL. Jika itu adalah nilai string, nilai tersebut dipotong kanan. Jika itu adalah nilai numerik, bagian pecahan dari angka tersebut dipotong. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01S01 Kesalahan berturut-turut Terjadi kesalahan saat mengambil satu atau beberapa baris. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01S06 Mencoba mengambil sebelum tataan hasil mengembalikan set baris pertama Himpunan baris yang diminta tumpang tindih dengan awal tataan hasil ketika posisi saat ini berada di luar baris pertama, dan FetchOrientation SQL_PRIOR atau FetchOrientation SQL_RELATIVE dengan FetchOffset negatif yang nilai absolutnya kurang dari atau sama dengan SQL_ROWSET_SIZE saat ini. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01S07 Pemotongan pecahan Data yang dikembalikan untuk kolom dipotong. Untuk jenis data numerik, bagian pecahan dari angka dipotong. Untuk jenis data waktu, tanda waktu, dan interval yang berisi komponen waktu, bagian pecahan waktu dipotong.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
07006 Pelanggaran atribut jenis data terbatas Nilai data tidak dapat dikonversi ke jenis data C yang ditentukan oleh TargetType di SQLBindCol.
07009 Indeks deskriptor tidak valid Kolom 0 terikat dengan SQLBindCol, dan atribut pernyataan SQL_ATTR_USE_BOOKMARKS diatur ke SQL_UB_OFF.
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses.
22002 Variabel indikator diperlukan tetapi tidak disediakan Data NULL diambil ke dalam kolom yang StrLen_or_IndPtr diatur oleh SQLBindCol adalah penunjuk null.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
22003 Nilai numerik di luar rentang Mengembalikan nilai numerik (sebagai numerik atau string) untuk satu atau beberapa kolom akan menyebabkan seluruh (dibandingkan dengan pecahan) bagian dari angka yang akan dipotong.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)

Untuk informasi selengkapnya, lihat Panduan untuk Jenis Data Interval dan Numerik di Lampiran D: Jenis Data.
22007 Format tanggalwaktu tidak valid Kolom karakter dalam tataan hasil terikat ke struktur C tanggal, waktu, atau tanda waktu, dan nilai dalam kolom masing-masing, tanggal, waktu, atau tanda waktu yang tidak valid.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
22012 Pembagian dengan nol Nilai dari ekspresi aritmatika dikembalikan, yang menghasilkan pembagian dengan nol.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
22015 Meluapnya bidang interval Menetapkan dari jenis SQL numerik atau interval yang tepat ke jenis C interval menyebabkan hilangnya digit signifikan di bidang utama.

Saat mengambil data ke jenis C interval, tidak ada representasi nilai jenis SQL dalam jenis C interval.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
22018 Nilai karakter tidak valid untuk spesifikasi cast Jenis C adalah jenis data numerik, tanggalwaktu, atau interval yang tepat atau perkiraan; jenis SQL kolom adalah jenis data karakter; dan nilai dalam kolom bukan harfiah yang valid dari jenis C terikat.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
24000 Status kursor tidak valid StatementHandle berada dalam status dijalankan, tetapi tidak ada kumpulan hasil yang dikaitkan dengan StatementHandle.
HY000 Kesalahan umum Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLError di buffer *MessageText menjelaskan kesalahan dan penyebabnya.
HY001 Kesalahan alokasi memori Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY008 Operasi dibatalkan Pemrosesan asinkron diaktifkan untuk StatementHandle. Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle, dan kemudian fungsi dipanggil lagi pada StatementHandle.

Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle dari utas yang berbeda dalam aplikasi multithread.
HY010 Kesalahan urutan fungsi (DM) Fungsi eksekusi asinkron dipanggil untuk handel koneksi yang terkait dengan StatementHandle. Fungsi asinkron ini masih dijalankan ketika fungsi SQLExtendedFetch dipanggil.

(DM) SQLExecute, SQLExecDirect, atau SQLMoreResults dipanggil untuk StatementHandle dan dikembalikan SQL_PARAM_DATA_AVAILABLE. Fungsi ini dipanggil sebelum data diambil untuk semua parameter yang dialirkan.

(DM) StatementHandle yang ditentukan tidak dalam status dijalankan. Fungsi ini dipanggil tanpa terlebih dahulu memanggil fungsi SQLExecDirect, SQLExecute, atau katalog.

(DM) Fungsi eksekusi asinkron (bukan yang ini) dipanggil untuk StatementHandle dan masih dijalankan ketika fungsi ini dipanggil.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos dipanggil untuk StatementHandle dan dikembalikan SQL_NEED_DATA. Fungsi ini dipanggil sebelum data dikirim untuk semua parameter atau kolom data-at-execution.

(DM) SQLExtendedFetch dipanggil untuk StatementHandle setelah SQLFetch atau SQLFetchScroll dipanggil dan sebelum SQLFreeStmt dipanggil dengan opsi SQL_CLOSE.

(DM) SQLBulkOperations dipanggil untuk pernyataan sebelum SQLFetch, SQLFetchScroll, atau SQLExtendedFetch dipanggil, dan kemudian SQLExtendedFetch dipanggil sebelum SQLFreeStmt dipanggil dengan opsi SQL_CLOSE.
HY013 Kesalahan manajemen memori Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah.
HY106 Ambil jenis di luar rentang (DM) Nilai yang ditentukan untuk argumen FetchOrientation tidak valid. (Lihat "Komentar.")

Argumen FetchOrientation SQL_FETCH_BOOKMARK, dan atribut pernyataan SQL_ATTR_USE_BOOKMARKS diatur ke SQL_UB_OFF.

Nilai opsi pernyataan SQL_CURSOR_TYPE SQL_CURSOR_FORWARD_ONLY, dan nilai argumen FetchOrientation tidak SQL_FETCH_NEXT.

Argumen FetchOrientation SQL_FETCH_RESUME.
HY107 Nilai baris di luar rentang Nilai yang ditentukan dengan opsi pernyataan SQL_CURSOR_TYPE SQL_CURSOR_KEYSET_DRIVEN, tetapi nilai yang ditentukan dengan atribut pernyataan SQL_KEYSET_SIZE lebih besar dari 0 dan kurang dari nilai yang ditentukan dengan atribut pernyataan SQL_ROWSET_SIZE.
HY111 Nilai marka buku tidak valid Argumen FetchOrientation SQL_FETCH_BOOKMARK, dan bookmark yang ditentukan dalam argumen FetchOffset tidak valid.
HY117 Koneksi ditangguhkan karena status transaksi yang tidak diketahui. Hanya fungsi putuskan sambungan dan baca-saja yang diizinkan. (DM) Untuk informasi selengkapnya tentang status ditangguhkan, lihat Fungsi SQLEndTran.
HYC00 Fitur opsional tidak diimplementasikan Driver atau sumber data tidak mendukung jenis pengambilan yang ditentukan.

Driver atau sumber data tidak mendukung konversi yang ditentukan oleh kombinasi TargetType di SQLBindCol dan jenis data SQL dari kolom yang sesuai. Kesalahan ini hanya berlaku ketika jenis data SQL kolom dipetakan ke jenis data SQL khusus driver.
HYT00 Waktu habis kedaluwarsa Periode batas waktu kueri kedaluwarsa sebelum sumber data mengembalikan tataan hasil. Periode batas waktu diatur melalui SQLSetStmtOption, SQL_QUERY_TIMEOUT.
HYT01 Kesalahan waktu habis koneksi kedaluwarsa Periode batas waktu koneksi kedaluwarsa sebelum sumber data merespons permintaan. Periode batas waktu koneksi diatur melalui SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Driver tidak mendukung fungsi ini (DM) Driver yang terkait dengan StatementHandle tidak mendukung fungsi.

Komentar

Perilaku SQLExtendedFetch identik dengan SQLFetchScroll, dengan pengecualian berikut:

  • SQLExtendedFetch dan SQLFetchScroll menggunakan metode yang berbeda untuk mengembalikan jumlah baris yang diambil. SQLExtendedFetch mengembalikan jumlah baris yang diambil dalam *RowCountPtr; SQLFetchScroll mengembalikan jumlah baris yang diambil langsung ke buffer yang ditunjukkan oleh SQL_ATTR_ROWS_FETCHED_PTR. Untuk informasi selengkapnya, lihat argumen RowCountPtr .

  • SQLExtendedFetch dan SQLFetchScroll mengembalikan status setiap baris dalam array yang berbeda. Untuk informasi selengkapnya, lihat argumen RowStatusArray .

  • SQLExtendedFetch dan SQLFetchScroll menggunakan metode yang berbeda untuk mengambil marka buku saat FetchOrientation SQL_FETCH_BOOKMARK. SQLExtendedFetch tidak mendukung bookmark panjang variabel atau mengambil set baris pada offset selain 0 dari bookmark. Untuk informasi selengkapnya, lihat argumen FetchOffset .

  • SQLExtendedFetch dan SQLFetchScroll menggunakan ukuran set baris yang berbeda. SQLExtendedFetch menggunakan nilai atribut pernyataan SQL_ROWSET_SIZE, dan SQLFetchScroll menggunakan nilai atribut pernyataan SQL_ATTR_ROW_ARRAY_SIZE.

  • SQLExtendedFetch memiliki semantik penanganan kesalahan yang sedikit berbeda dari SQLFetchScroll. Untuk informasi selengkapnya, lihat "Penanganan Kesalahan" di bagian "Komentar" di SQLFetchScroll.

  • SQLExtendedFetch tidak mendukung offset pengikatan (atribut pernyataan SQL_ATTR_ROW_BIND_OFFSET_PTR).

  • Panggilan ke SQLExtendedFetch tidak dapat dicampur dengan panggilan ke SQLFetch atau SQLFetchScroll, dan jika SQLBulkOperations dipanggil sebelum fungsi pengambilan dipanggil, SQLExtendedFetch tidak dapat dipanggil sampai kursor ditutup dan dibuka kembali. Artinya, SQLExtendedFetch hanya dapat dipanggil dalam status pernyataan S7. Untuk informasi selengkapnya, lihat Transisi Pernyataan di Lampiran B: Tabel Transisi Status ODBC.

Ketika aplikasi memanggil SQLFetchScroll saat menggunakan driver ODBC 2*.x*, Manajer Driver memetakan panggilan ini ke SQLExtendedFetch. Untuk informasi selengkapnya, lihat "Driver SQLFetchScroll dan ODBC 2*.x* di SQLFetchScroll.

Di ODBC 2*.x*, SQLExtendedFetch dipanggil untuk mengambil beberapa baris dan SQLFetch dipanggil untuk mengambil satu baris. Di ODBC 3*.x*, di sisi lain, SQLFetch dapat dipanggil untuk mengambil beberapa baris.

Untuk informasi tentang Lihat
Mengikat buffer ke kolom dalam tataan hasil Fungsi SQLBindCol
Melakukan operasi menyisipkan, memperbarui, atau menghapus secara massal Fungsi SQLBulkOperations
Membatalkan pemrosesan pernyataan Fungsi SQLCancel
Mengembalikan informasi tentang kolom dalam tataan hasil Fungsi SQLDescribeCol
Menjalankan pernyataan SQL Fungsi SQLExecDirect
Menjalankan pernyataan SQL yang disiapkan Fungsi SQLExecute
Mengembalikan jumlah kolom tataan hasil Fungsi SQLNumResultCols
Memosisikan kursor, merefresh data di set baris, atau memperbarui atau menghapus data dalam tataan hasil Fungsi SQLSetPos
Mengatur atribut pernyataan Fungsi SQLSetStmtAttr

Lihat Juga

Referensi API ODBC
File Header ODBC