Fungsi SQLGetDiagField

Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 3.0: ISO 92

Ringkasan
SQLGetDiagField mengembalikan nilai bidang rekaman struktur data diagnostik saat ini (terkait dengan handel tertentu) yang berisi informasi kesalahan, peringatan, dan status.

Sintaks


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Argumen

HandleType
[Input] Pengidentifikasi jenis handel yang menjelaskan jenis handel yang diagnostiknya diperlukan. Harus salah satu hal berikut:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN handel hanya digunakan oleh Driver Manager dan driver. Aplikasi tidak boleh menggunakan jenis handel ini. Untuk informasi selengkapnya tentang SQL_HANDLE_DBC_INFO_TOKEN, lihat Mengembangkan Kesadaran Kumpulan Koneksi di Driver ODBC.

Menangani
[Input] Handel untuk struktur data diagnostik, dari jenis yang ditunjukkan oleh HandleType. Jika HandleType SQL_HANDLE_ENV, Handle dapat berupa handel lingkungan bersama atau yang tidak dibagikan.

RecNumber
[Input] Menunjukkan rekaman status tempat aplikasi mencari informasi. Rekaman status diberi nomor dari 1. Jika argumen DiagIdentifier menunjukkan bidang header diagnostik apa pun, RecNumber diabaikan. Jika tidak, seharusnya lebih dari 0.

DiagIdentifier
[Input] Menunjukkan bidang diagnostik yang nilainya akan dikembalikan. Untuk informasi selengkapnya, lihat bagian "Argumen DiagIdentifier " di "Komentar."

DiagInfoPtr
[Output] Arahkan ke buffer untuk mengembalikan informasi diagnostik. Jenis data tergantung pada nilai DiagIdentifier. Jika DiagInfoPtr adalah jenis bilangan bulat, aplikasi harus menggunakan buffer SQLULEN dan menginisialisasi nilai ke 0 sebelum memanggil fungsi ini, karena beberapa driver hanya dapat menulis buffer 32-bit atau 16-bit yang lebih rendah dan membiarkan bit berurutan lebih tinggi tidak berubah.

Jika DiagInfoPtr adalah NULL, StringLengthPtr masih akan mengembalikan jumlah total byte (tidak termasuk karakter penghentian null untuk data karakter) yang tersedia untuk dikembalikan dalam buffer yang ditujukkan oleh DiagInfoPtr.

BufferLength
[Input] Jika DiagIdentifier adalah diagnostik yang ditentukan ODBC dan DiagInfoPtr menunjuk ke string karakter atau buffer biner, argumen ini harus panjang *DiagInfoPtr. Jika DiagIdentifier adalah bidang yang ditentukan ODBC dan *DiagInfoPtr adalah bilangan bulat, BufferLength diabaikan. Jika nilai dalam *DiagInfoPtr adalah string Unicode (saat memanggil SQLGetDiagFieldW), argumen BufferLength harus berupa angka genap.

Jika DiagIdentifier adalah bidang yang ditentukan driver, aplikasi menunjukkan sifat bidang ke Driver Manager dengan mengatur argumen BufferLength . BufferLength dapat memiliki nilai berikut:

  • Jika DiagInfoPtr adalah penunjuk ke string karakter, BufferLength adalah panjang string atau SQL_NTS.

  • Jika DiagInfoPtr adalah penunjuk ke buffer biner, aplikasi menempatkan hasil makro SQL_LEN_BINARY_ATTR(panjang) di BufferLength. Ini menempatkan nilai negatif di BufferLength.

  • Jika DiagInfoPtr adalah penunjuk ke nilai selain string karakter atau string biner, BufferLength harus memiliki nilai SQL_IS_POINTER.

  • Jika *DiagInfoPtr berisi jenis data dengan panjang tetap, BufferLength SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT, atau SQL_IS_USMALLINT, sebagaimana mewajibkan.

StringLengthPtr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah total byte (tidak termasuk jumlah byte yang diperlukan untuk karakter penghentian null) yang tersedia untuk dikembalikan di *DiagInfoPtr, untuk data karakter. Jika jumlah byte yang tersedia untuk dikembalikan lebih besar dari atau sama dengan BufferLength, teks dalam *DiagInfoPtr dipotong menjadi BufferLength dikurangi panjang karakter penghentian null.

