Procedimiento almacenado MSDE SQL y vfp 8

06/10/2005 - 17:39 por Hector Kuhn | Informe spam
Estoy intentando obtener un valor de un procedimiento almacenado, que
deberia devolver un numero entero, el problema que se me presenta es el
error que me arroja al ejecutar el comando execute

Las instrucciones en Vfp 8 son las siguientes
la coneccion es ADO y uso cursoradapter

FUNCTION AGREGAR

local lccmd

retvalor = 0

lccmd = "EXEC nuevoid '"+ALLTRIM(UPPER(this.calias))+"', @retvalor OUTPUT"

&& lcmd queda = "EXEC nuevoid 'PRODUCTO', @retvalor OUTPUT"

oCa = thisform.obtenercursor(this.calias)
Oconection = oca.datasource.activeconnection
oconection.execute("&lccmd") * se produce el error

append blank in (this.cAlias)
if retvalor<>0
repl id with retvalor in (this.calias)
endif

* texto del error

"Código de excepción OLE IDispatch 0 de Microsoft OLE DB Provider for SQL
Server: Debe declarar la variable '@retvalor'.


El procedimiento almacenado en MSDE es el siguiente
La ejecucion del procedimiento a travez del producto emans o visual studio
devuelve el valor correctamente

ALTER PROCEDURE dbo.NuevoId

@NameTable varchar(20),
@RetValor int Output

/*
(
@parameter1 datatype = default value,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */

SELECT Name FROM SysObjects WHERE Name='KEYS' AND Type='U'

IF @@ROWCOUNT < 1
CREATE TABLE Keys ( TableName Char(20), LastKeyVal Integer )

SELECT LastKeyVal FROM Keys WHERE TableName=@NameTable

IF @@ROWCOUNT < 1
INSERT INTO Keys VALUES (@NameTable, 0 )

UPDATE Keys
SET @RetValor = LastkeyVal = LasTkeyVal + 1 WHERE
TableName=@NameTable

RETURN
 

Leer las respuestas

#1 Hector Kuhn
06/10/2005 - 23:18 | Informe spam
Logre hacer andar la funcion de la siguiente manera, por si a alguien le
sirve generar un autoincremental.

Agrego un objeto command al genera la conexion

loConnDataSource = createobject('ADODB.Connection')
loConnDataSource.ConnectionString = LcCsPublico
loConnDataSource.CommandTimeout = 60
loConnDataSource.ConnectionTimeout = 30
loConnDataSource.Open()

Ocmd = CREATEOBJECT('ADODB.Command')
Ocmd.ActiveConnection = loConnDataSource

FUNCTION AGREGAR

Oca = Ocmd
Oca.commandtext = "NUEVOID" && nombre del procedimiento almacenado
Oca.commandtype = 4
loparam1 = oca.createparameter()
loparam1.name = "Nametable"
loparam1.type = 200 && tipo de variable char
loparam1.direction = 1 && entrada
loparam1.value = this.calias
loparam1.size = 20
Oca.parameters.append(loparam1)

loparam2 = oca.createparameter()
loparam2.name = "Retvalor"
loparam2.type = 3
loparam2.direction = 2 && salida
loparam2.value = 0
loparam2.size = 4
Oca.parameters.append(loparam2)

Oca.execute()

INSERT INTO (this.calias) (id) VALUES (loparam2.value)


"Hector Kuhn" escribió en el mensaje
news:%23$

Estoy intentando obtener un valor de un procedimiento almacenado, que
deberia devolver un numero entero, el problema que se me presenta es el
error que me arroja al ejecutar el comando execute

Las instrucciones en Vfp 8 son las siguientes
la coneccion es ADO y uso cursoradapter

FUNCTION AGREGAR

local lccmd

retvalor = 0

lccmd = "EXEC nuevoid '"+ALLTRIM(UPPER(this.calias))+"', @retvalor OUTPUT"

&& lcmd queda = "EXEC nuevoid 'PRODUCTO', @retvalor OUTPUT"

oCa = thisform.obtenercursor(this.calias)
Oconection = oca.datasource.activeconnection
oconection.execute("&lccmd") * se produce el error

append blank in (this.cAlias)
if retvalor<>0
repl id with retvalor in (this.calias)
endif

* texto del error

"Código de excepción OLE IDispatch 0 de Microsoft OLE DB Provider for SQL
Server: Debe declarar la variable '@retvalor'.


El procedimiento almacenado en MSDE es el siguiente
La ejecucion del procedimiento a travez del producto emans o visual studio
devuelve el valor correctamente

ALTER PROCEDURE dbo.NuevoId

@NameTable varchar(20),
@RetValor int Output

/*
(
@parameter1 datatype = default value,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */

SELECT Name FROM SysObjects WHERE Name='KEYS' AND Type='U'

IF @@ROWCOUNT < 1
CREATE TABLE Keys ( TableName Char(20), LastKeyVal Integer )

SELECT LastKeyVal FROM Keys WHERE TableName=@NameTable

IF @@ROWCOUNT < 1
INSERT INTO Keys VALUES (@NameTable, 0 )

UPDATE Keys
SET @RetValor = LastkeyVal = LasTkeyVal + 1 WHERE
TableName=@NameTable

RETURN


Preguntas similares