Fungsi SQLSetDescRec

Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 3.0: ISO 92

Ringkasan
Fungsi SQLSetDescRec mengatur beberapa bidang deskriptor yang memengaruhi jenis data dan buffer yang terikat ke kolom atau data parameter.

Sintaks

  
SQLRETURN SQLSetDescRec(  
      SQLHDESC      DescriptorHandle,  
      SQLSMALLINT   RecNumber,  
      SQLSMALLINT   Type,  
      SQLSMALLINT   SubType,  
      SQLLEN        Length,  
      SQLSMALLINT   Precision,  
      SQLSMALLINT   Scale,  
      SQLPOINTER    DataPtr,  
      SQLLEN *      StringLengthPtr,  
      SQLLEN *      IndicatorPtr);  

Argumen

DescriptorHandle
[Input] Handel deskriptor. Ini tidak boleh menjadi handel IRD.

RecNumber
[Input] Menunjukkan catatan deskriptor yang berisi bidang yang akan diatur. Rekaman deskriptor diberi nomor dari 0, dengan nomor rekaman 0 menjadi catatan bookmark. Argumen ini harus sama dengan atau lebih besar dari 0. Jika RecNumber lebih besar dari nilai SQL_DESC_COUNT, SQL_DESC_COUNTis berubah menjadi nilai RecNumber.

Jenis
[Input] Nilai untuk mengatur bidang SQL_DESC_TYPE untuk catatan deskriptor.

SubType
[Input] Untuk rekaman yang jenisnya SQL_DATETIME atau SQL_INTERVAL, ini adalah nilai untuk mengatur bidang SQL_DESC_DATETIME_INTERVAL_CODE.

Panjang
[Input] Nilai untuk mengatur bidang SQL_DESC_OCTET_LENGTH untuk catatan deskriptor.

Presisi
[Input] Nilai untuk mengatur bidang SQL_DESC_PRECISION untuk catatan deskriptor.

Skala
[Input] Nilai untuk mengatur bidang SQL_DESC_SCALE untuk catatan deskriptor.

DataPtr
[Input atau Output Yang Ditangguhkan] Nilai untuk mengatur bidang SQL_DESC_DATA_PTR untuk catatan deskriptor. DataPtr dapat diatur ke penunjuk null.

Argumen DataPtr dapat diatur ke penunjuk null untuk mengatur bidang SQL_DESC_DATA_PTR ke penunjuk null. Jika handel dalam argumen DescriptorHandle dikaitkan dengan ARD, ini akan membongkar kolom.

StringLengthPtr
[Input atau Output Yang Ditangguhkan] Nilai untuk mengatur bidang SQL_DESC_OCTET_LENGTH_PTR untuk catatan deskriptor. StringLengthPtr dapat diatur ke penunjuk null untuk mengatur bidang SQL_DESC_OCTET_LENGTH_PTR ke penunjuk null.

IndicatorPtr
[Input atau Output Yang Ditangguhkan] Nilai untuk mengatur bidang SQL_DESC_INDICATOR_PTR untuk catatan deskriptor. IndicatorPtr dapat diatur ke penunjuk null untuk mengatur bidang SQL_DESC_INDICATOR_PTR ke penunjuk null.

Kembali

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.

Diagnostik

Saat SQLSetDescRec mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DESC dan Handle of DescriptorHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLSetDescRec 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.

SQLSTATE Kesalahan Deskripsi
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
07009 Indeks deskriptor tidak valid Argumen RecNumber diatur ke 0, dan DescriptorHandle merujuk ke handel IPD.

Argumen RecNumber kurang dari 0.

Argumen RecNumber lebih besar dari jumlah maksimum kolom atau parameter yang dapat didukung sumber data, dan argumen DescriptorHandle adalah APD, IPD, atau ARD.

Argumen RecNumber sama dengan 0, dan argumen DescriptorHandle mengacu pada APD yang dialokasikan secara implisit. (Kesalahan ini tidak terjadi dengan deskriptor aplikasi yang dialokasikan secara eksplisit karena tidak diketahui apakah deskriptor aplikasi yang dialokasikan secara eksplisit adalah APD atau ARD hingga waktu eksekusi.)
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses.
HY000 Kesalahan umum Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec di buffer *MessageText menjelaskan kesalahan dan penyebabnya.
HY001 Kesalahan alokasi memori Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY010 Kesalahan urutan fungsi (DM) DescriptorHandle dikaitkan dengan StatementHandle tempat fungsi eksekusi asinkron (bukan yang ini) dipanggil dan masih dijalankan ketika fungsi ini dipanggil.

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

(DM) Fungsi eksekusi asinkron dipanggil untuk handel koneksi yang terkait dengan DescriptorHandle. Fungsi ainkron ini masih dijalankan ketika fungsi SQLSetDescRec dipanggil.

(DM) SQLExecute, SQLExecDirect, atau SQLMoreResults dipanggil untuk salah satu handel pernyataan yang terkait dengan DescriptorHandle dan dikembalikan SQL_PARAM_DATA_AVAILABLE. Fungsi ini dipanggil sebelum data diambil untuk semua parameter yang dialirkan.
HY013 Kesalahan manajemen memori Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah.
HY016 Tidak dapat mengubah deskriptor baris implementasi Argumen DescriptorHandle dikaitkan dengan IRD.
HY021 Informasi deskriptor yang tidak konsisten Bidang Tipe , atau bidang lain yang terkait dengan bidang SQL_DESC_TYPE dalam deskriptor, tidak valid atau konsisten.