Kembali

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE, atau SQL_NO_DATA.

Diagnostik

SQLGetDiagField tidak memposting rekaman diagnostik untuk dirinya sendiri. Ini menggunakan nilai pengembalian berikut untuk melaporkan hasil eksekusinya sendiri:

  • SQL_SUCCESS: Fungsi berhasil mengembalikan informasi diagnostik.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr terlalu kecil untuk menahan bidang diagnostik yang diminta. Oleh karena itu, data di bidang diagnostik dipotong. Untuk menentukan bahwa pemotongan terjadi, aplikasi harus membandingkan BufferLength dengan jumlah byte aktual yang tersedia, yang ditulis ke *StringLengthPtr.

  • SQL_INVALID_HANDLE: Handel yang ditunjukkan oleh HandleType dan Handle bukan handel yang valid.

  • SQL_ERROR: Salah satu hal berikut ini terjadi:

    • Argumen DiagIdentifier bukan salah satu nilai yang valid.

    • Argumen DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE, atau SQL_DIAG_ROW_COUNT, tetapi Handle bukan handel pernyataan. (Manajer Driver mengembalikan diagnostik ini.)

    • Argumen RecNumber negatif atau 0 ketika DiagIdentifier menunjukkan bidang dari rekaman diagnostik. RecNumber diabaikan untuk bidang header.

    • Nilai yang diminta adalah string karakter dan BufferLength kurang dari nol.

    • Saat menggunakan pemberitahuan asinkron, operasi asinkron pada handel tidak selesai.

  • SQL_NO_DATA: RecNumber lebih besar dari jumlah rekaman diagnostik yang ada untuk handel yang ditentukan dalam Handel. Fungsi ini juga mengembalikan SQL_NO_DATA untuk RecNumber positif jika tidak ada rekaman diagnostik untuk Handle.

Komentar

Aplikasi biasanya memanggil SQLGetDiagField untuk mencapai salah satu dari tiga tujuan:

  1. Untuk mendapatkan informasi kesalahan atau peringatan tertentu ketika panggilan fungsi telah mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO (atau SQL_NEED_DATA untuk fungsi SQLBrowseConnect ).

  2. Untuk menentukan jumlah baris dalam sumber data yang terpengaruh saat menyisipkan, menghapus, atau memperbarui operasi dilakukan dengan panggilan ke SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos (dari bidang header SQL_DIAG_ROW_COUNT), atau untuk menentukan jumlah baris yang ada di kursor terbuka saat ini, jika driver dapat memberikan informasi ini (dari bidang header SQL_DIAG_CURSOR_ROW_COUNT).

  3. Untuk menentukan fungsi mana yang dijalankan oleh panggilan ke SQLExecDirect atau SQLExecute (dari bidang header SQL_DIAG_DYNAMIC_FUNCTION dan SQL_DIAG_DYNAMIC_FUNCTION_CODE).

Setiap fungsi ODBC dapat memposting nol atau lebih rekaman diagnostik setiap kali dipanggil, sehingga aplikasi dapat memanggil SQLGetDiagField setelah panggilan fungsi ODBC. Tidak ada batasan jumlah rekaman diagnostik yang dapat disimpan kapan saja. SQLGetDiagField hanya mengambil informasi diagnostik yang terakhir dikaitkan dengan struktur data diagnostik yang ditentukan dalam argumen Handel . Jika aplikasi memanggil fungsi ODBC selain SQLGetDiagField atau SQLGetDiagRec, informasi diagnostik apa pun dari panggilan sebelumnya dengan handel yang sama akan hilang.

Aplikasi dapat memindai semua rekaman diagnostik dengan menaikkan RecNumber, selama SQLGetDiagField mengembalikan SQL_SUCCESS. Jumlah rekaman status ditunjukkan di bidang header SQL_DIAG_NUMBER. Panggilan ke SQLGetDiagField tidak merusak bidang header dan rekaman. Aplikasi dapat memanggil SQLGetDiagField lagi nanti untuk mengambil bidang dari rekaman, selama fungsi selain fungsi diagnostik belum dipanggil di sementara, yang akan memposting rekaman pada handel yang sama.

