FUNCTION NextID(tcAlias) LOCAL nSelect, nReprocess, nRetVa IF PCOUNT() < 1 *-- Nothing passed in, use current alias cAlias = ALLTRIM(UPPER(ALIAS())) ELSE cAlias = ALLTRIM(UPPER(m.tcAlias)) ENDIF nSelect = SELECT() nReprocess = SET('Reprocess') nRetVal = NULL *-- Lock until user presses Escape SET REPROCESS TO AUTOMATIC IF NOT USED('IDs') USE IDs IN 0 SHARED ENDIF SELECT IDs LOCATE FOR ALLTRIM(TableName) == m.cAlias IF NOT FOUND() *-- Row not found, add it now INSERT INTO IDs (tablename, nextid) VALUES(cAlias,0) ENDIF IF RLOCK() REPLACE nextid WITH nextid + 1 IN ids nRetVal = ids.nextid UNLOCK ENDIF SET REPROCESS TO nReprocess SELECT (nSelect) RETURN m.nRetValThe default value for the pk column of a database column would be NextID()