Microsoft KB Archive/103255

From BetaArchive Wiki
Knowledge Base

ACC: Factors When Opening Attached ODBC Tables in MS Access

Article ID: 103255

Article Last Modified on 5/6/2003


  • Microsoft Access 1.0 Standard Edition
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition

This article was previously published under Q103255


Advanced: Requires expert coding, interoperability, and multiuser skills.

This articles describes the factors that determine whether Microsoft Access will open an attached ODBC table in read-only mode or in read/write mode.


The following are three factors that can cause Microsoft Access to open an attached ODBC table in read-only mode:

  • When the attached table does not have a unique index in the data source.

    Microsoft Access is built on a keyset-driven cursor model, in which data is retrieved and updated based on key (or unique index) fields. If the key does not exist in the back-end table, Microsoft Access opens the table in read-only mode and the user is not able to modify the data.
  • If the ODBC data source is set to read-only by either the DBMS security system or the network security system.

    Microsoft Access determines this status by calling the ODBC application programming interface (API) SQLGetInfo() with fInfoType=SQL_DATA_SOURCE_READ_ONLY. If *rgbInfoValue=TRUE, then the data source is read-only; as a result, the attached table is opened in read-only mode.
  • If cursors are treated by the ODBC driver in a certain way. When a transaction is committed or rolled back, the ODBC driver can:

    1. Preserve the cursor.
    2. Close the cursor.
    3. Close and delete the cursor.

    A cursor is a construct that is defined to point to a record (or set of records) in the table. The data is then manipulated by referencing the cursor.

    If the driver exhibits behavior 3, Microsoft Access opens the table in read-only mode. To determines this, Microsoft Access first calls the ODBC API SQLGetInfo() with fOption=SQL_TXN_CAPABLE. If


    Microsoft Access calls SQLGetInfo with


    followed by


    If either of these values is 0, the ODBC driver closes and deletes the cursors on committals or rollbacks.

Keywords: kbinfo kbusage KB103255