ACC2000: Jet IDENTITY Datatype Seed and Increment Reset to 1

ID: Q202117


The information in this article applies to:

Moderate: Requires basic macro, coding, and interoperability skills.


SYMPTOMS

When you copy, export, import, or transfer tables into a new table or database, the IDENTITY property seed and increment values are both set to the default of 1.


CAUSE

You will experience this behavior when you set the seed or increment values of the IDENTITY property to a value other than one, and then create a new table using one of the following methods:


RESOLUTION

There is no option available in the user interface to change the seed and increment values of an existing column. However, you can use one of two methods that use the Data Definition Language (DDL) to change the seed and increment values for a newly copied or imported table.

METHOD 1

Create a new table with an IDENTITY column that has the seed and increment values that you want, other than the default value of 1. Then add the remaining fields in Design view.

The following steps demonstrate how to do this:
  1. Open the sample database Northwind.mdb.


  2. Create a module and type the following line in the Declarations section if it is not already there:


  3. 
    Option Explicit 
  4. Type the following procedure:


  5. 
    'This Example creates a table with custom identity seed values.
    
    Function CreateNewTable(tName As String, colName As String, _
          vSeed As Integer, vInc As Integer)
    
        DoCmd.RunSQL "Create Table " & tName & _
        "(CustID Identity(" & vSeed & "," & vInc & "));"
    
        Application.RefreshDatabaseWindow
    End Function 
  6. In the Immediate window, type in the following:
    
    ?CreateTable("New_tblEmployees","EmpID",1000,5) 
    Note that a new table called New_tblEmployees appears in the tables list in the Database window. The tblEmployees table has one column called EmpID, which is an IDENTITY property with a seed of 1000 and an increment of 5.


  7. In Design view of the table, you can add any other columns that you need.


  8. In Datasheet view, try adding a few new records. Note that the first record is numbered 1000, the second 1005, and so on.


At this point, if needed, you can use an append query to move the data, except for EmpID, from the original table into the new one.

METHOD 2

Use the ALTER TABLE command to change the seed and increment values in the column that has been reset.

NOTE: Before using ALTER TABLE, always make a backup copy of the table.

NOTE: Make sure you are correctly setting the seed value to the next one in the sequence. Setting a seed value too high results in skipped numbering. First, in Datasheet view, sort the table in ascending order by the column with the IDENTITY property to determine the value of the last record. For instance, if your data increments by 5 and the last entry is 2005, then you should set the seed value to 2010 and the increment to 5.

To run the ALTER TABLE command, follow these steps. This example changes a table to have a seed value of 10 and an increment of 4:

  1. Open the sample database Northwind.mdb.


  2. Select the Categories table and on the Edit menu, click Copy.


  3. In the Paste Copy As dialog box, name the new table tblCat.


  4. Create a new query in Design view.


  5. Click Close in the Show Table box.


  6. On the Query menu, point to SQL Specific, and then click Data Definition.


  7. In the Data Definition Query window, type the following SQL statement:


  8. ALTER TABLE tblCat (CategoryID COUNTER (10,4);
  9. Save and close the query as qryAlterTable.


  10. On the Query tab, double-click qryAlterTable to run it.


  11. Open the table, tblCat, in Datasheet view, and enter a couple of new records.


Note that the first new record is numbered 10 and the next is 14.


MORE INFORMATION

Steps to Reproduce Behavior

  1. Create a new Microsoft Access database.


  2. On the Insert menu, click Module.


  3. On the Tools menu, click References.


  4. Click to select (check) the Microsoft ActiveX Data Objects 2.1 Library check box and the Microsoft ADO Ext. 2.1 for DDL and Security check box. Click OK.


  5. Type the following procedure:


  6. 
    Sub Set_IDENTITY_Properties()
    
       'Connects to native Jet 4.0 OLE-DB Provider (MSJETOR40.dll)
       Dim strConn As String
       Dim adoConn As ADODB.Connection
       Dim adoCmd As ADODB.Command
       Dim adoTbl As New ADOX.Table
    
       'Use the ADO connection to the database that's already in place
       Set adoConn = CurrentProject.Connection
       Set adoCmd = New ADODB.Command
    
       'Use a Command Object to issue an SQL statement
       With adoCmd
          .ActiveConnection = adoConn
          .CommandType = adCmdText
          .CommandText = "CREATE TABLE New_tblEmployees(EmpID " _
             & "IDENTITY(10,5),EmpName CHAR)"
          .Execute
    
          'Insert records into the table just created.
          .CommandText = "INSERT INTO New_tblEmployees (EmpName) " _
             & "SELECT 'Kevin' AS Expr1;"
          .Execute
          .CommandText = "INSERT INTO New_tblEmployees (EmpName) " _
             & "SELECT 'Russ' AS Expr1;"
          .Execute
       End With
    
    End Sub 
  7. On the Run menu, click Run Sub/UserForm.


  8. Open the New_tblEmployees table and add two new records. Note that the EmpID increments by five.


  9. On the File menu, click Close.


  10. Click the New_tblEmployees table. On the File menu, click Save as. Keep the default values and click OK.


  11. Open the Copy of New_tblEmployees table, and then add two new records. Note that the EmpID now increments by one.

    NOTE: If you copy just the structure, the seed value is also reset to one


Additional query words: prb


Keywords          : kbdta 
Version           : WINDOWS:2000
Platform          : WINDOWS 
Issue type        : kbprb 

Last Reviewed: May 13, 1999