VFP6 no reconoce los campos autoincrementales, esta característica fue implementada en VFP8 (si la memoria no me falla :-D)
Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com
CREATE TABLE Ids ;
(cTabla C(30) NOT NULL, ;
nId I NOT NULL)
INDEX ON UPPER(cTabla) TAG cTabla
Por cada tabla que necesitemos llevar un número consecutivo, insertamos un registro con el nombre de la tabla e inicializamos el contador en 0 (cero):
INSERT INTO Ids (cTabla, nId) VALUES ("Facturas", 0)
INSERT INTO Ids (cTabla, nId) VALUES ("Albaranes", 0)
INSERT INTO Ids (cTabla, nId) VALUES ("Clientes", 0)
INSERT INTO Ids (cTabla, nId) VALUES ("Ciudades", 0)
*-------------------------------------------------------------------------------------------------------------------
La función que nos generará el nuevo numero consecutivo (NuevoId()), puede estar ubicada en un archivo de procedimientos de nuestra aplicación, o puede ser un procedimiento almacenado de nuestra base de datos. El código de la función es el siguiente:
FUNCTION NuevoID(tcAlias)
LOCAL lcAlias, lnId, lnAreaAnt, lcReprAnt
lnId = 0
lnAreaAnt = SELECT()
lcReprAnt = SET('REPROCESS')
SET REPROCESS TO AUTOMATIC
lcAlias = UPPER(ALLTRIM(tcAlias))
IF NOT USED("Ids")
USE Ids IN 0
ENDIF
SELECT Ids
IF SEEK(lcAlias, "Ids", "cTabla")
IF RLOCK()
REPLACE nId WITH nId + 1 IN Ids
lnID = Ids.nId
UNLOCK
ENDIF
ENDIF
SELECT (lnAreaAnt)
SET REPROCESS TO lcReprAnt
RETURN lnID
ENDFUNC
Cada vez que necesitemos un nuevo número consecutivo de una tabla, invocamos la función pasando el nombre de la tabla o su alias como parámetro:
lnNuevoId = NuevoId("Facturas")
El valor retornado por la función NuevoId() es del tipo Entero. Si por ejemplo el código de cliente de nuestra tabla Clientes es del tipo caracter de 4 y justificado con 0s (ceros) a la izquierda, transformamos el número retornado de la siguiente manera:
lcCodCli = TRANSFORM(NuevoId("Clientes"), "@L 9999")
hace un tiempo un amigo del grupo compartio este procedimiento haber si te sirve