Aplikasi dapat memanggil SQLGetDiagField untuk mengembalikan bidang diagnostik apa pun kapan saja, kecuali untuk SQL_DIAG_CURSOR_ROW_COUNT atau SQL_DIAG_ROW_COUNT, yang akan mengembalikan SQL_ERROR jika Handle bukan handel pernyataan. Jika ada bidang diagnostik lain yang tidak terdefinisi, panggilan ke SQLGetDiagField akan mengembalikan SQL_SUCCESS (asalkan tidak ada diagnostik lain yang ditemui) dan nilai yang tidak terdefinisi dikembalikan untuk bidang tersebut.

Untuk informasi selengkapnya, lihat Menggunakan SQLGetDiagRec dan SQLGetDiagField dan Menerapkan SQLGetDiagRec dan SQLGetDiagField.

Memanggil API selain API yang sedang dijalankan secara asinkron akan menghasilkan HY010 "Kesalahan urutan fungsi". Namun, catatan kesalahan tidak dapat diambil sebelum operasi asinkron selesai.

Argumen HandleType

Setiap jenis handel dapat memiliki informasi diagnostik yang terkait dengannya. Argumen HandleType menunjukkan jenis handel Handel.

Beberapa bidang header dan rekaman tidak dapat dikembalikan untuk pegangan lingkungan, koneksi, pernyataan, dan deskriptor. Handel yang bidangnya tidak berlaku ditunjukkan di bagian "Bidang Header" dan "Bidang Rekaman" berikut ini.

Jika HandleType SQL_HANDLE_ENV, Handel dapat menjadi handel lingkungan bersama atau tidak dibagikan.

Tidak ada bidang diagnostik header khusus driver yang harus dikaitkan dengan handel lingkungan.

Satu-satunya bidang header diagnostik yang ditentukan untuk handel deskriptor adalah SQL_DIAG_NUMBER dan SQL_DIAG_RETURNCODE.

Argumen DiagIdentifier

Argumen ini menunjukkan pengidentifikasi bidang yang diperlukan dari struktur data diagnostik. Jika RecNumber lebih besar dari atau sama dengan 1, data di bidang menjelaskan informasi diagnostik yang dikembalikan oleh fungsi. Jika RecNumber adalah 0, bidang berada di header struktur data diagnostik dan oleh karena itu berisi data yang berkaitan dengan panggilan fungsi yang mengembalikan informasi diagnostik, bukan ke informasi tertentu.

Driver dapat menentukan bidang header dan rekaman khusus driver dalam struktur data diagnostik.

Aplikasi ODBC 3*.x* yang bekerja dengan driver ODBC 2*.x* akan dapat memanggil SQLGetDiagField hanya dengan argumen DiagIdentifier SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME, atau SQL_DIAG_SQLSTATE. Semua bidang diagnostik lainnya akan mengembalikan SQL_ERROR.

Bidang Header

Bidang header yang tercantum dalam tabel berikut ini dapat disertakan dalam argumen DiagIdentifier .

DiagIdentifier Tipe hasil Kembali
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Bidang ini berisi jumlah baris dalam kursor. Semantiknya bergantung pada jenis informasi SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2, dan SQL_STATIC_CURSOR_ATTRIBUTES2, yang menunjukkan jumlah baris mana yang tersedia untuk setiap jenis kursor (dalam bit SQL_CA2_CRC_EXACT dan SQL_CA2_CRC_APPROXIMATE).

