Foros del Web » Programando para Internet » ASP Clásico »

duda con Procedimiento Almacenado

Estas en el tema de duda con Procedimiento Almacenado en el foro de ASP Clásico en Foros del Web. Hola tengo el siguiente problema en un p´rocedimiento alamacenado. Código: CREATE PROCEDURE departamento ( @cod_departamento INT , @nombre Char(50), @descripcion Char(50), @id_departamento INT OUTPUT ) ...
  #1 (permalink)  
Antiguo 08/10/2004, 11:17
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 24 años
Puntos: 2
duda con Procedimiento Almacenado

Hola
tengo el siguiente problema
en un p´rocedimiento alamacenado.

Código:
CREATE PROCEDURE departamento
(
@cod_departamento INT  ,
@nombre Char(50),
@descripcion Char(50),
@id_departamento INT OUTPUT
)
AS

etc, etc, etc,

END
GO
cuando llamo el PA asi

Código:
Set CoComando = Server.CreateObject("ADODB.Command")
CoComando.ActiveConnection = oConn
CoComando.CommandText = "departamento"
CoComando.CommandType = 4 'Procedimiento Almacenado
CoComando.Parameters.Append
CoComando.CreateParameter("@cod_departamento",3,4,4)
CoComando.Parameters.Append
CoComando.CreateParameter("@nombre",200,1,100,"Numero")
CoComando.Execute
Id = CoComando.Parameters.Item("@id_departamento").Value
me aparece el siguiente error

[Microsoft][ODBC SQL Server Driver][SQL Server]Error converting data type
varchar to int.


he probado de todo y no puedo echarlo andar.

esta es la linea del error

CoComando.CreateParameter("@nombre",200,1,100,"Num ero")

saludos.
  #2 (permalink)  
Antiguo 08/10/2004, 11:30
Avatar de juanmi321  
Fecha de Ingreso: septiembre-2004
Mensajes: 262
Antigüedad: 20 años, 8 meses
Puntos: 1
fIJATE EN LOS TIPOS DE DATOS
__________________
<>< EN MOMENTOS DE CRISIS, SOLO LA IMAGINACIÓN ES MÁS IMPORTANTE QUE EL CONOCIMIENTO <><
  #3 (permalink)  
Antiguo 12/10/2004, 06:28
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 24 años
Puntos: 2
me he fijado en los tipos y nada aun
yo creo que el problema va en los parametros que le doy al CreateParameter.
Donde veo la sintaxis y valores de los parametros de esta funcion?

Saludos
  #4 (permalink)  
Antiguo 12/10/2004, 08:32
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 22 años
Puntos: 5
disculpen, pero me pueden explicar para que es el procedimiento almacenado??? se ve interesante.... algo rapidito nadamas
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #5 (permalink)  
Antiguo 13/10/2004, 09:41
 
Fecha de Ingreso: octubre-2004
Ubicación: Cuba
Mensajes: 21
Antigüedad: 20 años, 6 meses
Puntos: 0
posible solucion al problema

mira muchas veces los parametros de salida se ponen muy pesado, a continuacion te voy a dar otra salucion

usas lo del parametro de output para obtener el id de lo que entraste??
si es asi hay algo en sql que se llama @@identity, simplemente haces return @@itentity y el sp te devuelve el id de la ultima linea que insertaste.
como recojes eso desde asp?
var = nombreCommand.Parameters.Item("@RETURN_VALUE").Val ue

si no quieres usar esta alternativa, mira bien los tipos de datos
Espero que te sirva.
S.
OMbao
  #6 (permalink)  
Antiguo 14/10/2004, 05:53
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 24 años
Puntos: 2
ufff, cambie el procedimiento almacenado y lo deje bien basico.
Mejor empezar desde lo mas minimo

Ahora me arroja otro error.

Código:
Object required: 'oCommand'
el codigo es el siguiente.

Saludos

Código:
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "driver={SQL Server};server=xxxxx; database=xxxxx ; uid=xxxxxx;pwd=xxxxx"
Set RS = Server.CreateObject("ADODB.RecordSet")
Var_01="test"

    Set oCommand.ActiveConnection = objConn
    oCommand.CommandType = adCmdStoredProc
    oCommand.CommandText = "departamento"
    Set oPrm = oCommand.CreateParameter("nombre", advarchar, adParamInput, , Var_01)
    oCommand.Parameters.Append oPrm

    Set oPrm = oCommand.CreateParameter("descripcion", advarchar, adParamInput, , Var_01)
    oCommand.Parameters.Append oPrm
    Set VPuertosHechos = oCommand.Execute
