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 1.0: ISO 92
Summary
SQLDescribeCol mengembalikan deskriptor hasil - nama kolom, tipe, ukuran kolom, digit desimal, dan nullability - untuk satu kolom dalam set hasil. Informasi ini juga tersedia di bidang IRD.
Syntax
SQLRETURN SQLDescribeCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLCHAR * ColumnName,
SQLSMALLINT BufferLength,
SQLSMALLINT * NameLengthPtr,
SQLSMALLINT * DataTypePtr,
SQLULEN * ColumnSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
StatementHandle
[Input] Handel pernyataan.
Nomor Kolom
[Input] Nomor kolom data hasil, diurutkan secara berurutan dalam urutan kolom yang meningkat, dimulai dari 1. Argumen ColumnNumber juga dapat diatur ke 0 untuk mendeskripsikan kolom bookmark.
ColumnName
[Output] Penunjuk ke buffer tanpa henti untuk mengembalikan nama kolom. Nilai ini dibaca dari bidang SQL_DESC_NAME pada IRD. Jika kolom tidak bernama atau nama kolom tidak dapat ditentukan, driver mengembalikan string kosong.
Jika ColumnName bernilai NULL, NameLengthPtr tetap akan mengembalikan total jumlah karakter (tidak termasuk karakter null-terminasi untuk data karakter) yang tersedia untuk dikembalikan di buffer yang diarahkan oleh ColumnName.
BufferLength
[Input] Panjang buffer *ColumnName , dalam karakter.
NameLengthPtr
[Output] Penunjuk ke buffer untuk mengembalikan total karakter (tidak termasuk terminasi null) yang tersedia untuk dikembalikan di *ColumnName. Jika jumlah karakter yang tersedia untuk dikembalikan lebih besar atau sama dengan BufferLength, nama kolom dalam *ColumnName dipotong menjadi BufferLength dikurangi panjang karakter null-terminasi.
DataTypePtr
[Output] Penunjuk ke buffer untuk mengembalikan tipe data SQL dari kolom. Nilai ini dibaca dari bidang SQL_DESC_CONCISE_TYPE IRD. Ini akan menjadi salah satu nilai dalam SQL Data Types, atau tipe data SQL khusus driver. Jika tipe data tidak dapat ditentukan, driver mengembalikan SQL_UNKNOWN_TYPE.
Di ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME, atau SQL_TYPE_TIMESTAMP dikembalikan dalam *DataTypePtr untuk data tanggal, waktu, atau timestamp, masing-masing; di ODBC 2. x, SQL_DATE, SQL_TIME, atau SQL_TIMESTAMP dikembalikan. Driver Manager melakukan pemetaan yang diperlukan saat ODBC 2.aplikasi x bekerja dengan ODBC 3.x driver atau ketika ODBC 3.aplikasi x bekerja dengan ODBC 2.x driver.
Ketika ColumnNumber sama dengan 0 (untuk kolom bookmark), SQL_BINARY dikembalikan dalam *DataTypePtr untuk bookmark panjang variabel. (SQL_INTEGER dikembalikan jika marka buku digunakan oleh ODBC 3.aplikasi x bekerja dengan ODBC 2.x driver atau oleh ODBC 2.aplikasi x bekerja dengan ODBC 3.x driver.)
Untuk informasi lebih lanjut tentang tipe data ini, lihat Tipe Data SQL di Lampiran D: Tipe Data. Untuk informasi tentang jenis data SQL khusus driver, lihat dokumentasi driver.
ColumnSizePtr
[Output] Penunjuk ke buffer untuk mengembalikan ukuran (dalam karakter) kolom pada sumber data. Jika ukuran kolom tidak dapat ditentukan, driver mengembalikan 0. Untuk informasi selengkapnya tentang ukuran kolom, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan dalam Lampiran D: Jenis Data.
DecimalDigitsPtr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah digit desimal kolom pada sumber data. Jika jumlah digit desimal tidak dapat ditentukan atau tidak berlaku, pengemudi mengembalikan 0. Untuk informasi lebih lanjut tentang digit desimal, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan di Lampiran D: Tipe Data.
NullablePtr
[Output] Penunjuk ke buffer untuk mengembalikan nilai yang menunjukkan apakah kolom mengizinkan nilai NULL. Nilai ini dibaca dari bidang SQL_DESC_NULLABLE pada IRD. Nilainya adalah salah satu dari yang berikut ini:
SQL_NO_NULLS: Kolom tidak mengizinkan nilai NULL.
SQL_NULLABLE: Kolom mengizinkan nilai NULL.
SQL_NULLABLE_UNKNOWN: Driver tidak dapat menentukan apakah kolom mengizinkan nilai NULL.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, atau SQL_INVALID_HANDLE.
Diagnostics
Ketika SQLDescribeCol mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE yang terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_STMT dan HandleStatementHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umum dikembalikan oleh SQLDescribeCol dan menjelaskan masing-masing 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.) |
| 01004 | Data string, terpotong kanan | Buffer *ColumnName tidak cukup besar untuk mengembalikan seluruh nama kolom, sehingga nama kolom dipotong. Panjang nama kolom yang tidak terpotong dikembalikan dalam *NameLengthPtr. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.) |
| 07005 | Pernyataan yang disiapkan bukan spesifikasi kursor | Pernyataan yang terkait dengan StatementHandle tidak mengembalikan set hasil. Tidak ada kolom yang bisa dijelaskan. |
| 07009 | Indeks deskriptor tidak valid | (DM) Nilai yang ditentukan untuk argumen ColumnNumber sama dengan 0, dan opsi pernyataan SQL_ATTR_USE_BOOKMARKS adalah SQL_UB_OFF. Nilai yang ditentukan untuk argumen ColumnNumber lebih besar dari jumlah kolom dalam set hasil. |
| 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 | Kegagalan 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. 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 berjalan saat SQLDescribeCol 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) Fungsi eksekusi asinkron (bukan yang ini) dipanggil untuk StatementHandle dan masih dijalankan ketika fungsi ini dipanggil. (DM) Fungsi dipanggil sebelum memanggil SQLPrepare, SQLExecute, atau fungsi katalog pada handle pernyataan. (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. |
| HY013 | Kesalahan manajemen memori | Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah. |
| HY090 | String atau panjang buffer tidak valid | (DM) Nilai yang ditentukan untuk argumen BufferLength kurang dari 0. |
| 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 | 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 StatementHandle tidak mendukung fungsi. |
| IM017 | Polling dinonaktifkan dalam mode pemberitahuan asinkron | Setiap kali model pemberitahuan digunakan, polling dinonaktifkan. |
| IM018 | SQLCompleteAsync belum dipanggil untuk menyelesaikan operasi asinkron sebelumnya pada handel ini. | Jika panggilan fungsi sebelumnya pada handel mengembalikan SQL_STILL_EXECUTING dan jika mode pemberitahuan diaktifkan, SQLCompleteAsync harus dipanggil pada handel untuk melakukan pasca-pemrosesan dan menyelesaikan operasi. |
SQLDescribeCol dapat mengembalikan SQLSTATE apa pun yang dapat dikembalikan oleh SQLPrepare atau SQLExecute saat dipanggil setelah SQLPrepare dan sebelum SQLExecute, tergantung pada kapan sumber data mengevaluasi pernyataan SQL yang terkait dengan handle pernyataan.
Untuk alasan kinerja, sebuah aplikasi sebaiknya tidak memanggil SQLDescribeCol sebelum menjalankan pernyataan.
Komentar
Sebuah aplikasi biasanya memanggil SQLDescribeCol setelah panggilan ke SQLPrepare dan sebelum atau sesudah panggilan terkait ke SQLExecute. Sebuah aplikasi juga dapat memanggil SQLDescribeCol setelah panggilan ke SQLExecDirect. Untuk informasi selengkapnya, lihat Metadata Tataan Hasil.
SQLDescribeCol mengambil nama kolom, tipe, dan panjang yang dihasilkan oleh pernyataan SELECT . Jika kolom adalah sebuah ekspresi, *ColumnName adalah string kosong atau nama yang didefinisikan oleh driver.
Note
ODBC mendukung SQL_NULLABLE_UNKNOWN sebagai ekstensi, meskipun spesifikasi Open Group dan SQL Access Group Call Level Interface tidak menentukan opsi untuk SQLDescribeCol.
Fungsi Terkait
| Untuk informasi mengenai | Lihat |
|---|---|
| Mengikat buffer ke kolom dalam tataan hasil | SQLBindCol |
| Membatalkan pemrosesan pernyataan | SQLCancel |
| Mengembalikan informasi tentang kolom dalam tataan hasil | SQLColAttribute |
| Mengambil beberapa baris data | SQLFetch |
| Mengembalikan jumlah kolom set hasil | SQLNumResultCols |
| Menyiapkan pernyataan untuk eksekusi | SQLPrepare |