Konten bidang ini didefinisikan hanya untuk handel pernyataan dan hanya setelah SQLExecute, SQLExecDirect, atau SQLMoreResults telah dipanggil. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT selain handel pernyataan akan mengembalikan SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Ini adalah string yang menjelaskan pernyataan SQL bahwa fungsi yang mendasar dijalankan. (Lihat "Nilai bidang Fungsi Dinamis," nanti di bagian ini, untuk nilai tertentu.) Konten bidang ini ditentukan hanya untuk handel pernyataan dan hanya setelah panggilan ke SQLExecute, SQLExecDirect, atau SQLMoreResults. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION selain handel pernyataan akan mengembalikan SQL_ERROR. Nilai bidang ini tidak terdefinisi sebelum panggilan ke SQLExecute atau SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Ini adalah kode numerik yang menjelaskan pernyataan SQL yang dijalankan oleh fungsi yang mendasar. (Lihat "Nilai Bidang Fungsi Dinamis," nanti di bagian ini, untuk nilai tertentu.) Konten bidang ini ditentukan hanya untuk handel pernyataan dan hanya setelah panggilan ke SQLExecute, SQLExecDirect, atau SQLMoreResults. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION_CODE selain handel pernyataan akan mengembalikan SQL_ERROR. Nilai bidang ini tidak terdefinisi sebelum panggilan ke SQLExecute atau SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER Jumlah rekaman status yang tersedia untuk handel yang ditentukan.
SQL_DIAG_RETURNCODE SQLRETURN Mengembalikan kode yang dikembalikan oleh fungsi . Untuk daftar kode pengembalian, lihat Mengembalikan Kode. Driver tidak harus menerapkan SQL_DIAG_RETURNCODE; selalu diimplementasikan oleh Driver Manager. Jika belum ada fungsi yang dipanggil pada Handle, SQL_SUCCESS akan dikembalikan untuk SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN Jumlah baris yang terpengaruh oleh sisipan, hapus, atau pembaruan yang dilakukan oleh SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos. Ini ditentukan driver setelah spesifikasi kursor dijalankan. Isi bidang ini didefinisikan hanya untuk handel pernyataan. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_ROW_COUNT selain handel pernyataan akan mengembalikan SQL_ERROR. Data di bidang ini juga dikembalikan dalam argumen RowCountPtr dari SQLRowCount. Data di bidang ini diatur ulang setelah setiap panggilan fungsi nondiagnostik, sedangkan jumlah baris yang dikembalikan oleh SQLRowCount tetap sama sampai pernyataan diatur kembali ke status yang disiapkan atau dialokasikan.

Bidang Rekaman

Bidang rekaman yang tercantum dalam tabel berikut ini bisa disertakan dalam argumen DiagIdentifier .

DiagIdentifier Tipe hasil Kembali
SQL_DIAG_CLASS_ORIGIN SQLCHAR * String yang menunjukkan dokumen yang menentukan bagian kelas dari nilai SQLSTATE dalam rekaman ini. Nilainya adalah "ISO 9075" untuk semua SQLSTATEs yang ditentukan oleh antarmuka tingkat panggilan Open Group dan ISO. Untuk SQLSTATEs khusus ODBC (semua yang kelas SQLSTATE-nya adalah "IM"), nilainya adalah "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Jika bidang SQL_DIAG_ROW_NUMBER adalah nomor baris yang valid dalam set baris atau sekumpulan parameter, bidang ini berisi nilai yang mewakili nomor kolom dalam tataan hasil atau nomor parameter dalam kumpulan parameter. Nomor kolom tataan hasil selalu dimulai pada 1; jika rekaman status ini berkaitan dengan kolom bookmark, bidang bisa nol. Nomor parameter dimulai dari 1. Ini memiliki nilai SQL_NO_COLUMN_NUMBER jika rekaman status tidak terkait dengan nomor kolom atau nomor parameter. Jika driver tidak dapat menentukan nomor kolom atau nomor parameter yang terkait dengan rekaman ini, bidang ini memiliki nilai SQL_COLUMN_NUMBER_UNKNOWN.

