The conversion process adds several new system fields to each existing table in a database. Among these fields are a unique identifier, a generation indicator, and a lineage indicator. All replication fields are read-only.
During the conversion of a database, Microsoft Jet first looks at the existing fields in a table to determine if any field uses both the dbGUID data type (in Microsoft Access, the AutoNumber data type) and either the dbAutoIncrField or the dbSystemField attribute constant (in Microsoft Access, the Replication ID field size). If no field uses that data type and one of those attributes, Microsoft Jet adds the s_GUID field, which stores the AutoNumber that uniquely identifies each record. The AutoNumber for a specific record is identical across all replicas.
The AutoNumber is a 16-byte GUID (globally unique identifier, sometimes referred to as a UUID, or universally unique identifier) that appears in the following format:
{2FAC1234-31F8-11B4-A222-08002B34C003}
The hyphens and braces are used for display only and are not stored as part of the GUID.
Autogenerated GUID fields are identified by the dbGUID data type and either the dbAutoIncrField or the dbSystemField attribute constant. There can be more than one field in a table with the dbGUID data type, but there can be only one autogenerated field with the dbGUID data type in a table (regardless of whether it is replicable). If an autogenerated GUID field is added to a table, GUID values are generated for all records in the table. The value of an autogenerated GUID cannot be changed or deleted.
During the conversion process, Microsoft Jet also adds a field called s_Generation to each table in the database. The s_Generation field is used to determine which records are sent during synchronization. This allows the sending replica to avoid sending records that have not been updated since the last synchronization. Whenever a record is modified, its generation field is set to 0.
In general, during a synchronization all records with an s_Generation field set to 0 are sent, and then the generation field for the record is incremented to 1 more than the last generation, which now becomes the new highest generation. The sending replica knows the last generation sent to that specific receiving replica, and sends only records with generation 0 and generations higher than the previous generations.
The receiving replica does not apply generations received out of sequence. In some cases, Microsoft Jet might determine that there are too many records to be sent in a single message and split a synchronization into more than one message.
Generally, there is a single generation field per record. To optimize synchronizations for databases that contain Memo (Long Text) or OLE Object (Long Binary) fields (sometimes referred to as a BLOBs, or binary large objects), an extra generation field is associated with each BLOB. If the BLOB is modified, this generation value is set to 0 so that the BLOB is sent during the next synchronization. If a record modifies other fields, but not the BLOB, the BLOB’s generation field is not set to 0 and the BLOB is not sent.
This extra generation field is named Gen_xxxx, where xxxx is the BLOB field’s name (truncated, if necessary). If this name duplicates an existing field name, the prefix is changed, one character at a time, until a unique name is found. A ColGeneration property is set on the BLOB field to identify the added Gen_xxxx field. One of these fields is set for each BLOB field.
During the conversion process, Microsoft Jet also adds a field named s_Lineage to each table in the database. The s_Lineage field is used to determine which replicas have already received an update and also determine the winner if a conflict occurs. It contains a list of nicknames for replicas that have updated the record and the last version created by each of those replicas. The version field is an integral field that is incremented when the record is changed. The first pair of values in the lineage reflects the current version and the name of the last member of the replica set to update the record. This is a binary field and is not usually readable by users.