Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 3.0: ISO 92
Ringkasan
SQLSetDescField menetapkan nilai satu bidang rekaman deskriptor.
Syntax
SQLRETURN SQLSetDescField(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT FieldIdentifier,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength);
Arguments
DescriptorHandle
[Masukan] Pegangan deskriptor.
RecNumber
[Masukan] Menunjukkan rekaman deskriptor yang berisi bidang yang ingin ditetapkan aplikasi. Catatan deskriptor diberi nomor dari 0, dengan catatan nomor 0 menjadi catatan bookmark.
Argumen RecNumber diabaikan untuk bidang header.
Pengidentifikasi Bidang
[Masukan] Menunjukkan bidang deskriptor yang nilainya akan ditetapkan. Untuk informasi selengkapnya, lihat "Argumen FieldIdentifier " di bagian "Komentar".
ValuePtr
[Masukan] Penunjuk ke buffer yang berisi informasi deskriptor, atau nilai bilangan bulat. Jenis data bergantung pada nilai FieldIdentifier. Jika ValuePtr adalah nilai bilangan bulat, nilai tersebut dapat dianggap sebagai 8 byte (SQLLEN), 4 byte (SQLINTEGER) atau 2 byte (SQLSMALLINT), tergantung pada nilai argumen FieldIdentifier .
BufferLength
[Masukan] Jika FieldIdentifier adalah bidang yang ditentukan ODBC dan ValuePtr menunjuk ke string karakter atau buffer biner, argumen ini harus berupa panjang *ValuePtr. Untuk data string karakter, argumen ini harus berisi jumlah byte dalam string.
Jika FieldIdentifier adalah bidang yang ditentukan ODBC dan ValuePtr adalah bilangan bulat, BufferLength diabaikan.
Jika FieldIdentifier adalah bidang yang ditentukan driver, aplikasi menunjukkan sifat bidang ke Driver Manager dengan mengatur argumen BufferLength . BufferLength dapat memiliki nilai berikut:
Jika ValuePtr adalah penunjuk ke string karakter, maka BufferLength adalah panjang string atau SQL_NTS.
Jika ValuePtr adalah penunjuk ke buffer biner, maka aplikasi menempatkan hasil makro SQL_LEN_BINARY_ATTR(panjang) di BufferLength. Ini menempatkan nilai negatif di BufferLength.
Jika ValuePtr adalah penunjuk ke nilai selain string karakter atau string biner, maka BufferLength harus memiliki nilai SQL_IS_POINTER.
Jika ValuePtr berisi nilai panjang tetap, maka BufferLength adalah SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT, atau SQL_IS_USMALLINT, sebagaimana mestinya.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.
Diagnostics
Saat SQLSetDescField mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DESC dan HandleDescriptorHandle. Tabel berikut mencantumkan nilai SQLSTATE yang biasa dikembalikan oleh SQLSetDescField dan menjelaskan masing-masing nilai dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATE 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.) |
| 01S02 | Nilai opsi berubah | Driver tidak mendukung nilai yang ditentukan dalam *ValuePtr (jika ValuePtr adalah penunjuk) atau nilai di ValuePtr (jika ValuePtr adalah nilai bilangan bulat), atau *ValuePtr tidak valid karena kondisi kerja implementasi, sehingga driver mengganti nilai yang serupa. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.) |
| 07009 | Indeks deskriptor tidak valid |
Argumen FieldIdentifier adalah bidang rekaman, argumen RecNumber adalah 0, dan argumen DescriptorHandle mengacu pada pegangan IPD. Argumen RecNumber kurang dari 0, dan argumen DescriptorHandle mengacu pada ARD atau APD. Argumen RecNumber lebih besar dari jumlah maksimum kolom atau parameter yang dapat didukung sumber data, dan argumen DescriptorHandle mengacu pada APD atau ARD. (DM) Argumen FieldIdentifier adalah SQL_DESC_COUNT, dan argumen *ValuePtr kurang dari 0. 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. |
| 22001 | Data string, terpotong kanan | Argumen FieldIdentifier adalah SQL_DESC_NAME, dan argumen BufferLength adalah nilai yang lebih besar dari SQL_MAX_IDENTIFIER_LEN. |
| 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 yang fungsi yang dijalankan secara asinkron (bukan yang ini) dipanggil dan masih dijalankan saat fungsi ini dipanggil. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos dipanggil untuk StatementHandle yang dikaitkan dengan DescriptorHandle dan dikembalikan SQL_NEED_DATA. Fungsi ini dipanggil sebelum data dikirim untuk semua parameter atau kolom data-at-execution. (DM) Fungsi yang dijalankan secara asinkron dipanggil untuk pegangan koneksi yang terkait dengan DescriptorHandle. Fungsi asinkron ini masih dijalankan ketika fungsi SQLSetDescField 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, dan argumen FieldIdentifier tidak SQL_DESC_ARRAY_STATUS_PTR atau SQL_DESC_ROWS_PROCESSED_PTR. |
| HY021 | Informasi deskriptor yang tidak konsisten | Bidang SQL_DESC_TYPE dan SQL_DESC_DATETIME_INTERVAL_CODE tidak membentuk jenis SQL ODBC yang valid atau jenis SQL khusus driver yang valid (untuk IPD) atau jenis ODBC C yang valid (untuk APD atau ARD). Informasi deskriptor yang diperiksa selama pemeriksaan konsistensi tidak konsisten. (Lihat "Pemeriksaan Konsistensi" di SQLSetDescRec.) |
| HY090 | String atau panjang buffer tidak valid | (DM) *ValuePtr adalah string karakter, dan BufferLength kurang dari nol tetapi tidak sama dengan SQL_NTS. (DM) Driver adalah driver ODBC 2*.x*, deskriptornya adalah ARD, argumen ColumnNumber diatur ke 0, dan nilai yang ditentukan untuk argumen BufferLength tidak sama dengan 4. |
| HY091 | Pengidentifikasi bidang deskriptor tidak valid | Nilai yang ditentukan untuk argumen FieldIdentifier bukanlah bidang yang ditentukan ODBC dan bukan nilai yang ditentukan implementasi. Argumen FieldIdentifier tidak valid untuk argumen DescriptorHandle. Argumen FieldIdentifier adalah bidang baca-saja, yang ditentukan ODBC. |
| HY092 | Pengidentifikasi atribut/opsi tidak valid | Nilai dalam *ValuePtr tidak valid untuk argumen FieldIdentifier . Argumen FieldIdentifier adalah SQL_DESC_UNNAMED, dan ValuePtr adalah SQL_NAMED. |
| HY105 | Jenis parameter tidak valid | (DM) Nilai yang ditentukan untuk bidang SQL_DESC_PARAMETER_TYPE tidak valid. (Untuk informasi selengkapnya, lihat bagian "Argumen InputOutputType " di SQLBindParameter.) |
| HY117 | Koneksi ditangguhkan karena status transaksi yang tidak diketahui. Hanya fungsi putuskan sambungan dan baca-saja yang diizinkan. | (DM) Untuk informasi selengkapnya tentang status yang ditangguhkan, lihat Apa yang Baru di ODBC 3.8. |
| HYT01 | Waktu tunggu koneksi habis | 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 tersebut. |
Komentar
Aplikasi dapat memanggil SQLSetDescField untuk mengatur bidang deskriptor apa pun satu per satu. Satu panggilan ke SQLSetDescField mengatur satu bidang dalam satu deskriptor. Fungsi ini dapat dipanggil untuk mengatur bidang apa pun dalam jenis deskriptor apa pun, asalkan bidang tersebut dapat diatur. (Lihat tabel nanti di bagian ini.)
Note
Jika panggilan ke SQLSetDescField gagal, konten rekaman deskriptor yang diidentifikasi oleh argumen RecNumber tidak ditentukan.
Fungsi lain dapat dipanggil untuk mengatur beberapa bidang deskriptor dengan satu panggilan fungsi. Fungsi SQLSetDescRec mengatur berbagai bidang yang memengaruhi jenis data dan buffer yang terikat ke kolom atau parameter (bidang SQL_DESC_TYPE, SQL_DESC_DATETIME_INTERVAL_CODE, SQL_DESC_OCTET_LENGTH, SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR, dan SQL_DESC_INDICATOR_PTR). SQLBindCol atau SQLBindParameter dapat digunakan untuk membuat spesifikasi lengkap untuk pengikatan kolom atau parameter. Fungsi-fungsi ini mengatur grup bidang deskriptor tertentu dengan satu panggilan fungsi.
SQLSetDescField dapat dipanggil untuk mengubah buffer pengikatan dengan menambahkan offset ke penunjuk pengikatan (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, atau SQL_DESC_OCTET_LENGTH_PTR). Ini mengubah buffer pengikatan tanpa memanggil SQLBindCol atau SQLBindParameter, yang memungkinkan aplikasi mengubah SQL_DESC_DATA_PTR tanpa mengubah bidang lain, seperti SQL_DESC_DATA_TYPE.
Jika aplikasi memanggil SQLSetDescField untuk mengatur bidang apa pun selain SQL_DESC_COUNT atau bidang yang ditangguhkan SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR, atau SQL_DESC_INDICATOR_PTR, rekaman menjadi tidak terikat.
Bidang header deskriptor diatur dengan memanggil SQLSetDescField dengan FieldIdentifier yang sesuai. Banyak bidang header juga merupakan atribut pernyataan, sehingga juga dapat diatur dengan panggilan ke SQLSetStmtAttr. Hal ini memungkinkan aplikasi untuk mengatur bidang deskriptor tanpa terlebih dahulu mendapatkan pegangan deskriptor. Saat SQLSetDescField dipanggil untuk mengatur bidang header, argumen RecNumber diabaikan.
RecNumber 0 digunakan untuk mengatur bidang bookmark.
Note
Atribut pernyataan SQL_ATTR_USE_BOOKMARKS harus selalu diatur sebelum memanggil SQLSetDescField untuk mengatur bidang bookmark. Meskipun ini tidak wajib, sangat disarankan.
Urutan Bidang Deskriptor Pengaturan
Saat mengatur bidang deskriptor dengan memanggil SQLSetDescField, aplikasi harus mengikuti urutan tertentu:
Aplikasi harus terlebih dahulu mengatur bidang SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE, atau SQL_DESC_DATETIME_INTERVAL_CODE.
Setelah salah satu bidang ini ditetapkan, aplikasi dapat mengatur atribut tipe data, dan driver mengatur bidang atribut tipe data ke nilai default yang sesuai untuk tipe data. Default otomatis bidang atribut jenis memastikan bahwa deskriptor selalu siap digunakan setelah aplikasi menentukan tipe data. Jika aplikasi secara eksplisit menetapkan atribut tipe data, aplikasi tersebut menggantikan atribut default.
Setelah salah satu bidang yang tercantum pada langkah 1 telah ditetapkan, dan atribut tipe data telah ditetapkan, aplikasi dapat mengatur SQL_DESC_DATA_PTR. Ini mendorong pemeriksaan konsistensi bidang deskriptor. Jika aplikasi mengubah tipe data atau atribut setelah mengatur bidang SQL_DESC_DATA_PTR, driver mengatur SQL_DESC_DATA_PTR ke penunjuk null, melepaskan ikatan rekaman. Hal ini memaksa aplikasi untuk menyelesaikan langkah-langkah yang tepat secara berurutan, sebelum catatan deskriptor dapat digunakan.
Inisialisasi Bidang Deskriptor
Saat deskriptor dialokasikan, bidang dalam deskriptor dapat diinisialisasi ke nilai default, diinisialisasi tanpa nilai default, atau tidak ditentukan untuk jenis deskriptor. Tabel berikut menunjukkan inisialisasi setiap bidang untuk setiap jenis deskriptor, dengan "D" menunjukkan bahwa bidang diinisialisasi dengan default, dan "ND" menunjukkan bahwa bidang diinisialisasi tanpa default. Jika angka ditampilkan, nilai default bidang adalah angka tersebut. Tabel juga menunjukkan apakah bidang dibaca/tulis (R/W) atau baca-saja (R).
Bidang IRD memiliki nilai default hanya setelah pernyataan disiapkan atau dieksekusi dan IRD telah diisi, bukan ketika pegangan atau deskriptor pernyataan telah dialokasikan. Sampai IRD diisi, setiap upaya untuk mendapatkan akses ke bidang IRD akan mengembalikan kesalahan.
Beberapa bidang deskriptor didefinisikan untuk satu atau lebih, tetapi tidak semua, jenis deskriptor (ARD dan IRD, serta APD dan IPD). Ketika bidang tidak ditentukan untuk jenis deskriptor, bidang tersebut tidak diperlukan oleh salah satu fungsi yang menggunakan deskriptor tersebut.
Bidang yang dapat diakses oleh SQLGetDescField belum tentu diatur oleh SQLSetDescField. Bidang yang dapat diatur oleh SQLSetDescField tercantum dalam tabel berikut.
Inisialisasi bidang header diuraikan dalam tabel berikut.
| Nama bidang header | Type | R/W | Default |
|---|---|---|---|
| SQL_DESC_ALLOC_TYPE | SQLSMALLINT | ARD: R APD: R IRD: R IPD: R | ARD: SQL_DESC_ALLOC_AUTO untuk implisit atau SQL_DESC_ALLOC_USER untuk eksplisit APD: SQL_DESC_ALLOC_AUTO untuk implisit atau SQL_DESC_ALLOC_USER untuk eksplisit IRD: SQL_DESC_ALLOC_AUTO IPD: SQL_DESC_ALLOC_AUTO |
| SQL_DESC_ARRAY_SIZE | SQLULEN | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD:[1] APD:[1] IRD: IPD yang tidak digunakan: Tidak digunakan |
| SQL_DESC_ARRAY_STATUS_PTR | SQLUSMALLINT* | ARD: R/W APD: R/W IRD: R/W IPD: R/W | ARD: Null ptr APD: Null ptr IRD: Null ptr IPD: Null ptr |
| SQL_DESC_BIND_OFFSET_PTR | SQLLEN* | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD: Null ptr APD: Null ptr IRD: IPD yang tidak digunakan: Tidak digunakan |
| SQL_DESC_BIND_TYPE | SQLINTEGER | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD: SQL_BIND_BY_COLUMN APD: SQL_BIND_BY_COLUMN IRD: Tidak Digunakan IPD: Tidak Digunakan |
| SQL_DESC_COUNT | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: 0 APD: 0 IRD: D IPD: 0 |
| SQL_DESC_ROWS_PROCESSED_PTR | SQLULEN* | ARD: APD yang tidak terpakai: tidak terpakai IRD: R/W IPD: R/W | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: Null ptr IPD: Null ptr |
[1] Bidang ini hanya ditentukan jika IPD secara otomatis diisi oleh driver. Jika tidak, mereka tidak terdefinisi. Jika aplikasi mencoba mengatur bidang ini, SQLSTATE HY091 (Pengidentifikasi bidang deskriptor tidak valid) akan ditampilkan.
Inisialisasi bidang rekaman seperti yang ditunjukkan pada tabel berikut.
| Nama bidang rekaman | Type | R/W | Default |
|---|---|---|---|
| SQL_DESC_AUTO_UNIQUE_VALUE | SQLINTEGER | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_BASE_COLUMN_NAME | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_BASE_TABLE_NAME | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_CASE_SENSITIVE | SQLINTEGER | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: APD yang tidak digunakan: Tidak digunakan IRD: D IPD: D[1] |
| SQL_DESC_CATALOG_NAME (Nama Katalog Deskripsi SQL) | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_CONCISE_TYPE | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: SQL_C_ DEFAULT APD: SQL_C_ DEFAULT IRD: D IPD: ND |
| SQL_DESC_DATA_PTR | SQLPOINTER | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD: Null ptr APD: Null ptr IRD: IPD yang tidak digunakan: Tidak digunakan[2] |
| SQL_DESC_DATETIME_INTERVAL_CODE | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| Deskripsi Presisi Interval Tanggal/Waktu SQL | SQLINTEGER | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_DISPLAY_SIZE | SQLLEN | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| Skala Tetap Presisi SQL_DESC | SQLSMALLINT | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: APD yang tidak digunakan: Tidak digunakan IRD: D IPD: D[1] |
| SQL_DESC_INDICATOR_PTR | SQLLEN * | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD: Null ptr APD: Null ptr IRD: IPD yang tidak digunakan: Tidak digunakan |
| SQL_DESC_LABEL | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_LENGTH | SQLULEN | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_LITERAL_PREFIX | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_LITERAL_SUFFIX | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_LOCAL_TYPE_NAME | SQLCHAR * | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: APD yang tidak digunakan: Tidak digunakan IRD: D IPD: D[1] |
| SQL_DESC_NAME | SQLCHAR * | ARD: APD yang tidak terpakai: IRD yang tidak terpakai: r IPD: r / w | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_NULLABLE | SQLSMALLINT | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_NUM_PREC_RADIX | SQLINTEGER | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_OCTET_LENGTH | SQLLEN | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_OCTET_LENGTH_PTR | SQLLEN * | ARD: R/W APD: R/W IRD: IPD YANG TIDAK TERPAKAI: Tidak digunakan | ARD: Null ptr APD: Null ptr IRD: IPD yang tidak digunakan: Tidak digunakan |
| SQL_DESC_PARAMETER_TYPE | SQLSMALLINT | ARD: APD yang tidak terpakai: IRD yang tidak terpakai: IPD yang tidak terpakai: R/W | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: IPD yang tidak digunakan: D=SQL_PARAM_INPUT |
| SQL_DESC_PRECISION | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_ROWVER | SQLSMALLINT | ARD: Tidak digunakan APD: Tidak Digunakan IRD: R IPD: R |
ARD: Tidak digunakan APD: Tidak Digunakan IRD: ND IPD: ND |
| SQL_DESC_SCALE | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_SCHEMA_NAME | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_SEARCHABLE | SQLSMALLINT | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_TABLE_NAME | SQLCHAR * | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
| SQL_DESC_TYPE | SQLSMALLINT | ARD: R / W APD: R / W IRD: R IPD: R / W | ARD: SQL_C_DEFAULT APD: SQL_C_DEFAULT IRD: D IPD: ND |
| SQL_DESC_TYPE_NAME | SQLCHAR * | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: APD yang tidak digunakan: Tidak digunakan IRD: D IPD: D[1] |
| SQL_DESC_UNNAMED | SQLSMALLINT | ARD: APD yang tidak terpakai: IRD yang tidak terpakai: r IPD: r / w | ARD: ND APD: ND IRD: D IPD: ND |
| SQL_DESC_UNSIGNED | SQLSMALLINT | ARD: APD yang tidak terpakai: tidak digunakan IRD: R IPD: R | ARD: APD yang tidak digunakan: Tidak digunakan IRD: D IPD: D[1] |
| SQL_DESC_UPDATABLE | SQLSMALLINT | ARD: APD yang tidak digunakan: IRD yang tidak digunakan: R IPD: Tidak digunakan | ARD: APD yang tidak digunakan: IRD yang tidak terpakai: D IPD: Tidak digunakan |
[1] Bidang ini hanya ditentukan jika IPD secara otomatis diisi oleh driver. Jika tidak, mereka tidak terdefinisi. Jika aplikasi mencoba mengatur bidang ini, SQLSTATE HY091 (Pengidentifikasi bidang deskriptor tidak valid) akan ditampilkan.
[2] Bidang SQL_DESC_DATA_PTR di IPD dapat diatur untuk memaksa pemeriksaan konsistensi. Dalam panggilan berikutnya ke SQLGetDescField atau SQLGetDescRec, driver tidak diharuskan untuk mengembalikan nilai yang ditetapkan SQL_DESC_DATA_PTR.
Argumen FieldIdentifier
Argumen FieldIdentifier menunjukkan bidang deskriptor yang akan ditetapkan. Deskriptor berisi header deskriptor, yang terdiri dari bidang header yang dijelaskan di bagian berikutnya, "Bidang Header", dan nol atau lebih rekaman deskriptor, yang terdiri dari bidang rekaman yang dijelaskan di bagian setelah bagian "Bidang Header".
Bidang Header
Setiap deskriptor memiliki header yang terdiri dari bidang berikut:
SQL_DESC_ALLOC_TYPE [Semua]
Bidang header SQLSMALLINT baca-saja ini menentukan apakah deskriptor dialokasikan secara otomatis oleh driver atau secara eksplisit oleh aplikasi. Aplikasi dapat mendapatkan, tetapi tidak memodifikasi, bidang ini. Bidang diatur ke SQL_DESC_ALLOC_AUTO oleh driver jika deskriptor dialokasikan secara otomatis oleh driver. Ini diatur ke SQL_DESC_ALLOC_USER oleh driver jika deskriptor secara eksplisit dialokasikan oleh aplikasi.
SQL_DESC_ARRAY_SIZE [Deskriptor aplikasi]
Di ARD, bidang header SQLULEN ini menentukan jumlah baris dalam kumpulan baris. Ini adalah jumlah baris yang akan dikembalikan oleh panggilan ke SQLFetch atau SQLFetchScroll atau untuk dioperasikan dengan panggilan ke SQLBulkOperations atau SQLSetPos.
Di APD, bidang header SQLULEN ini menentukan jumlah nilai untuk setiap parameter.
Nilai default bidang ini adalah 1. Jika SQL_DESC_ARRAY_SIZE lebih besar dari 1, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, dan SQL_DESC_OCTET_LENGTH_PTR APD atau ARD menunjuk ke array. Kardinalitas setiap array sama dengan nilai bidang ini.
Bidang ini di ARD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_ROW_ARRAY_SIZE. Bidang ini di APD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_PARAMSET_SIZE.
SQL_DESC_ARRAY_STATUS_PTR [Semua]
Untuk setiap jenis deskriptor, bidang header SQLUSMALLINT * ini menunjuk ke array nilai SQLUSMALLINT. Array ini diberi nama sebagai berikut: array status baris (IRD), array status parameter (IPD), array operasi baris (ARD), dan array operasi parameter (APD).
Di IRD, bidang header ini menunjuk ke array status baris yang berisi nilai status setelah panggilan ke SQLBulkOperations, SQLFetch, SQLFetchScroll, atau SQLSetPos. Array memiliki elemen sebanyak baris dalam kumpulan baris. Aplikasi harus mengalokasikan array SQLUSMALLINTs dan mengatur bidang ini untuk menunjuk ke array. Bidang diatur ke penunjuk null secara default. Driver akan mengisi array - kecuali bidang SQL_DESC_ARRAY_STATUS_PTR diatur ke penunjuk null, dalam hal ini tidak ada nilai status yang dihasilkan dan array tidak diisi.
Caution
Perilaku driver tidak ditentukan jika aplikasi mengatur elemen array status baris yang ditunjuk oleh bidang SQL_DESC_ARRAY_STATUS_PTR IRD.
Array awalnya diisi oleh panggilan ke SQLBulkOperations, SQLFetch, SQLFetchScroll, atau SQLSetPos. Jika panggilan tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten array yang ditunjuk oleh bidang ini tidak ditentukan. Elemen dalam array dapat berisi nilai berikut:
SQL_ROW_SUCCESS: Baris berhasil diambil dan tidak berubah sejak terakhir diambil.
SQL_ROW_SUCCESS_WITH_INFO: Baris berhasil diambil dan tidak berubah sejak terakhir diambil. Namun, peringatan diberikan tentang baris tersebut.
SQL_ROW_ERROR: Terjadi kesalahan saat mengambil baris.
SQL_ROW_UPDATED: Baris berhasil diambil dan telah diperbarui sejak terakhir diambil. Jika baris diambil lagi, statusnya adalah SQL_ROW_SUCCESS.
SQL_ROW_DELETED: Baris telah dihapus sejak terakhir diambil.
SQL_ROW_ADDED: Baris disisipkan oleh SQLBulkOperations. Jika baris diambil lagi, statusnya adalah SQL_ROW_SUCCESS.
SQL_ROW_NOROW: Kumpulan baris tumpang tindih dengan akhir kumpulan hasil, dan tidak ada baris yang dikembalikan yang sesuai dengan elemen array status baris ini.
Bidang ini di IRD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_ROW_STATUS_PTR.
Bidang SQL_DESC_ARRAY_STATUS_PTR IRD hanya berlaku setelah SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO dikembalikan. Jika kode pengembalian bukan salah satunya, lokasi yang ditunjuk oleh SQL_DESC_ROWS_PROCESSED_PTR tidak ditentukan.
Di IPD, bidang header ini menunjuk ke array status parameter yang berisi informasi status untuk setiap kumpulan nilai parameter setelah panggilan ke SQLExecute atau SQLExecDirect. Jika panggilan ke SQLExecute atau SQLExecDirect tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten array yang ditunjuk oleh bidang ini tidak ditentukan. Aplikasi harus mengalokasikan array SQLUSMALLINTs dan mengatur bidang ini untuk menunjuk ke array. Driver akan mengisi array - kecuali bidang SQL_DESC_ARRAY_STATUS_PTR diatur ke penunjuk null, dalam hal ini tidak ada nilai status yang dihasilkan dan array tidak diisi. Elemen dalam array dapat berisi nilai berikut:
SQL_PARAM_SUCCESS: Pernyataan SQL berhasil dijalankan untuk kumpulan parameter ini.
SQL_PARAM_SUCCESS_WITH_INFO: Pernyataan SQL berhasil dijalankan untuk kumpulan parameter ini; namun, informasi peringatan tersedia dalam struktur data diagnostik.
SQL_PARAM_ERROR: Terjadi kesalahan dalam memproses kumpulan parameter ini. Informasi kesalahan tambahan tersedia dalam struktur data diagnostik.
SQL_PARAM_UNUSED: Kumpulan parameter ini tidak digunakan, mungkin karena fakta bahwa beberapa set parameter sebelumnya menyebabkan kesalahan yang membatalkan pemrosesan lebih lanjut, atau karena SQL_PARAM_IGNORE diatur untuk kumpulan parameter tersebut dalam array yang ditentukan oleh bidang SQL_DESC_ARRAY_STATUS_PTR APD.
SQL_PARAM_DIAG_UNAVAILABLE: Informasi diagnostik tidak tersedia. Contohnya adalah ketika driver memperlakukan array parameter sebagai unit monolitik dan dengan demikian tidak menghasilkan tingkat informasi kesalahan ini.
Bidang ini di IPD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_PARAM_STATUS_PTR.
Di ARD, bidang header ini menunjuk ke array operasi baris nilai yang dapat diatur oleh aplikasi untuk menunjukkan apakah baris ini akan diabaikan untuk operasi SQLSetPos. Elemen dalam array dapat berisi nilai berikut:
SQL_ROW_PROCEED: Baris disertakan dalam operasi massal menggunakan SQLSetPos. (Pengaturan ini tidak menjamin bahwa operasi akan terjadi pada baris. Jika baris memiliki SQL_ROW_ERROR status dalam array status baris IRD, driver mungkin tidak dapat melakukan operasi di baris.)
SQL_ROW_IGNORE: Baris dikecualikan dari operasi massal menggunakan SQLSetPos.
Jika tidak ada elemen array yang diatur, semua baris disertakan dalam operasi massal. Jika nilai di bidang SQL_DESC_ARRAY_STATUS_PTR ARD adalah penunjuk nol, semua baris disertakan dalam operasi massal; Interpretasinya sama seperti jika penunjuk menunjuk ke array yang valid dan semua elemen array SQL_ROW_PROCEED. Jika elemen dalam array diatur ke SQL_ROW_IGNORE, nilai dalam array status baris untuk baris yang diabaikan tidak akan diubah.
Bidang ini di ARD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_ROW_OPERATION_PTR.
Dalam APD, bidang header ini menunjuk ke array operasi parameter nilai yang dapat diatur oleh aplikasi untuk menunjukkan apakah kumpulan parameter ini harus diabaikan saat SQLExecute atau SQLExecDirect dipanggil. Elemen dalam array dapat berisi nilai berikut:
SQL_PARAM_PROCEED: Kumpulan parameter disertakan dalam panggilan SQLExecute atau SQLExecDirect.
SQL_PARAM_IGNORE: Kumpulan parameter dikecualikan dari panggilan SQLExecute atau SQLExecDirect.
Jika tidak ada elemen array yang diatur, semua set parameter dalam array digunakan dalam panggilan SQLExecute atau SQLExecDirect. Jika nilai di bidang SQL_DESC_ARRAY_STATUS_PTR APD adalah penunjuk nol, semua set parameter digunakan; Interpretasinya sama seperti jika penunjuk menunjuk ke array yang valid dan semua elemen array SQL_PARAM_PROCEED.
Bidang di APD ini juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_PARAM_OPERATION_PTR.
SQL_DESC_BIND_OFFSET_PTR [Deskriptor aplikasi]
Bidang header SQLLEN * ini menunjuk ke offset pengikatan. Ini diatur ke penunjuk null secara default. Jika bidang ini bukan penunjuk null, driver membatalkan referensi penunjuk dan menambahkan nilai yang dihapus referensi ke setiap bidang yang ditangguhkan yang memiliki nilai non-null dalam rekaman deskriptor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, dan SQL_DESC_OCTET_LENGTH_PTR) pada waktu pengambilan dan menggunakan nilai penunjuk baru saat mengikat.
Offset pengikatan selalu ditambahkan langsung ke nilai di bidang SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR, dan SQL_DESC_OCTET_LENGTH_PTR. Jika offset diubah ke nilai yang berbeda, nilai baru masih ditambahkan langsung ke nilai di setiap bidang deskriptor. Offset baru tidak ditambahkan ke nilai bidang ditambah offset sebelumnya.
Bidang ini adalah bidang yang ditangguhkan: Bidang ini tidak digunakan pada saat ditetapkan tetapi digunakan di lain waktu oleh driver ketika perlu menentukan alamat untuk buffer data.
Bidang di ARD ini juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_ROW_BIND_OFFSET_PTR. Bidang ini di ARD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_PARAM_BIND_OFFSET_PTR.
Untuk informasi selengkapnya, lihat deskripsi pengikatan berdasarkan baris di SQLFetchScroll dan SQLBindParameter.
SQL_DESC_BIND_TYPE [Deskriptor aplikasi]
Bidang header SQLUINTEGER ini mengatur orientasi pengikatan yang akan digunakan untuk mengikat kolom atau parameter.
Di ARD, bidang ini menentukan orientasi pengikatan saat SQLFetchScroll atau SQLFetch dipanggil pada pegangan pernyataan terkait.
Untuk memilih pengikatan berdasarkan kolom untuk kolom, bidang ini diatur ke SQL_BIND_BY_COLUMN (default).
Bidang ini di ARD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan Atribut SQL_ATTR_ROW_BIND_TYPE.
Di APD, bidang ini menentukan orientasi pengikatan yang akan digunakan untuk parameter dinamis.
Untuk memilih pengikatan berdasarkan kolom untuk parameter, bidang ini diatur ke SQL_BIND_BY_COLUMN (default).
Bidang ini di APD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan Atribut SQL_ATTR_PARAM_BIND_TYPE.
SQL_DESC_COUNT [Semua]
Bidang header SQLSMALLINT ini menentukan indeks berbasis 1 dari catatan bernomor tertinggi yang berisi data. Saat driver mengatur struktur data untuk deskriptor, driver juga harus mengatur bidang SQL_DESC_COUNT untuk menunjukkan berapa banyak rekaman yang signifikan. Saat aplikasi mengalokasikan instans struktur data ini, aplikasi tidak perlu menentukan berapa banyak rekaman yang akan dicadangkan ruangnya. Karena aplikasi menentukan konten catatan, driver mengambil tindakan yang diperlukan untuk memastikan bahwa pegangan deskriptor mengacu pada struktur data dengan ukuran yang memadai.
SQL_DESC_COUNT bukan hitungan semua kolom data yang terikat (jika bidang berada di ARD) atau semua parameter yang terikat (jika bidang berada di APD), tetapi jumlah rekaman bernomor tertinggi. Jika kolom atau parameter bernomor tertinggi tidak terikat, maka SQL_DESC_COUNT diubah menjadi jumlah kolom atau parameter bernomor tertinggi berikutnya. Jika kolom atau parameter dengan angka yang kurang dari jumlah kolom bernomor tertinggi tidak terikat (dengan memanggil SQLBindCol dengan argumen TargetValuePtr yang diatur ke penunjuk null, atau SQLBindParameter dengan argumen ParameterValuePtr yang diatur ke penunjuk null), SQL_DESC_COUNT tidak diubah. Jika kolom atau parameter tambahan terikat dengan angka yang lebih besar dari rekaman bernomor tertinggi yang berisi data, driver secara otomatis meningkatkan nilai di bidang SQL_DESC_COUNT. Jika semua kolom tidak terikat dengan memanggil SQLFreeStmt dengan opsi SQL_UNBIND, bidang SQL_DESC_COUNT di ARD dan IRD diatur ke 0. Jika SQLFreeStmt dipanggil dengan opsi SQL_RESET_PARAMS, bidang SQL_DESC_COUNT di APD dan IPD diatur ke 0.
Nilai dalam SQL_DESC_COUNT dapat diatur secara eksplisit oleh aplikasi dengan memanggil SQLSetDescField. Jika nilai dalam SQL_DESC_COUNT secara eksplisit diturunkan, semua rekaman dengan angka yang lebih besar dari nilai baru dalam SQL_DESC_COUNT akan dihapus secara efektif. Jika nilai dalam SQL_DESC_COUNT secara eksplisit diatur ke 0 dan bidang berada di ARD, semua buffer data kecuali kolom bookmark terikat akan dirilis.
Jumlah rekaman di bidang ARD ini tidak menyertakan kolom bookmark terikat. Satu-satunya cara untuk melepaskan ikatan kolom bookmark adalah dengan mengatur bidang SQL_DESC_DATA_PTR ke penunjuk null.
SQL_DESC_ROWS_PROCESSED_PTR [Deskriptor implementasi]
Dalam IRD, bidang header SQLULEN * ini menunjuk ke buffer yang berisi jumlah baris yang diambil setelah panggilan ke SQLFetch atau SQLFetchScroll, atau jumlah baris yang terpengaruh dalam operasi massal yang dilakukan oleh panggilan ke SQLBulkOperations atau SQLSetPos, termasuk baris kesalahan.
Dalam IPD, bidang header SQLUINTEGER * ini menunjuk ke buffer yang berisi jumlah set parameter yang telah diproses, termasuk kumpulan kesalahan. Tidak ada nomor yang akan dikembalikan jika ini adalah penunjuk nol.
SQL_DESC_ROWS_PROCESSED_PTR hanya valid setelah SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO dikembalikan setelah panggilan ke SQLFetch atau SQLFetchScroll (untuk bidang IRD) atau SQLExecute, SQLExecDirect, atau SQLParamData (untuk bidang IPD). Jika panggilan yang mengisi buffer yang ditunjuk oleh bidang ini tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten buffer tidak ditentukan, kecuali jika mengembalikan SQL_NO_DATA, dalam hal ini nilai dalam buffer diatur ke 0.
Bidang ini di ARD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_ROWS_FETCHED_PTR. Bidang ini di APD juga dapat diatur dengan memanggil SQLSetStmtAttr dengan atribut SQL_ATTR_PARAMS_PROCESSED_PTR.
Buffer yang ditunjuk oleh bidang ini dialokasikan oleh aplikasi. Ini adalah buffer keluaran yang ditangguhkan yang diatur oleh driver. Ini diatur ke penunjuk null secara default.
Bidang Rekam
Setiap deskriptor berisi satu atau beberapa rekaman yang terdiri dari bidang yang menentukan data kolom atau parameter dinamis, tergantung pada jenis deskriptor. Setiap catatan adalah definisi lengkap dari satu kolom atau parameter.
SQL_DESC_AUTO_UNIQUE_VALUE [IRD]
Bidang rekaman SQLINTEGER baca-saja ini berisi SQL_TRUE jika kolom adalah kolom yang bertambah otomatis, atau SQL_FALSE jika kolom tersebut bukan kolom yang bertambah otomatis. Bidang ini bersifat baca-saja, tetapi kolom peningkatan otomatis yang mendasarinya tidak selalu baca-saja.
SQL_DESC_BASE_COLUMN_NAME [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama kolom dasar untuk kolom kumpulan hasil. Jika nama kolom dasar tidak ada (seperti dalam kasus kolom yang merupakan ekspresi), variabel ini berisi string kosong.
SQL_DESC_BASE_TABLE_NAME [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama tabel dasar untuk kolom kumpulan hasil. Jika nama tabel dasar tidak dapat ditentukan atau tidak berlaku, variabel ini berisi string kosong.
SQL_DESC_CASE_SENSITIVE [Deskriptor implementasi]
Bidang rekaman SQLINTEGER baca-saja ini berisi SQL_TRUE jika kolom atau parameter diperlakukan sebagai peka huruf besar/kecil untuk kolasi dan perbandingan, atau SQL_FALSE jika kolom tidak diperlakukan sebagai peka huruf besar/kecil untuk kolase dan perbandingan atau jika itu adalah kolom nonkarakter.
SQL_DESC_CATALOG_NAME [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi katalog untuk tabel dasar yang berisi kolom. Nilai yang ditampilkan bergantung pada driver jika kolom adalah ekspresi atau jika kolom adalah bagian dari tampilan. Jika sumber data tidak mendukung katalog atau katalog tidak dapat ditentukan, variabel ini berisi string kosong.
SQL_DESC_CONCISE_TYPE [Semua]
Bidang header SQLSMALLINT ini menentukan tipe data ringkas untuk semua tipe data, termasuk tipe data tanggalwaktu dan interval.
Nilai di bidang SQL_DESC_CONCISE_TYPE, SQL_DESC_TYPE, dan SQL_DESC_DATETIME_INTERVAL_CODE saling bergantung. Setiap kali salah satu bidang diatur, bidang lainnya juga harus diatur. SQL_DESC_CONCISE_TYPE dapat diatur dengan panggilan ke SQLBindCol atau SQLBindParameter, atau SQLSetDescField. SQL_DESC_TYPE dapat diatur dengan panggilan ke SQLSetDescField atau SQLSetDescRec.
Jika SQL_DESC_CONCISE_TYPE diatur ke tipe data ringkas selain tipe data interval atau tanggalwaktu, bidang SQL_DESC_TYPE diatur ke nilai yang sama dan bidang SQL_DESC_DATETIME_INTERVAL_CODE diatur ke 0.
Jika SQL_DESC_CONCISE_TYPE diatur ke tipe data tanggalwaktu atau interval ringkas, bidang SQL_DESC_TYPE diatur ke jenis verbose yang sesuai (SQL_DATETIME atau SQL_INTERVAL) dan bidang SQL_DESC_DATETIME_INTERVAL_CODE diatur ke subkode yang sesuai.
SQL_DESC_DATA_PTR [Deskriptor aplikasi dan IPD]
Bidang rekaman SQLPOINTER ini menunjuk ke variabel yang akan berisi nilai parameter (untuk APD) atau nilai kolom (untuk ARD). Bidang ini adalah bidang yang ditangguhkan. Ini tidak digunakan pada saat ditetapkan tetapi digunakan di lain waktu oleh driver untuk mengambil data.
Kolom yang ditentukan oleh bidang SQL_DESC_DATA_PTR ARD tidak terikat jika argumen TargetValuePtr dalam panggilan ke SQLBindCol adalah penunjuk null atau jika bidang SQL_DESC_DATA_PTR dalam ARD diatur oleh panggilan ke SQLSetDescField atau SQLSetDescRec ke penunjuk null. Bidang lain tidak terpengaruh jika bidang SQL_DESC_DATA_PTR diatur ke penunjuk null.
Jika panggilan ke SQLFetch atau SQLFetchScroll yang mengisi buffer yang ditunjuk oleh bidang ini tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten buffer tidak ditentukan.
Setiap kali bidang SQL_DESC_DATA_PTR APD, ARD, atau IPD diatur, driver memeriksa apakah nilai di bidang SQL_DESC_TYPE berisi salah satu tipe data ODBC C yang valid atau tipe data khusus driver, dan bahwa semua bidang lain yang memengaruhi tipe data konsisten. Meminta pemeriksaan konsistensi adalah satu-satunya penggunaan bidang SQL_DESC_DATA_PTR IPD. Secara khusus, jika aplikasi menetapkan bidang SQL_DESC_DATA_PTR IPD dan kemudian memanggil SQLGetDescField pada bidang ini, aplikasi tidak harus mengembalikan nilai yang telah ditetapkan. Untuk informasi selengkapnya, lihat "Pemeriksaan Konsistensi" di SQLSetDescRec.
SQL_DESC_DATETIME_INTERVAL_CODE [Semua]
Bidang rekaman SQLSMALLINT ini berisi subkode untuk tipe data tanggalwaktu atau interval tertentu saat bidang SQL_DESC_TYPE SQL_DATETIME atau SQL_INTERVAL. Hal ini berlaku untuk tipe data SQL dan C. Kode terdiri dari nama tipe data dengan "CODE" diganti dengan "TYPE" atau "C_TYPE" (untuk jenis datetime), atau "CODE" diganti dengan "INTERVAL" atau "C_INTERVAL" (untuk jenis interval).
Jika SQL_DESC_TYPE dan SQL_DESC_CONCISE_TYPE dalam deskriptor aplikasi diatur ke SQL_C_DEFAULT dan deskriptor tidak dikaitkan dengan handel pernyataan, konten SQL_DESC_DATETIME_INTERVAL_CODE tidak ditentukan.
Bidang ini dapat diatur untuk jenis data tanggalwaktu yang tercantum dalam tabel berikut.
| Jenis tanggalwaktu | DATETIME_INTERVAL_CODE |
|---|---|
| SQL_TYPE_DATE/SQL_C_TYPE_DATE | SQL_CODE_DATE |
| SQL_TYPE_TIME/SQL_C_TYPE_TIME | SQL_CODE_TIME |
| SQL_TYPE_TIMESTAMP/ SQL_C_TYPE_TIMESTAMP | SQL_CODE_TIMESTAMP |
Bidang ini dapat diatur untuk tipe data interval yang tercantum dalam tabel berikut.
| Jenis Interval | DATETIME_INTERVAL_CODE |
|---|---|
| SQL_INTERVAL_DAY/ SQL_C_INTERVAL_DAY | SQL_CODE_DAY |
| SQL_INTERVAL_DAY_TO_HOUR/ SQL_C_INTERVAL_DAY_TO_HOUR | SQL_CODE_DAY_TO_HOUR |
| SQL_INTERVAL_DAY_TO_MINUTE/ SQL_C_INTERVAL_DAY_TO_MINUTE | SQL_CODE_DAY_TO_MINUTE |
| SQL_INTERVAL_DAY_TO_SECOND/ SQL_C_INTERVAL_DAY_TO_SECOND | SQL_CODE_DAY_TO_SECOND |
| SQL_INTERVAL_HOUR/ SQL_C_INTERVAL_HOUR | SQL_CODE_HOUR |
| SQL_INTERVAL_HOUR_TO_MINUTE/ SQL_C_INTERVAL_HOUR_TO_MINUTE | SQL_CODE_HOUR_TO_MINUTE |
| SQL_INTERVAL_HOUR_TO_SECOND/ SQL_C_INTERVAL_HOUR_TO_SECOND | SQL_CODE_HOUR_TO_SECOND |
| SQL_INTERVAL_MINUTE/ SQL_C_INTERVAL_MINUTE | SQL_CODE_MINUTE |
| SQL_INTERVAL_MINUTE_TO_SECOND/ SQL_C_INTERVAL_MINUTE_TO_SECOND | SQL_CODE_MINUTE_TO_SECOND |
| SQL_INTERVAL_MONTH/ SQL_C_INTERVAL_MONTH | SQL_CODE_MONTH |
| SQL_INTERVAL_SECOND/ SQL_C_INTERVAL_SECOND | SQL_CODE_SECOND |
| SQL_INTERVAL_YEAR/ SQL_C_INTERVAL_YEAR | SQL_CODE_YEAR |
| SQL_INTERVAL_YEAR_TO_MONTH/ SQL_C_INTERVAL_YEAR_TO_MONTH | SQL_CODE_YEAR_TO_MONTH |
Untuk informasi selengkapnya tentang interval data dan bidang ini, lihat Pengidentifikasi dan Deskriptor Tipe Data.
SQL_DESC_DATETIME_INTERVAL_PRECISION [Semua]
Bidang catatan SQLINTEGER ini berisi presisi terdepan interval jika bidang SQL_DESC_TYPE SQL_INTERVAL. Saat bidang SQL_DESC_DATETIME_INTERVAL_CODE diatur ke tipe data interval, bidang ini diatur ke presisi awal interval default.
SQL_DESC_DISPLAY_SIZE [IRD]
Bidang rekaman SQLINTEGER baca-saja ini berisi jumlah maksimum karakter yang diperlukan untuk menampilkan data dari kolom.
SQL_DESC_FIXED_PREC_SCALE [Deskriptor implementasi]
Bidang rekaman SQLSMALLINT baca-saja ini diatur ke SQL_TRUE jika kolom adalah kolom numerik yang tepat dan memiliki presisi tetap dan skala bukan nol, atau ke SQL_FALSE jika kolom tersebut bukan kolom numerik yang tepat dengan presisi dan skala tetap.
SQL_DESC_INDICATOR_PTR [Deskriptor aplikasi]
Dalam ARD, bidang catatan SQLLEN * ini menunjuk ke variabel indikator. Variabel ini berisi SQL_NULL_DATA jika nilai kolom adalah NULL. Untuk APD, variabel indikator diatur ke SQL_NULL_DATA untuk menentukan argumen dinamis NULL. Jika tidak, variabel adalah nol (kecuali nilai dalam SQL_DESC_INDICATOR_PTR dan SQL_DESC_OCTET_LENGTH_PTR adalah penunjuk yang sama).
Jika bidang SQL_DESC_INDICATOR_PTR dalam ARD adalah penunjuk null, driver dicegah untuk mengembalikan informasi tentang apakah kolom tersebut NULL atau tidak. Jika kolom adalah NULL dan SQL_DESC_INDICATOR_PTR adalah penunjuk null, SQLSTATE 22002 (Variabel indikator diperlukan tetapi tidak disediakan) dikembalikan saat driver mencoba mengisi buffer setelah panggilan ke SQLFetch atau SQLFetchScroll. Jika panggilan ke SQLFetch atau SQLFetchScroll tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten buffer tidak ditentukan.
Bidang SQL_DESC_INDICATOR_PTR menentukan apakah bidang yang ditunjuk oleh SQL_DESC_OCTET_LENGTH_PTR diatur. Jika nilai data untuk kolom adalah NULL, driver mengatur variabel indikator ke SQL_NULL_DATA. Bidang yang ditunjuk oleh SQL_DESC_OCTET_LENGTH_PTR kemudian tidak diatur. Jika nilai NULL tidak ditemui selama pengambilan, buffer yang ditunjuk oleh SQL_DESC_INDICATOR_PTR diatur ke nol dan buffer yang ditunjuk oleh SQL_DESC_OCTET_LENGTH_PTR diatur ke panjang data.
Jika bidang SQL_DESC_INDICATOR_PTR dalam APD adalah penunjuk null, aplikasi tidak dapat menggunakan rekaman deskriptor ini untuk menentukan argumen NULL.
Bidang ini adalah bidang yang ditangguhkan: Bidang ini tidak digunakan pada saat ditetapkan tetapi digunakan di lain waktu oleh driver untuk menunjukkan nullability (untuk ARD) atau untuk menentukan nullability (untuk APD).
SQL_DESC_LABEL [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi label atau judul kolom. Jika kolom tidak memiliki label, variabel ini berisi nama kolom. Jika kolom tidak bernama dan tidak diberi label, variabel ini berisi string kosong.
SQL_DESC_LENGTH [Semua]
Bidang catatan SQLULEN ini adalah panjang maksimum atau aktual dari string karakter dalam karakter atau tipe data biner dalam byte. Ini adalah panjang maksimum untuk tipe data panjang tetap, atau panjang aktual untuk tipe data panjang variabel. Nilainya selalu mengecualikan karakter penghentian null yang mengakhiri string karakter. Untuk nilai yang jenisnya SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, atau salah satu tipe data interval SQL, bidang ini memiliki panjang dalam karakter representasi string karakter dari nilai datetime atau interval.
Nilai dalam bidang ini mungkin berbeda dari nilai untuk "panjang" seperti yang didefinisikan dalam ODBC 2*.x*. Untuk informasi selengkapnya, lihat Lampiran D: Tipe Data.
SQL_DESC_LITERAL_PREFIX [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi karakter atau karakter yang dikenali driver sebagai awalan untuk literal tipe data ini. Variabel ini berisi string kosong untuk tipe data yang awalan literalnya tidak berlaku.
SQL_DESC_LITERAL_SUFFIX [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi karakter atau karakter yang dikenali driver sebagai akhiran untuk literal tipe data ini. Variabel ini berisi string kosong untuk tipe data yang akhiran literalnya tidak berlaku.
SQL_DESC_LOCAL_TYPE_NAME [Deskriptor implementasi]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama lokal (bahasa asli) untuk tipe data yang mungkin berbeda dari nama reguler tipe data. Jika tidak ada nama yang dilokalkan, string kosong akan ditampilkan. Bidang ini hanya untuk tujuan tampilan.
SQL_DESC_NAME [Deskriptor implementasi]
Deskriptor bidang rekaman SQLCHAR * dalam baris ini berisi alias kolom, jika berlaku. Jika alias kolom tidak berlaku, nama kolom akan ditampilkan. Dalam kedua kasus tersebut, driver mengatur bidang SQL_DESC_UNNAMED ke SQL_NAMED saat mengatur bidang SQL_DESC_NAME. Jika tidak ada nama kolom atau alias kolom, driver mengembalikan string kosong di bidang SQL_DESC_NAME dan mengatur bidang SQL_DESC_UNNAMED ke SQL_UNNAMED.
Aplikasi dapat mengatur bidang SQL_DESC_NAME IPD ke nama parameter atau alias untuk menentukan parameter prosedur tersimpan berdasarkan nama. (Untuk informasi selengkapnya, lihat Mengikat Parameter berdasarkan Nama (Parameter Bernama).) Bidang SQL_DESC_NAME IRD adalah bidang baca-saja; SQLSTATE HY091 (Pengidentifikasi bidang deskriptor tidak valid) akan dikembalikan jika aplikasi mencoba mengaturnya.
Di IPD, bidang ini tidak ditentukan jika driver tidak mendukung parameter bernama. Jika driver mendukung parameter bernama dan mampu mendeskripsikan parameter, nama parameter dikembalikan di bidang ini.
SQL_DESC_NULLABLE [Deskriptor implementasi]
Di IRD, bidang rekaman SQLSMALLINT baca-saja ini SQL_NULLABLE jika kolom dapat memiliki nilai NULL, SQL_NO_NULLS jika kolom tidak memiliki nilai NULL, atau SQL_NULLABLE_UNKNOWN jika tidak diketahui apakah kolom menerima nilai NULL. Bidang ini berkaitan dengan kolom kumpulan hasil, bukan kolom dasar.
Dalam IPD, bidang ini selalu diatur ke SQL_NULLABLE karena parameter dinamis selalu dapat diterima oleh null dan tidak dapat diatur oleh aplikasi.
SQL_DESC_NUM_PREC_RADIX [Semua]
Bidang SQLINTEGER ini berisi nilai 2 jika tipe data di bidang SQL_DESC_TYPE adalah perkiraan tipe data numerik, karena bidang SQL_DESC_PRECISION berisi jumlah bit. Bidang ini berisi nilai 10 jika tipe data dalam bidang SQL_DESC_TYPE adalah tipe data numerik yang tepat, karena bidang SQL_DESC_PRECISION berisi jumlah digit desimal. Bidang ini diatur ke 0 untuk semua tipe data non-numerik.
SQL_DESC_OCTET_LENGTH [Semua]
Bidang rekaman SQLLEN ini berisi panjang, dalam byte, string karakter atau tipe data biner. Untuk karakter panjang tetap atau jenis biner, ini adalah panjang sebenarnya dalam byte. Untuk karakter panjang variabel atau jenis biner, ini adalah panjang maksimum dalam byte. Nilai ini selalu mengecualikan ruang untuk karakter penghentian null untuk deskriptor implementasi dan selalu menyertakan spasi untuk karakter penghentian null untuk deskriptor aplikasi. Untuk data aplikasi, bidang ini berisi ukuran buffer. Untuk APD, bidang ini didefinisikan hanya untuk parameter output atau input/output.
SQL_DESC_OCTET_LENGTH_PTR [Deskriptor aplikasi]
Bidang rekaman SQLLEN * ini menunjuk ke variabel yang akan berisi panjang total dalam byte dari argumen dinamis (untuk deskriptor parameter) atau nilai kolom terikat (untuk deskriptor baris).
Untuk APD, nilai ini diabaikan untuk semua argumen kecuali string karakter dan biner; Jika bidang ini menunjuk ke SQL_NTS, argumen dinamis harus diakhiri dengan null. Untuk menunjukkan bahwa parameter terikat akan menjadi parameter data-at-execution, aplikasi mengatur bidang ini dalam catatan APD yang sesuai ke variabel yang, pada waktu eksekusi, akan berisi nilai SQL_DATA_AT_EXEC atau hasil makro SQL_LEN_DATA_AT_EXEC. Jika ada lebih dari satu bidang tersebut, SQL_DESC_DATA_PTR dapat diatur ke nilai yang mengidentifikasi parameter secara unik untuk membantu aplikasi menentukan parameter mana yang diminta.
Jika bidang OCTET_LENGTH_PTR ARD adalah penunjuk nol, driver tidak mengembalikan informasi panjang untuk kolom. Jika bidang SQL_DESC_OCTET_LENGTH_PTR APD adalah penunjuk null, driver mengasumsikan bahwa string karakter dan nilai biner diakhiri null. (Nilai biner tidak boleh diakhiri null tetapi harus diberi panjang untuk menghindari pemotongan.)
Jika panggilan ke SQLFetch atau SQLFetchScroll yang mengisi buffer yang ditunjuk oleh bidang ini tidak mengembalikan SQL_SUCCESS atau SQL_SUCCESS_WITH_INFO, konten buffer tidak ditentukan. Bidang ini adalah bidang yang ditangguhkan. Ini tidak digunakan pada saat ditetapkan tetapi digunakan di kemudian hari oleh driver untuk menentukan atau menunjukkan panjang oktet data.
SQL_DESC_PARAMETER_TYPE [IPD]
Bidang rekaman SQLSMALLINT ini diatur ke SQL_PARAM_INPUT untuk parameter input, SQL_PARAM_INPUT_OUTPUT untuk parameter input/output, SQL_PARAM_OUTPUT untuk parameter output, SQL_PARAM_INPUT_OUTPUT_STREAM untuk parameter streaming input/output, atau SQL_PARAM_OUTPUT_STREAM untuk parameter streaming output. Ini diatur ke SQL_PARAM_INPUT secara default.
Untuk IPD, bidang diatur ke SQL_PARAM_INPUT secara default jika IPD tidak secara otomatis diisi oleh driver (atribut pernyataan SQL_ATTR_ENABLE_AUTO_IPD adalah SQL_FALSE). Aplikasi harus mengatur bidang ini di IPD untuk parameter yang bukan parameter input.
SQL_DESC_PRECISION [Semua]
Bidang catatan SQLSMALLINT ini berisi jumlah digit untuk jenis numerik yang tepat, jumlah bit dalam mantissa (presisi biner) untuk perkiraan jenis numerik, atau jumlah digit dalam komponen pecahan detik untuk tipe data SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP, atau SQL_INTERVAL_SECOND. Bidang ini tidak ditentukan untuk semua jenis data lainnya.
Nilai dalam bidang ini mungkin berbeda dari nilai untuk "presisi" seperti yang didefinisikan dalam ODBC 2*.x*. Untuk informasi selengkapnya, lihat Lampiran D: Tipe Data.
SQL_DESC_ROWVER [Deskriptor implementasi]
Bidang SQLSMALLINTrecord ini menunjukkan apakah kolom secara otomatis dimodifikasi oleh DBMS saat baris diperbarui (misalnya, kolom jenis "stempel waktu" di SQL Server). Nilai bidang rekaman ini diatur ke SQL_TRUE jika kolom adalah kolom versi baris, dan ke SQL_FALSE sebaliknya. Atribut kolom ini mirip dengan memanggil SQLSpecialColumns dengan IdentifierType SQL_ROWVER untuk menentukan apakah kolom diperbarui secara otomatis.
SQL_DESC_SCALE [Semua]
Bidang rekaman SQLSMALLINT ini berisi skala yang ditentukan untuk tipe data desimal dan numerik. Bidang tidak ditentukan untuk semua jenis data lainnya.
Nilai dalam bidang ini mungkin berbeda dari nilai untuk "skala" seperti yang didefinisikan dalam ODBC 2*.x*. Untuk informasi selengkapnya, lihat Lampiran D: Tipe Data.
SQL_DESC_SCHEMA_NAME [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama skema tabel dasar yang berisi kolom. Nilai yang ditampilkan bergantung pada driver jika kolom adalah ekspresi atau jika kolom adalah bagian dari tampilan. Jika sumber data tidak mendukung skema atau nama skema tidak dapat ditentukan, variabel ini berisi string kosong.
SQL_DESC_SEARCHABLE [IRD]
Bidang rekaman SQLSMALLINT baca-saja ini diatur ke salah satu nilai berikut:
SQL_PRED_NONE jika kolom tidak dapat digunakan dalam klausa WHERE . (Ini sama dengan nilai SQL_UNSEARCHABLE di ODBC 2*.x*.)
SQL_PRED_CHAR jika kolom dapat digunakan dalam klausa WHERE tetapi hanya dengan predikat LIKE . (Ini sama dengan nilai SQL_LIKE_ONLY di ODBC 2*.x*.)
SQL_PRED_BASIC jika kolom dapat digunakan dalam klausa WHERE dengan semua operator perbandingan kecuali LIKE. (Ini sama dengan nilai SQL_EXCEPT_LIKE di ODBC 2*.x*.)
SQL_PRED_SEARCHABLE apakah kolom dapat digunakan dalam klausa WHERE dengan operator perbandingan apa pun.
SQL_DESC_TABLE_NAME [IRD]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama tabel dasar yang berisi kolom ini. Nilai yang ditampilkan bergantung pada driver jika kolom adalah ekspresi atau jika kolom adalah bagian dari tampilan.
SQL_DESC_TYPE [Semua]
Bidang catatan SQLSMALLINT ini menentukan tipe data SQL atau C ringkas untuk semua tipe data kecuali tipe data tanggalwaktu dan interval. Untuk tipe data tanggalwaktu dan interval, bidang ini menentukan tipe data verbose, yaitu SQL_DATETIME atau SQL_INTERVAL.
Setiap kali bidang ini berisi SQL_DATETIME atau SQL_INTERVAL, bidang SQL_DESC_DATETIME_INTERVAL_CODE harus berisi subkode yang sesuai untuk jenis ringkas. Untuk tipe data tanggalwaktu, SQL_DESC_TYPE berisi SQL_DATETIME, dan bidang SQL_DESC_DATETIME_INTERVAL_CODE berisi subkode untuk tipe data tanggalwaktu tertentu. Untuk tipe data interval, SQL_DESC_TYPE berisi SQL_INTERVAL dan bidang SQL_DESC_DATETIME_INTERVAL_CODE berisi subkode untuk tipe data interval tertentu.
Nilai dalam bidang SQL_DESC_TYPE dan SQL_DESC_CONCISE_TYPE saling bergantung. Setiap kali salah satu bidang diatur, bidang lainnya juga harus diatur. SQL_DESC_TYPE dapat diatur dengan panggilan ke SQLSetDescField atau SQLSetDescRec. SQL_DESC_CONCISE_TYPE dapat diatur dengan panggilan ke SQLBindCol atau SQLBindParameter, atau SQLSetDescField.
Jika SQL_DESC_TYPE diatur ke tipe data ringkas selain tipe data interval atau tanggalwaktu, bidang SQL_DESC_CONCISE_TYPE diatur ke nilai yang sama dan bidang SQL_DESC_DATETIME_INTERVAL_CODE diatur ke 0.
Jika SQL_DESC_TYPE diatur ke tipe data tanggalwaktu atau interval verbose (SQL_DATETIME atau SQL_INTERVAL) dan bidang SQL_DESC_DATETIME_INTERVAL_CODE diatur ke subkode yang sesuai, bidang SQL_DESC_CONCISE TYPE diatur ke jenis ringkas yang sesuai. Mencoba mengatur SQL_DESC_TYPE ke salah satu jenis tanggalwaktu atau interval ringkas akan mengembalikan SQLSTATE HY021 (Informasi deskriptor yang tidak konsisten).
Ketika bidang SQL_DESC_TYPE diatur oleh panggilan ke SQLBindCol, SQLBindParameter, atau SQLSetDescField, bidang berikut diatur ke nilai default berikut, seperti yang ditunjukkan pada tabel di bawah ini. Nilai bidang yang tersisa dari rekaman yang sama tidak ditentukan.
| Nilai SQL_DESC_TYPE | Bidang lain yang diatur secara implisit |
|---|---|
| SQL_CHAR, SQL_VARCHAR, SQL_C_CHAR, SQL_C_VARCHAR | SQL_DESC_LENGTH diatur ke 1. SQL_DESC_PRECISION diatur ke 0. |
| SQL_DATETIME | Saat SQL_DESC_DATETIME_INTERVAL_CODE diatur ke SQL_CODE_DATE atau SQL_CODE_TIME, SQL_DESC_PRECISION diatur ke 0. Saat diatur ke SQL_DESC_TIMESTAMP, SQL_DESC_PRECISION diatur ke 6. |
| SQL_DECIMAL, SQL_NUMERIC, SQL_C_NUMERIC | SQL_DESC_SCALE diatur ke 0. SQL_DESC_PRECISION diatur ke presisi yang ditentukan implementasi untuk jenis data masing-masing. Lihat SQL ke C: Numerik untuk informasi tentang cara mengikat nilai SQL_C_NUMERIC secara manual. |
| SQL_FLOAT, SQL_C_FLOAT | SQL_DESC_PRECISION diatur ke presisi default yang ditentukan implementasi untuk SQL_FLOAT. |
| SQL_INTERVAL | Saat SQL_DESC_DATETIME_INTERVAL_CODE diatur ke tipe data interval, SQL_DESC_DATETIME_INTERVAL_PRECISION diatur ke 2 (presisi awal interval default). Ketika interval memiliki komponen detik, SQL_DESC_PRECISION diatur ke 6 (presisi detik interval default). |
Saat aplikasi memanggil SQLSetDescField untuk mengatur bidang deskriptor daripada memanggil SQLSetDescRec, aplikasi harus terlebih dahulu mendeklarasikan jenis data. Ketika itu terjadi, bidang lain yang ditunjukkan dalam tabel sebelumnya diatur secara implisit. Jika salah satu nilai yang ditetapkan secara implisit tidak dapat diterima, aplikasi kemudian dapat memanggil SQLSetDescField atau SQLSetDescRec untuk mengatur nilai yang tidak dapat diterima secara eksplisit.
SQL_DESC_TYPE_NAME [Deskriptor implementasi]
Bidang rekaman SQLCHAR * baca-saja ini berisi nama jenis yang bergantung pada sumber data (misalnya, "CHAR", "VARCHAR", dan sebagainya). Jika nama tipe data tidak diketahui, variabel ini berisi string kosong.
SQL_DESC_UNNAMED [Deskriptor implementasi]
Deskriptor bidang catatan SQLSMALLINT dalam baris ini diatur oleh driver ke SQL_NAMED atau SQL_UNNAMED saat mengatur bidang SQL_DESC_NAME. Jika bidang SQL_DESC_NAME berisi alias kolom atau jika alias kolom tidak berlaku, driver mengatur bidang SQL_DESC_UNNAMED ke SQL_NAMED. Jika aplikasi mengatur bidang SQL_DESC_NAME IPD ke nama parameter atau alias, driver mengatur bidang SQL_DESC_UNNAMED IPD ke SQL_NAMED. Jika tidak ada nama kolom atau alias kolom, driver mengatur bidang SQL_DESC_UNNAMED ke SQL_UNNAMED.
Aplikasi dapat mengatur bidang SQL_DESC_UNNAMED IPD ke SQL_UNNAMED. Driver mengembalikan SQLSTATE HY091 (Pengidentifikasi bidang deskriptor tidak valid) jika aplikasi mencoba mengatur bidang SQL_DESC_UNNAMED IPD ke SQL_NAMED. Bidang SQL_DESC_UNNAMED IRD hanya baca; SQLSTATE HY091 (Pengidentifikasi bidang deskriptor tidak valid) akan dikembalikan jika aplikasi mencoba mengaturnya.
SQL_DESC_UNSIGNED [Deskriptor implementasi]
Bidang rekaman SQLSMALLINT baca-saja ini diatur ke SQL_TRUE jika jenis kolom tidak ditandatangani atau non-numerik, atau SQL_FALSE jika jenis kolom ditandatangani.
SQL_DESC_UPDATABLE [IRD]
Bidang rekaman SQLSMALLINT baca-saja ini diatur ke salah satu nilai berikut:
SQL_ATTR_READ_ONLY jika kolom kumpulan hasil hanya baca.
SQL_ATTR_WRITE jika kolom kumpulan hasil adalah baca-tulis.
SQL_ATTR_READWRITE_UNKNOWN jika tidak diketahui apakah kolom kumpulan hasil dapat diperbarui atau tidak.
SQL_DESC_UPDATABLE menjelaskan kemampuan pembaruan kolom dalam kumpulan hasil, bukan kolom dalam tabel dasar. Kemampuan pembaruan kolom dalam tabel dasar tempat kolom kumpulan hasil ini didasarkan mungkin berbeda dari nilai di bidang ini. Apakah kolom dapat diperbarui dapat didasarkan pada jenis data, hak istimewa pengguna, dan definisi kumpulan hasil itu sendiri. Jika tidak jelas apakah kolom dapat diperbarui, SQL_ATTR_READWRITE_UNKNOWN harus dikembalikan.
Pemeriksaan Konsistensi
Pemeriksaan konsistensi dilakukan oleh driver secara otomatis setiap kali aplikasi meneruskan nilai untuk bidang SQL_DESC_DATA_PTR ARD, APD, atau IPD. Jika salah satu bidang tidak konsisten dengan bidang lain, SQLSetDescField akan mengembalikan SQLSTATE HY021 (Informasi deskriptor yang tidak konsisten). Untuk informasi selengkapnya, lihat "Pemeriksaan Konsistensi" di SQLSetDescRec.
Fungsi Terkait
| Untuk informasi tentang | Lihat |
|---|---|
| Mengikat kolom | Fungsi SQLBindCol |
| Mengikat parameter | Fungsi SQLBindParameter |
| Mendapatkan bidang deskriptor | Fungsi SQLGetDescField |
| Mendapatkan beberapa bidang deskriptor | Fungsi SQLGetDescRec |
| Mengatur beberapa bidang deskriptor | Fungsi SQLSetDescRec |