Isi bidang ini didefinisikan hanya untuk handel pernyataan.
SQL_DIAG_CONNECTION_NAME SQLCHAR * String yang menunjukkan nama koneksi yang terkait dengan rekaman diagnostik. Bidang ini ditentukan driver. Untuk struktur data diagnostik yang terkait dengan handel lingkungan dan untuk diagnostik yang tidak terkait dengan koneksi apa pun, bidang ini adalah string panjang nol.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Pesan informasi tentang kesalahan atau peringatan. Bidang ini diformat seperti yang dijelaskan dalam Pesan Diagnostik. Tidak ada panjang maksimum untuk teks pesan diagnostik.
SQL_DIAG_NATIVE SQLINTEGER Kode kesalahan asli khusus sumber driver/data. Jika tidak ada kode kesalahan asli, driver mengembalikan 0.
SQL_DIAG_ROW_NUMBER SQLLEN Bidang ini berisi nomor baris dalam set baris, atau nomor parameter dalam kumpulan parameter, dengan rekaman status yang terkait. Nomor baris dan nomor parameter dimulai dengan 1. Bidang ini memiliki nilai SQL_NO_ROW_NUMBER jika rekaman status ini tidak terkait dengan nomor baris atau nomor parameter. Jika driver tidak dapat menentukan nomor baris atau nomor parameter yang terkait dengan rekaman ini, bidang ini memiliki nilai SQL_ROW_NUMBER_UNKNOWN.

Isi bidang ini didefinisikan hanya untuk handel pernyataan.
SQL_DIAG_SERVER_NAME SQLCHAR * String yang menunjukkan nama server yang terkait dengan catatan diagnostik. Ini sama dengan nilai yang dikembalikan untuk panggilan ke SQLGetInfo dengan opsi SQL_DATA_SOURCE_NAME. Untuk struktur data diagnostik yang terkait dengan handel lingkungan dan untuk diagnostik yang tidak terkait dengan server apa pun, bidang ini adalah string panjang nol.
SQL_DIAG_SQLSTATE SQLCHAR * Kode diagnostik SQLSTATE lima karakter. Untuk informasi selengkapnya, lihat SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * String dengan format dan nilai yang valid yang sama dengan SQL_DIAG_CLASS_ORIGIN, yang mengidentifikasi bagian yang menentukan bagian subkelas dari kode SQLSTATE. SQLSTATES khusus ODBC yang "ODBC 3.0" dikembalikan meliputi yang berikut ini:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Nilai Bidang Fungsi Dinamis

Tabel berikut menjelaskan nilai SQL_DIAG_DYNAMIC_FUNCTION dan SQL_DIAG_DYNAMIC_FUNCTION_CODE yang berlaku untuk setiap jenis pernyataan SQL yang dijalankan oleh panggilan ke SQLExecute atau SQLExecDirect. Driver dapat menambahkan nilai yang ditentukan driver ke yang tercantum.

Pernyataan SQL

dieksekusi
Nilai dari

SQL_DIAG_DYNAMIC_FUNCTION
Nilai dari

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "UBAH DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
definisi pernyataan "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
character-set-definition "BUAT SET KARAKTER" SQL_DIAG_CREATE_CHARACTER_SET
definisi kolajek "CREATE COLLATION" SQL_DIAG_CREATE_COLLATION
definisi domainn "BUAT DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "BUAT INDEKS" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "BUAT TAMPILAN" SQL_DIAG_CREATE_VIEW
spesifikasi kursor "PILIH KURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "KURSOR PENGHAPUSAN DINAMIS" SQL_DIAG_DYNAMIC_DELETE_CURSOR
delete-statement-searched "HAPUS DI MANA" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "HILANGKAN PERNYATAAN" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "HILANGKAN SET KARAKTER" SQL_DIAG_DROP_CHARACTER_SET
drop-collation-statement "DROP COLLATION" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-statement "HILANGKAN INDEKS" SQL_DIAG_DROP_INDEX
drop-schema-statement "HILANGKAN SKEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "JATUHKAN TERJEMAHAN" SQL_DIAG_DROP_TRANSLATION
drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
insert-statement "INSERT" SQL_DIAG_INSERT
Odbc-procedure-extension "PANGGIL" panggilan SQL_DIAG_
pernyataan pencabutan "CABUT" SQL_DIAG_REVOKE
definisi skema "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
definisi terjemahan "BUAT TERJEMAHAN" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "KURSOR PEMBARUAN DINAMIS" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "PERBARUI DI MANA" SQL_DIAG_UPDATE_WHERE
Tidak dikenal string kosong SQL_DIAG_UNKNOWN_STATEMENT

Urutan Rekaman Status

Rekaman status diposisikan dalam urutan berdasarkan nomor baris dan jenis diagnostik. Driver Manager menentukan urutan akhir untuk mengembalikan rekaman status yang dihasilkannya. Driver menentukan urutan akhir untuk mengembalikan rekaman status yang dihasilkannya.