Saludos y gracias.....
  #7 (permalink)  
Antiguo 14/10/2004, 06:34
 
Fecha de Ingreso: octubre-2004
Ubicación: Cuba
Mensajes: 21
Antigüedad: 20 años, 6 meses
Puntos: 0
prueba con este codigo

strConection = "str de coneccion a la BD"
set cmdInsertOpinion = Server.CreateObject("ADODB.Command")
cmdInsertOpinion.ActiveConnection = strConection
cmdInsertOpinion.CommandText = "dbo.dOpinionesInsProc"
cmdInsertOpinion.CommandType = 4
cmdInsertOpinion.CommandTimeout = 0
cmdInsertOpinion.Prepared = true
cmdInsertOpinion.Parameters.Append cmdInsertOpinion.CreateParameter("@RETURN_VALUE", 3, 4)
cmdInsertOpinion.Parameters.Append cmdInsertOpinion.CreateParameter("@predesor", 3, 1,4,variable)
cmdInsertOpinion.Parameters.Append cmdInsertOpinion.CreateParameter("@texto", 200, 1,2000,variable)
cmdInsertOpinion.Parameters.Append cmdInsertOpinion.CreateParameter("@IpPC", 200, 1,16,variable)
cmdInsertOpinion.Parameters.Append cmdInsertOpinion.CreateParameter("@login", 200, 1,15,variable)
cmdInsertOpinion.Execute()

id = cmdInsertOpinion.Parameters.Item("@RETURN_VALUE"). Value

este codigo esta probado, creo que lo que no puedes es crear ese RecordSet al final si eso no devuelve una coleccion de datos
S.
Ombao
  #8 (permalink)  
Antiguo 14/10/2004, 07:39
 
Fecha de Ingreso: marzo-2003
Ubicación: onde toy?
Mensajes: 1.437
Antigüedad: 22 años, 1 mes
Puntos: 9
Cita:
Iniciado por Saruman
disculpen, pero me pueden explicar para que es el procedimiento almacenado??? se ve interesante.... algo rapidito nadamas

Bueno, la finalidad de un procedimiento almacenado consiste en tener en el base de datos todas tus consultas o querys que realizas normalmente en una aplicación, por ejemplo; insertar clientes, traer las nominas, modificar una factura, etc...

Como crear un Store Procedure o SP, tienes varias formas, la primera es utilizar el Enterprise Manager del SQL Server, debes seleccionar la base de datos e ir a Procedimientos Almacenados o Store Procedure, con el botón del lado derecho le dices "Nuevo SP"... instantaneamente te abrirá una ventana que diría algo similar a esto:
Código:
CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS
Esto te indica la estructura que debes crear para el SP.

Ahora vamos a crear un SP que nos traiga la información de todos nuestros clientes ordenados por su Codigo (obviamente imaginate esto)
Código:
CREATE PROCEDURE TraerClientes
AS
   Select Codigo, Nombre 
   From Clientes (nolock) 
   Order By Codigo
Después desde algún programa lo único que debes hacer es ejecutar ese SP al igual que una consulta cualquiera y te retorna un conjunto de datos que los puedes tirar a un Recordset.. ejemplo:

Dim objRec As ADODB.Recordset
Set objRed = objCon.Execute("TraerClientes")

Como pasarle valores a un SP, es muy simple, ahora vamos a insertar un nuevo cliente, para eso vamos a pasar el valor del código y el nombre.
Código:
CREATE PROCEDURE AgregarCliente
   @Codigo  int,
   @Nombre varchar(100)
AS
   Insert Clientes (Codigo, Nombre)
   Values (@Codigo, @Nombre)
Con esto te agrega un cliente pero no retorna nada, para ejecutarlo solo deberías hacer esto:

Dim Sql As String
Sql = "AgregarCliente " & Codigo & ", '" & Nombre & "'"
objCon.Execute Sql

Para enviar parámetros, las variables donde las recibes deben estar con un "@" siempre.
__________________
Buena Vida...
Francisco
  #9 (permalink)  
Antiguo 14/10/2004, 07:50
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 24 años
Puntos: 2

q bruto q soy,
Funciono correctamente, pero al parecer el problema no estaba en el codigo, sino en los nombres del PA y la tabla.
Eran los mismos.
Cambie el del PA y listo.

Gracias a todos...

pd: existe un estandar para nombrar los procedimientos almacenados?
como el de los objetos en Visual Basic, (label1 ==> lblNombre)

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:20.