Hola a todos:
Menos mal que Juan salio aclarando, porque la pregunta original no la hice yo 
(?).
Simplemente di una opción relativamente simple para generar un identificador 
único, que luego extendio otro participante (Mario?), con información adicional.
Saludos: Miguel


--- El mié 3-jun-09, Juan Rossano <[email protected]> escribió:

De: Juan Rossano <[email protected]>
Asunto: [GUFA] [spam]  ID en SP
Para: "GUFA List Member" <[email protected]>
Fecha: miércoles, 3 de junio de 2009, 12:05 pm

Si volvemos a la pregunta original se debe a que intentando grabar en un 
SP llamado como desencadenante para insercion me daba error de que el 
cursor no podia actualizarse. Asumia que ese SP que se llama 
automaticamente como desencadenante al insertar estaria parado en la 
tabla y el registro que se intenta agregar. Genere desencadentantes 
automaticamente con el asistente y despues analize el codigo y habia un 
replace, pero al intentarlo desde un SP propio me daba el error del 
cursor. Como en teoria se esta intentando agregar un registro no cambio 
el area ni el registro donde esta parado cuando llama al metodo que pongo 
en triggers desde la solapa tabla en el diseñador de tablas. Mi necesidad 
puntual alcanza con el metodo llamado desde nuevo valor, pero hice el 
planteo por un tema conceptual para otros posibles usos.
Saludos

Juan

-----Original Message-----
From: "Rafael Copquin" <[email protected]>
To: "GUFA List Member"  <[email protected]>
Date: Wed, 3 Jun 2009 09:11:01 -0300
Subject: [GUFA] [spam]  ID en SP

> 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





      Yahoo! Cocina
Recetas prácticas y comida saludable
http://ar.mujer.yahoo.com/cocina/

Responder a