Jika catatan diagnostik diposting oleh Driver Manager dan driver, Driver Manager bertanggung jawab untuk memesannya.

Jika ada dua rekaman status atau lebih, urutan rekaman ditentukan terlebih dahulu menurut nomor baris. Aturan berikut berlaku untuk menentukan urutan rekaman diagnostik menurut baris:

  • Rekaman yang tidak sesuai dengan baris apa pun muncul di depan rekaman yang sesuai dengan baris tertentu, karena SQL_NO_ROW_NUMBER didefinisikan menjadi -1.

  • Rekaman yang nomor barisnya tidak diketahui muncul di depan semua rekaman lainnya, karena SQL_ROW_NUMBER_UNKNOWN didefinisikan menjadi -2.

  • Untuk semua rekaman yang berkaitan dengan baris tertentu, rekaman diurutkan menurut nilai di bidang SQL_DIAG_ROW_NUMBER. Semua kesalahan dan peringatan baris pertama yang terpengaruh tercantum, lalu semua kesalahan dan peringatan baris berikutnya yang terpengaruh, dan sebagainya.

Catatan

Manajer Driver ODBC 3*.x* tidak memesan rekaman status dalam antrean diagnostik jika SQLSTATE 01S01 (Kesalahan berturut-turut) dikembalikan oleh driver ODBC 2*.x* atau jika SQLSTATE 01S01 (Kesalahan berturut-turut) dikembalikan oleh driver ODBC 3*.x* ketika SQLExtendedFetch dipanggil atau SQLSetPos dipanggil pada kursor yang telah diposisikan dengan SQLExtendedFetch.

Dalam setiap baris, atau untuk semua rekaman yang tidak sesuai dengan baris atau di mana nomor baris tidak diketahui, atau untuk semua rekaman tersebut dengan nomor baris sama dengan SQL_NO_ROW_NUMBER, rekaman pertama yang tercantum ditentukan dengan menggunakan sekumpulan aturan pengurutan. Setelah rekaman pertama, urutan rekaman lain yang memengaruhi baris tidak ditentukan. Aplikasi tidak dapat mengasumsikan bahwa kesalahan mendahului peringatan setelah rekaman pertama. Aplikasi harus memindai struktur data diagnostik lengkap untuk mendapatkan informasi lengkap tentang panggilan yang tidak berhasil ke fungsi.

Aturan berikut digunakan untuk menentukan rekaman pertama dalam baris. Rekor dengan peringkat tertinggi adalah rekor pertama. Sumber rekaman (Manajer Driver, driver, gateway, dan sebagainya) tidak dipertimbangkan saat memberi peringkat rekaman.

  • Rekaman Status Kesalahan yang menjelaskan kesalahan memiliki peringkat tertinggi. Aturan berikut diterapkan untuk mengurutkan kesalahan:

    • Catatan yang menunjukkan kegagalan transaksi atau kemungkinan kegagalan transaksi mengungguli semua catatan lainnya.

    • Jika dua rekaman atau lebih menjelaskan kondisi kesalahan yang sama, maka SQLSTATEs yang ditentukan oleh spesifikasi Open Group CLI (kelas 03 hingga HZ) mengungguli ODBC- dan SQLSTATEs yang ditentukan driver.

  • Catatan Status Tanpa Nilai Data yang ditentukan implementasi yang menjelaskan nilai Tanpa Data yang ditentukan driver (kelas 02) memiliki peringkat tertinggi kedua.

  • Catatan Status Peringatan yang menjelaskan peringatan (kelas 01) memiliki peringkat terendah. Jika dua catatan atau lebih menjelaskan kondisi peringatan yang sama, maka peringatan SQLSTATEs yang ditentukan oleh spesifikasi Open Group CLI mengungguli SQLSTATEs yang ditentukan ODBC dan yang ditentukan driver.

Untuk informasi tentang Lihat
Mendapatkan beberapa bidang struktur data diagnostik Fungsi SQLGetDiagRec

Lihat Juga

Referensi API ODBC
File Header ODBC