LPARAMETERS pcTableName IF EMPTY( pcTableName ) RETURN .NULL. ELSE pcTableName = UPPER(ALLTRIM(pcTableName)) ENDIF LOCAL lcAlias, liNextId, lnOldBufferMode, lnCounter, lnRet lcAlias = ALIAS() IF NOT USED( "NextID" ) SELECT 0 USE Data\NextID ELSE SELECT NextID ENDIF lnOldBufferMode = CursorGetProp("BUFFERING","IntIds") * shut off buffering CursorSetProp("BUFFERING", 1,"IntIds") SET ORDER TO TableName SEEK pcTableName DO WHILE NOT FLOCK() AND lnCounter < 10000 lnCounter = lnCounter + 1 ENDDO IF NOT FLOCK() RETURN .NULL. ENDIF IF NOT FOUND() * Make a record APPEND BLANK REPLACE TableName WITH pcTableName, LastId WITH 1 lnRet = 1 UNLOCK ELSE * Use the record that is there lnRet = LastId + 1 REPLACE LastId WITH lnRet UNLOCK ENDIF IF NOT EMPTY( lcAlias ) SELECT ( lcAlias ) ELSE SELECT 0 ENDIF RETURN lnRet