Hola Carlos

La que sigue es tu pregunta original:

Estimado grupo: ¿Se puede generar un campo ID desde dentro de un SP en
> una DBC? La idea es no usar un campo autoincremental sino uno que se
> genere en base a una formula. Pero en vez de que se genere por codigo
> que se agregue automaticamente al insertar un registro (como con el
> autoincremental) y pense en un SP, pero al querer grabar el campo me
> dice que no se puede actualizar el cursor. ¿Alguna idea?
> Muchas gracias.

Independientemente de si el valor ID lo generás desde un stored procedure, o 
desde algún prg, tu problema no es el de la generación de dicho valor, sino el 
de la grabación.

Mi pregunta es entonces, ¿cómo generaste el cursor? y ¿qué backend tenés?

El cursor puede generarse con una vista actualizable o con un cursor adapter, 
también actualizable. El campo ID debería tener como valor por defecto una 
función, que puede estar tanto en un stored procedure dentro de la BD en VFP, 
como en un prg. En ambos casos funciona igual. Yo hacía esto para generar 
valores numéricos con una función llamada NEWID, que podía poner tanto en un 
prg (newid.prg) como en un stored procedure dentro de la base de datos de VFP, 
cuando usaba VFP 7. Al surgir los campos autoincrementales desde VFP 8, eso no 
hizo más falta, pero es harina de otro costal. Tu propuesta de usar un unique 
identifier tiene el mismo efecto, aunque tu función es mucho más complicada que 
la que yo usaba para generar números únicos, pero sigue siendo harina de otro 
costal. Y si estás usando SQL Server, podés generar dicho valor desde el VFP y 
luego insertarlo con SQLExec o en un stored procedure, o incluso una función, 
dentro del mismo SQLServer.

El tema es entonces determinar por qué razón no se puede grabar tu cursor. Yo 
me fijaría en los valores que van teniendo los campos que estás modificando, a 
ver si son del mismo tipo (a veces uno la pifia y en lugar de mandar un valor 
determinado manda un valor nulo, o en lugar de una cadena le pasás un valor 
numérico, etc.)

Usá aerror, y combinalo con un set step on, para ir viendo cómo se llenan los 
campos del cursor (con qué valores y sus tipos), antes de la grabación.

Rafael Copquin

Responder a