How Microsoft Jet Determines If a Remote Table Can Be Updated

When Microsoft Jet opens a Recordset object, it attempts to use a dynaset-type Recordset object, which allows your application to update the data in the remote table. This is only possible if the remote table is uniquely indexed. The unique key values on each record of a remote table allow direct access to the records for all updates. The fields that comprise the unique keys are called bookmarks.

When you link a table, Microsoft Jet determines the bookmark field or fields by choosing the first unique index returned by the SQLStatistics function as the primary index (if any unique indexes exist on the table). The SQLStatistics function always returns indexes in a specific order: clustered indexes, followed by hashed indexes, followed by other indexes. Furthermore, the SQLStatistics function alphabetizes the indexes within each group. Therefore, if you want Microsoft Jet to select a particular index, you can name the index so that it appears first in the alphabetical listing.

Note Microsoft Jet does not attempt to determine the optimal set of fields that uniquely identifies a record in the table through the SQLSpecialColumns ODBC function call. Furthermore, Microsoft Jet does not attempt to use a database server’s native record number identifier as a unique index due to the potentially ambiguous nature of such identifiers in a multiuser environment.

If Microsoft Jet is unable to identify a unique index on the remote table, it must open a snapshot-type Recordset object, which can’t be updated. You can get around this behavior by creating a pseudo index, as discussed in the next section.