Bagikan melalui


Buffer

Buffer adalah bagian dari memori aplikasi yang digunakan untuk meneruskan data antara aplikasi dan driver. Misalnya, buffer aplikasi dapat dikaitkan dengan, atau terikat ke, kolom tataan hasil dengan SQLBindCol. Saat setiap baris diambil, data dikembalikan untuk setiap kolom di buffer ini. Buffer input digunakan untuk meneruskan data dari aplikasi ke driver; buffer output digunakan untuk mengembalikan data dari driver ke aplikasi.

Catatan

Jika fungsi ODBC mengembalikan SQL_ERROR, konten argumen output apa pun ke fungsi tersebut tidak ditentukan.

Diskusi ini menyangkut dirinya terutama dengan buffer jenis yang tidak ditentukan. Alamat buffer ini muncul sebagai argumen jenis SQLPOINTER, seperti argumen TargetValuePtr di SQLBindCol. Namun, beberapa item yang dibahas di sini, seperti argumen yang digunakan dengan buffer, juga berlaku untuk argumen yang digunakan untuk meneruskan string ke driver, seperti argumen TableName di SQLTables.

Buffer ini biasanya berpasangan. Buffer data digunakan untuk meneruskan data itu sendiri, sementara buffer panjang/indikator digunakan untuk meneruskan panjang data dalam buffer data atau nilai khusus seperti SQL_NULL_DATA, yang menunjukkan bahwa data adalah NULL. Panjang data dalam buffer data berbeda dari panjang buffer data itu sendiri. Ilustrasi berikut menunjukkan hubungan antara buffer data dan buffer panjang/indikator.

Data buffer and length/indicator buffer

Buffer panjang/indikator diperlukan setiap kali buffer data berisi data panjang variabel, seperti karakter atau data biner. Jika buffer data berisi data panjang tetap, seperti bilangan bulat atau struktur tanggal, buffer panjang/indikator hanya diperlukan untuk meneruskan nilai indikator karena panjang data sudah diketahui. Jika aplikasi menggunakan buffer panjang/indikator dengan data panjang tetap, driver mengabaikan panjang apa pun yang diteruskan di dalamnya.

Panjang buffer data dan data yang dikandungnya diukur dalam byte, dibandingkan dengan karakter. Perbedaan ini tidak penting untuk program yang menggunakan string ANSI karena panjang dalam byte dan karakter sama.

Ketika buffer data mewakili bidang deskriptor yang ditentukan driver, bidang diagnostik, atau atribut, aplikasi harus menunjukkan kepada Manajer Driver sifat argumen fungsi yang menunjukkan nilai untuk bidang atau atribut. Aplikasi melakukan ini dengan mengatur argumen panjang dalam panggilan fungsi apa pun yang mengatur bidang atau atribut ke salah satu nilai berikut. (Hal yang sama berlaku untuk fungsi yang mengambil nilai bidang atau atribut, dengan pengecualian bahwa argumen menunjuk ke nilai yang untuk fungsi pengaturan berada dalam argumen itu sendiri.)

  • Jika argumen fungsi yang menunjukkan nilai untuk bidang atau atribut adalah penunjuk ke string karakter, argumen panjang adalah panjang string atau SQL_NTS.

  • Jika argumen fungsi yang menunjukkan nilai untuk bidang atau atribut adalah penunjuk ke buffer biner, aplikasi menempatkan hasil makro SQL_LEN_BINARY_ATTR(panjang) dalam argumen panjang. Ini menempatkan nilai negatif dalam argumen panjang .

  • Jika argumen fungsi yang menunjukkan nilai untuk bidang atau atribut adalah penunjuk ke nilai selain string karakter atau string biner, argumen panjang harus memiliki nilai SQL_IS_POINTER.

  • Jika argumen fungsi yang menunjukkan nilai untuk bidang atau atribut berisi nilai panjang tetap, argumen panjangnya SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT, atau SQL_ISI_USMALLINT, yang sesuai.

Bagian ini berisi topik berikut.