Informasi deskriptor yang diperiksa selama pemeriksaan konsistensi tidak konsisten. (Lihat "Pemeriksaan Konsistensi," nanti di bagian ini.)
HY090 String atau panjang buffer tidak valid (DM) Driver adalah driver ODBC 2.x , deskriptor adalah ARD, argumen ColumnNumber diatur ke 0, dan nilai yang ditentukan untuk argumen BufferLength tidak sama dengan 4.
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.
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 DescriptorHandle tidak mendukung fungsi.

Komentar

Aplikasi dapat memanggil SQLSetDescRec untuk mengatur bidang berikut untuk satu kolom atau parameter:

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (untuk rekaman yang jenisnya SQL_DATETIME atau SQL_INTERVAL)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_DATA_PTR

  • SQL_DESC_OCTET_LENGTH_PTR

  • SQL_DESC_INDICATOR_PTR

Catatan

Jika panggilan ke SQLSetDescRec gagal, konten rekaman deskriptor yang diidentifikasi oleh argumen RecNumber tidak ditentukan.

Saat mengikat kolom atau parameter, SQLSetDescRec memungkinkan Anda mengubah beberapa bidang yang memengaruhi pengikatan tanpa memanggil SQLBindCol atau SQLBindParameter atau melakukan beberapa panggilan ke SQLSetDescField. SQLSetDescRec dapat mengatur bidang pada deskriptor yang saat ini tidak terkait dengan pernyataan. Perhatikan bahwa SQLBindParameter menetapkan lebih banyak bidang daripada SQLSetDescRec, dapat mengatur bidang pada APD dan IPD dalam satu panggilan, dan tidak memerlukan handel deskriptor.

Catatan

Atribut pernyataan SQL_ATTR_USE_BOOKMARKS harus selalu diatur sebelum memanggil SQLSetDescRec dengan argumen RecNumber 0 untuk mengatur bidang bookmark. Meskipun ini tidak wajib, sangat disarankan.

Pemeriksaan Konsistensi

Pemeriksaan konsistensi dilakukan oleh driver secara otomatis setiap kali aplikasi menetapkan bidang SQL_DESC_DATA_PTR APD, ARD, atau IPD. Jika salah satu bidang tidak konsisten dengan bidang lain, SQLSetDescRec akan mengembalikan SQLSTATE HY021 (Informasi deskriptor yang tidak konsisten).

Setiap kali aplikasi mengatur bidang SQL_DESC_DATA_PTR APD, ARD, atau IPD, driver memeriksa bahwa nilai bidang SQL_DESC_TYPE dan nilai yang berlaku untuk bidang SQL_DESC_TYPE tersebut valid dan konsisten. Pemeriksaan ini selalu dilakukan ketika SQLBindParameter atau SQLBindCol dipanggil atau ketika SQLSetDescRec dipanggil untuk APD, ARD, atau IPD. Pemeriksaan konsistensi ini mencakup pemeriksaan berikut pada bidang deskriptor:

  • Bidang SQL_DESC_TYPE harus merupakan salah satu jenis ODBC C atau SQL yang valid atau jenis SQL khusus driver. Bidang SQL_DESC_CONCISE_TYPE harus merupakan salah satu jenis ODBC C atau SQL yang valid atau jenis C atau SQL khusus driver, termasuk jenis tanggalwaktu dan interval yang ringkas.

  • Jika bidang rekaman SQL_DESC_TYPE SQL_DATETIME atau SQL_INTERVAL, bidang SQL_DESC_DATETIME_INTERVAL_CODE harus merupakan salah satu kode tanggalwaktu atau interval yang valid. (Lihat deskripsi bidang SQL_DESC_DATETIME_INTERVAL_CODE di SQLSetDescField.)

  • Jika bidang SQL_DESC_TYPE menunjukkan jenis numerik, bidang SQL_DESC_PRECISION dan SQL_DESC_SCALE diverifikasi agar valid.

  • Jika bidang SQL_DESC_CONCISE_TYPE adalah jenis data waktu atau tanda waktu, jenis interval dengan komponen detik, atau salah satu jenis data interval dengan komponen waktu, bidang SQL_DESC_PRECISION diverifikasi menjadi presisi detik yang valid.

  • Jika SQL_DESC_CONCISE_TYPE adalah jenis data interval, bidang SQL_DESC_DATETIME_INTERVAL_PRECISION diverifikasi menjadi nilai presisi depan interval yang valid.

Bidang SQL_DESC_DATA_PTR IPD biasanya tidak diatur; namun, aplikasi dapat melakukannya untuk memaksa pemeriksaan konsistensi bidang IPD. Pemeriksaan konsistensi tidak dapat dilakukan pada IRD. Nilai yang bidang SQL_DESC_DATA_PTR IPD diatur ke tidak benar-benar disimpan dan tidak dapat diambil oleh panggilan ke SQLGetDescField atau SQLGetDescRec; pengaturan dibuat hanya untuk memaksa pemeriksaan konsistensi.

Untuk informasi tentang Lihat
Mengikat kolom Fungsi SQLBindCol
Mengikat parameter Fungsi SQLBindParameter
Mendapatkan bidang deskriptor tunggal Fungsi SQLGetDescField
Mendapatkan beberapa bidang deskriptor Fungsi SQLGetDescRec
Mengatur bidang deskriptor tunggal Fungsi SQLSetDescField

Lihat Juga

Referensi API ODBC
File Header ODBC