Error al ejecutar un SP por medio de ADO

23/07/2005 - 03:11 por Abraham Uribe | Informe spam
Hola ,

estoy desarrollando una aplicacion cliente servidor de 3 capas.

tengo un procedimiento almacenado el cual realiza un insert en una tabla
determinada, el sp recibe como parametros todos los campos de la tabla.

para enviarle los parametros al sp realizo lo siguiente, ejecuto una
consulta que me devuelve un recorset vacio el cual contiene todos los campos
de la tabla donde voy a actualizar, este recordset luego lo lleno con la
informacion que he capturado en unos texbox, y se lo paso como parametro a
el metodo descrito abajo
este metodo crea un objeto command, luego recorre cada campo del recordset y
e inserta en la coleccion parameter del command todos los campos del
recorset con sus respectivas propiedades(nombreprm, tipo, direccion..etc) ,
pero al momento de hacer el execute se presenta un error que dice error
1429 codigo de exepcion OLE.. valor de escala no valido.

Alguna idea de que puede ser

ah! estoy trabajando con sql server


-
Abraham

PARAMETERS tcNombreSp, toRs
LOCAL loComando, lnVrRetorno
lnVrRetorno = 0
*129 && adChar
*130 && adWChar
*200 && adVarChar
*201 && adLongVarChar
*202 && adVarWChar
TRY
IF THIS.Conectar() > 0
loComando = CREATEOBJECT("ADODB.COMMAND")
loComando.ActiveConnection = THIS.oConexion
loComando.CommandText = tcNombreSp
loComando.CommandType = "&H0004" && PROC ALMACENADO

FOR I = 0 TO toRs.FIELDS.COUNT -1
loParametro = 'prm' + toRs.FIELDS(I).NAME
lcNombrePrm = '@' + toRs.FIELDS(I).NAME
lcTipoPrm = toRs.FIELDS(I).TYPE
lcDireccionPrm = '&H0001' && ENTRADA
IF toRs.FIELDS(I).TYPE = 129 OR toRs.FIELDS(I).TYPE= 130 OR ;
toRs.FIELDS(I).TYPE= 200 OR toRs.FIELDS(I).TYPE= 201 OR;
toRs.FIELDS(I).TYPE= 202 OR toRs.FIELDS(I).TYPE= 203
lcTamanoPrm = toRs.FIELDS(I).DefinedSize
ELSE
lcTamanoPrm = 0
ENDIF
lcValorPrm = toRs.FIELDS(I).VALUE
IF lcTamanoPrm <> 0
&loParametro = loComando.CreateParameter(lcNombrePrm, lcTipoPrm,
lcDireccionPrm, lcTamanoPrm, lcValorPrm)
ELSE
&loParametro = loComando.CreateParameter(lcNombrePrm, lcTipoPrm,
lcDireccionPrm,, lcValorPrm)
ENDIF
loComando.PARAMETERS.APPEND(&loParametro)
ENDFOR

loComando.Execute()

ENDIF
THIS.inicializarerror
CATCH TO loError
lnVrRetorno = -1
THIS.Establecererror(loError)
FINALLY
ENDTRY
RETURN lnVrRetorno
 

Leer las respuestas

#1 Abraham Uribe
27/07/2005 - 16:41 | Informe spam
Gracias Darwin voy a revisarlo

"Darwin Quintero" escribió en el mensaje
news:
Revisa este enlace

http://fox.wikis.com/wc.dll?Wiki~CategoryADO

Darwin Quintero
Venezuela

"Abraham Uribe" <Abrauribearrobahotmailpuntocom> escribió en el mensaje
news:%23h%
Hola ,

estoy desarrollando una aplicacion cliente servidor de 3 capas.

tengo un procedimiento almacenado el cual realiza un insert en una tabla
determinada, el sp recibe como parametros todos los campos de la tabla.

para enviarle los parametros al sp realizo lo siguiente, ejecuto una
consulta que me devuelve un recorset vacio el cual contiene todos los
campos de la tabla donde voy a actualizar, este recordset luego lo lleno
con la informacion que he capturado en unos texbox, y se lo paso como
parametro a el metodo descrito abajo
este metodo crea un objeto command, luego recorre cada campo del
recordset y e inserta en la coleccion parameter del command todos los
campos del recorset con sus respectivas propiedades(nombreprm, tipo,
direccion..etc) , pero al momento de hacer el execute se presenta un
error que dice error 1429 codigo de exepcion OLE.. valor de escala
no valido.

Alguna idea de que puede ser

ah! estoy trabajando con sql server


-
Abraham

PARAMETERS tcNombreSp, toRs
LOCAL loComando, lnVrRetorno
lnVrRetorno = 0
*129 && adChar
*130 && adWChar
*200 && adVarChar
*201 && adLongVarChar
*202 && adVarWChar
TRY
IF THIS.Conectar() > 0
loComando = CREATEOBJECT("ADODB.COMMAND")
loComando.ActiveConnection = THIS.oConexion
loComando.CommandText = tcNombreSp
loComando.CommandType = "&H0004" && PROC ALMACENADO

FOR I = 0 TO toRs.FIELDS.COUNT -1
loParametro = 'prm' + toRs.FIELDS(I).NAME
lcNombrePrm = '@' + toRs.FIELDS(I).NAME
lcTipoPrm = toRs.FIELDS(I).TYPE
lcDireccionPrm = '&H0001' && ENTRADA
IF toRs.FIELDS(I).TYPE = 129 OR toRs.FIELDS(I).TYPE= 130 OR ;
toRs.FIELDS(I).TYPE= 200 OR toRs.FIELDS(I).TYPE= 201 OR;
toRs.FIELDS(I).TYPE= 202 OR toRs.FIELDS(I).TYPE= 203
lcTamanoPrm = toRs.FIELDS(I).DefinedSize
ELSE
lcTamanoPrm = 0
ENDIF
lcValorPrm = toRs.FIELDS(I).VALUE
IF lcTamanoPrm <> 0
&loParametro = loComando.CreateParameter(lcNombrePrm, lcTipoPrm,
lcDireccionPrm, lcTamanoPrm, lcValorPrm)
ELSE
&loParametro = loComando.CreateParameter(lcNombrePrm, lcTipoPrm,
lcDireccionPrm,, lcValorPrm)
ENDIF
loComando.PARAMETERS.APPEND(&loParametro)
ENDFOR

loComando.Execute()

ENDIF
THIS.inicializarerror
CATCH TO loError
lnVrRetorno = -1
THIS.Establecererror(loError)
FINALLY
ENDTRY
RETURN lnVrRetorno







Preguntas similares