SQLSetScrollOptions Mapping

Ketika aplikasi memanggil SQLSetScrollOptions melalui driver ODBC 3.x dan driver tidak mendukung SQLSetScrollOptions, panggilan ke

SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)  

akan menghasilkan sebagai berikut:

  • Panggilan ke

    SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)  
    

    dengan argumen InfoType diatur ke salah satu nilai dalam tabel berikut, bergantung pada nilai argumen KeysetSize di SQLSetScrollOptions.

    Argumen KeysetSize Argumen InfoType
    SQL_SCROLL_FORWARD_ONLY SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2
    SQL_SCROLL_STATIC SQL_STATIC_CURSOR_ATTRIBUTES2
    SQL_SCROLL_KEYSET_DRIVEN SQL_KEYSET_CURSOR_ATTRIBUTES2
    SQL_SCROLL_DYNAMIC SQL_DYNAMIC_CURSOR_ATTRIBUTES2
    Nilai yang lebih besar dari argumen RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2

    Jika nilai argumen KeysetSize tidak tercantum dalam tabel sebelumnya, panggilan ke SQLSetScrollOptions mengembalikan SQLSTATE S1107 (Nilai baris di luar rentang) dan tidak ada langkah-langkah berikut yang dilakukan.

    Driver Manager kemudian memverifikasi apakah bit yang sesuai diatur dalam nilai *InfoValuePtr yang dikembalikan oleh panggilan ke SQLGetInfo, sesuai dengan nilai argumen Konkurensi di SQLSetScrollOptions.

    Argumen konkurensi Pengaturan InfoType
    SQL_CONCUR_READ_ONLY SQL_CA2_READ_ONLY_CONCURRENCY
    SQL_CONCUR_LOCK SQL_CA2_LOCK_CONCURRENCY
    SQL_CONCUR_ROWVER SQL_CA2_ROWVER_CONCURRENCY
    SQL_CONCUR_VALUES SQL_CA2_VALUES_CONCURRENCY

    Jika argumen Konkurensi bukan salah satu nilai dalam tabel sebelumnya, panggilan ke SQLSetScrollOptions mengembalikan SQLSTATE S1108 (opsi Konkurensi di luar rentang) dan tidak ada langkah-langkah berikut yang dilakukan. Jika bit yang sesuai (seperti yang ditunjukkan dalam tabel sebelumnya) tidak diatur dalam *InfoValuePtr ke salah satu nilai yang terkait dengan argumen Konkurensi , panggilan ke SQLSetScrollOptions mengembalikan SQLSTATE S1C00 (Driver tidak mampu) dan tidak ada langkah-langkah berikut yang dilakukan.

  • Panggilan ke

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)  
    

    dengan *ValuePtr diatur ke salah satu nilai dalam tabel berikut, sesuai dengan nilai argumen KeysetSize di SQLSetScrollOptions.

    Argumen KeysetSize *ValuePtr
    SQL_SCROLL_FORWARD_ONLY SQL_CURSOR_FORWARD_ONLY
    SQL_SCROLL_STATIC SQL_CURSOR_STATIC
    SQL_SCROLL_KEYSET_DRIVEN SQL_CURSOR_KEYSET_DRIVEN
    SQL_SCROLL_DYNAMIC SQL_CURSOR_DYNAMIC
    Nilai yang lebih besar dari argumen RowsetSize SQL_CURSOR_KEYSET_DRIVEN
  • Panggilan ke

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)  
    

    dengan *ValuePtr diatur ke argumen Konkurensi di SQLSetScrollOptions.

  • Jika argumen KeysetSize dalam panggilan ke SQLSetScrollOptions positif, panggilan ke

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)  
    

    dengan *ValuePtr diatur ke argumen KeysetSize di SQLSetScrollOptions.

  • Panggilan ke

    SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)  
    

    dengan *ValuePtr diatur ke argumen RowsetSize di SQLSetScrollOptions.

    Catatan

    Ketika Manajer Driver memetakan SQLSetScrollOptions untuk aplikasi yang bekerja dengan driver ODBC 3.x yang tidak mendukung SQLSetScrollOptions, Manajer Driver mengatur opsi pernyataan SQL_ROWSET_SIZE, bukan atribut pernyataan SQL_ATTR_ROW_ARRAY_SIZE, ke argumen RowsetSize di SQLSetScrollOption. Akibatnya, SQLSetScrollOptions tidak dapat digunakan oleh aplikasi saat mengambil beberapa baris dengan panggilan ke SQLFetch atau SQLFetchScroll. Ini hanya dapat digunakan saat mengambil beberapa baris dengan panggilan ke SQLExtendedFetch.