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

Problema ejecutando un PROCEDURE

Estas en el tema de Problema ejecutando un PROCEDURE en el foro de ASP Clásico en Foros del Web. Hola, estoy haciendo un microsistema que me ayude a hacer modificaciones de sueldos a los empleados. Ya existe originalmente un procedimiento para hacer dicho cambio ...
  #1 (permalink)  
Antiguo 09/10/2008, 12:56
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Problema ejecutando un PROCEDURE

Hola, estoy haciendo un microsistema que me ayude a hacer modificaciones de sueldos a los empleados. Ya existe originalmente un procedimiento para hacer dicho cambio y yo solo necesito enviarle un monton de paràmetros.
A la hora de invocar dicho procedimiento me causa este error:

Cita:
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'

La operación de múltiples pasos de OLE DB generó errores. Compruebe los valores de estado de OLE DB si es posible. No se realizó ningún trabajo.

/MassiveTrance/procesar.asp, línea 81
Ya revisè y revisè, me la he pasado en google como 3 días y no encuentro, pongo el codigo para ver si alguna buena alma caritativa puede ayudarme:


Código:
<%@ Language=VBScript %>
<!--#include file="Include/connect.asp" -->
<%
response.flush

random = Request.Form("random")
sueldonuevo = Request.Form("sueldo")
VALor= Request.Form("QUERY") 'este es un query, o select de una consulta donde le voy a cambiar el salario

Set rsVALor = Server.CreateObject("ADODB.Recordset")
rsVALor.Open VALor, connEmind, adOpenStatic, adLockReadOnly
Set comando = Server.CreateObject("ADODB.Command")
							

With comando

	  .ActiveConnection = connEmind
	  .CommandText = "M4PR_HACER_MS_ST"
		.CommandType = adCmdStoredProc
		
.Parameters.Append .CreateParameter ("@VPRIMERATABLA", adNumeric, adParamInput, , Request.Form("random"))
				
.Parameters.Append .CreateParameter ("@VID_SOCIEDAD", 	adVarchar, adParamInput, 2, rsVALor.Fields("ID_SOCIEDAD"))

.Parameters.Append .CreateParameter ("@VID_ID_EMPLEADO",adVarchar, adParamInput, 10, rsVALor.Fields("ID_Empleado"))

.Parameters.Append .CreateParameter ("@VFEC_ALTA_ANTERIOR", 	adDate, adParamInput, , rsVALor.Fields("FEC_ALTA_EMPLEADO"))

.Parameters.Append .CreateParameter ("@VFEC_ALTA_NUEVA",adDate, adParamInput, , Date())
				
.Parameters.Append .CreateParameter ("@VFEC_ANTIGUEDAD", adDate, adParamInput, , rsVALor.Fields("FEC_ANTIGUEDAD"))

.Parameters.Append .CreateParameter ("@VID_ESTADO_NOMINA",adVarchar, adParamInput,10, rsVALor.Fields("ID_ESTADO_NOMINA"))
				
.Parameters.Append .CreateParameter ("@VID_ESTADO_PLANTILLA", adVarchar, adParamInput, 4, rsVALor.Fields("ID_ESTADO_PLANTILLA"))

.Parameters.Append .CreateParameter ("@VID_CABECERA_IMSS",adVarchar, adParamInput,10, rsVALor.Fields("ID_CABECERA_IMSS"))
			  
.Parameters.Append .CreateParameter ("@VID_CATEGORIA",adVarchar, adParamInput, 4, rsVALor.Fields("ID_CATEGORIA"))

.Parameters.Append .CreateParameter ("@VID_CENTRO_COSTO",adVarchar, adParamInput, 4, rsVALor.Fields("ID_CENTRO_COSTO"))
				
.Parameters.Append .CreateParameter ("@VID_CENTRO_TRABAJO", adVarchar, adParamInput, 10, rsVALor.Fields("ID_CENTRO_TRABAJO"))
			 
 .Parameters.Append .CreateParameter ("@VID_CONTRATO_INTERNO",adVarchar, adParamInput, 2, rsVALor.Fields("ID_CONTRATO_INTERNO"))

 .Parameters.Append .CreateParameter ("@VFEC_INICIO_CONTRATO",	adDate, adParamInput, , rsVALor.Fields("FEC_INICIO_CONTRATO"))
			  
.Parameters.Append .CreateParameter ("@VFEC_FIN_CONTRATO",
adDate, adParamInput, , rsVALor.Fields("FEC_FIN_CONTRATO"))
				
.Parameters.Append .CreateParameter ("@VFEC_FIN_PERIODO_PRUEBA",adDate, adParamInput, , rsVALor.Fields("FEC_FIN_PERIODO_PRUEBA"))
		  	
.Parameters.Append .CreateParameter ("@VID_CONVENIO",	adVarchar, adParamInput, 4, rsVALor.Fields("ID_CONVENIO"))
			 	
.Parameters.Append .CreateParameter ("@VID_DEPARTAMENTO",adVarchar, adParamInput,10, rsVALor.Fields("ID_DEPARTAMENTO"))
				
.Parameters.Append .CreateParameter ("@VID_EMPRESA", adVarchar, adParamInput,10, rsVALor.Fields("ID_EMPRESA"))
				
.Parameters.Append .CreateParameter ("@VID_GRUPO_SALARIO",adVarchar, adParamInput, 1, rsVALor.Fields("ID_GRUPO_SALARIO"))
			
 .Parameters.Append .CreateParameter ("@VID_PUESTO", adVarchar, adParamInput,10, rsVALor.Fields("ID_PUESTO"))
				
.Parameters.Append .CreateParameter ("@VBRUTO_ANUAL", adNumeric, adParamInput,  , rsVALor.Fields("BRUTO_ANUAL"))	
		
.Parameters.Append .CreateParameter("@VID_AGRUPACION_SEGURIDAD", adVarchar, adParamInput,10, rsVALor.Fields("ID_AGRUPACION_SEGURIDAD"))
			 	
.Parameters.Append .CreateParameter ("@VNIVEL_SEGURIDAD", adNumeric, adParamInput,  , rsVALor.Fields("BRUTO_ANUAL"))
				
.Parameters.Append .CreateParameter ("@VID_TIPO_AJUSTE",  adVarchar, adParamInput, 1, rsVALor.Fields("ID_TIPO_AJUSTE"))
			 	
.Parameters.Append .CreateParameter ("@VID_TIPO_SALARIO", adVarchar, adParamInput, 1, rsVALor.Fields("ID_TIPO_SALARIO"))
				
.Parameters.Append .CreateParameter ("@VID_UNIDAD", adVarchar, adParamInput,10, rsVALor.Fields("ID_UNIDAD"))		
				
.Parameters.Append .CreateParameter ("@VID_TURNO", adVarchar, adParamInput, 2, rsVALor.Fields("ID_TURNO"))
				
.Parameters.Append .CreateParameter ("@VID_TIPO_JORNADA",adVarchar, adParamInput, 1, rsVALor.Fields("ID_TIPO_JORNADA"))
			 	
.Parameters.Append .CreateParameter ("@VID_TIPO_TRABAJADOR", 	adVarchar, adParamInput, 1, rsVALor.Fields("ID_TIPO_TRABAJADOR"))
				
.Parameters.Append .CreateParameter ("@VSALARIO", adNumeric, adParamInput, , rsVALor.Fields("SUELDO"))		
				
.Parameters.Append .CreateParameter ("@VEMAIL", adVarchar, adParamInput,50, rsVALor.Fields("DIRECCION_MAIL"))		

.Execute("exec M4PR_HACER_MS_ST") 'ESTA ES LA LINEA 81

'.Execute ' OTRA PRUEBA
'Set rsVALor= Execute("exec sp_emp") 'AQUI HIZE PRUEBAS

end With
comando= Nothing

%>
Nota: este es mi ARCHIVO DE CONEXION


Código:
<%

'***CONEXION CON LA BASE DE DATOS EMIND
Dim ConnectString, conn, ConnectStringEmind, connEmind
ConnectString =  "DRIVER=SQL Server;SERVER=192.168.XXX.XX;UID=sa;DATABASE=emind_altaira;Address=192.168.167.XXXX,XXXX;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.CommandTimeout = 360
conn.ConnectionTimeout = 360
conn.open ConnectString, "USUARIO", "PASSWORD"

ConnectStringEmind =  "DRIVER=SQL Server;SERVER=192.SSS.SSS.SS;UID=sa;DATABASE=emind_altaira;Address=192.168.SSS.SSS,SSS;"
Set connEmind = Server.CreateObject("ADODB.Connection")
connEmind.CommandTimeout = 360
connEmind.ConnectionTimeout = 360
connEmind.open ConnectStringEmind, "USR2", "PWD"

session.Timeout = 120

%>
AYUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  #2 (permalink)  
Antiguo 09/10/2008, 14:53
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Problema ejecutando un PROCEDURE

mmmmmm, a ver, veamos ....

hay varias diferencias entre lo que tienes y lo que tradicionalmente yo utilizo no se si se pueda como tu lo haces pero quizá ahí esta el problema; primero, estas usando un objeto command y estas definiendo parámetros al objeto, entonces creo solo debes llamar el método .Execute. Segundo, yo siempre les defino longitud a los parámetros aunque sean numéricos

Por lo demás, ese error puede ser por cualquier cosa: Hay valores asignados que no son válidos conforme con los parámetros que has definido; los tipos de datos de los parámetros no son igual que los del SP; traes un nulo, etc.

Si te pones a debuguear, es decir, a ver los tipos de dato de los parámetros, a ver los valores que recibes y que asignas y haces pruebas en el diseñador de consultas de la BD que uses, estoy seguro que en mucho menos de 3 días sacas el problema

Saludos
  #3 (permalink)  
Antiguo 10/10/2008, 14:03
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema ejecutando un PROCEDURE

ya debuguiè, desde el analizador de consultas le paso los parametros que se supone le pasa, y si corre bien el procedimiento
tal ves, como dijiste, las "diferencias" de como "lo hacemos" tiene que ver
podrìas indicarme cual es la forma en que tu lo haces?
si? porfavooor
  #4 (permalink)  
Antiguo 10/10/2008, 14:48
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Respuesta: Problema ejecutando un PROCEDURE

Ok, las diferencias son las que ya te puse:

Cita:
primero, estas usando un objeto command y estas definiendo parámetros al objeto, entonces creo solo debes llamar el método .Execute. Segundo, yo siempre les defino longitud a los parámetros aunque sean numéricos
Cuando dices que ya debugueaste, ¿imprimiste en la página todos y cada unos de los campos de del recordSet rsValor, así como el parámetro Request.Form("random") ?, ¿ya comprobaste que la consulta Request.Form("QUERY") te regresa valores?
  #5 (permalink)  
Antiguo 13/10/2008, 10:22
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema ejecutando un PROCEDURE

Cita:
Iniciado por Myakire Ver Mensaje
Ok, las diferencias son las que ya te puse:



Cuando dices que ya debugueaste, ¿imprimiste en la página todos y cada unos de los campos de del recordSet rsValor, así como el parámetro Request.Form("random") ?, ¿ya comprobaste que la consulta Request.Form("QUERY") te regresa valores?
siii ya hize esoo
veo todos los valorcitos sin problemas

Cita:
este debería ser el select Request.Form(QUERY): SELECT ID_SOCIEDAD, FEC_ALTA_EMPLEADO, FEC_ANTIGUEDAD, ID_ESTADO_NOMINA, ID_CENTRO_TRABAJO AS FINCA, ISNULL(ID_ESTADO_PLANTILLA, '') AS ID_ESTADO_PLANTILLA, ISNULL(ID_CABECERA_IMSS, '') AS ID_CABECERA_IMSS, ISNULL(ID_CATEGORIA, '' ) AS ID_CATEGORIA,ISNULL(ID_CENTRO_COSTO,'')AS ID_CENTRO_COSTO, ISNULL(ID_CENTRO_TRABAJO, '') AS ID_CENTRO_TRABAJO, ISNULL(ID_CONTRATO_INTERNO,'')AS ID_CONTRATO_INTERNO, FEC_INICIO_CONTRATO, ID_EMPLEADO, ISNULL(FEC_FIN_CONTRATO, '01-01-2099') AS FEC_FIN_CONTRATO, ISNULL(FEC_FIN_PERIODO_PRUEBA,'01-01-2099')AS FEC_FIN_PERIODO_PRUEBA, ISNULL(ID_CONVENIO, '') AS ID_CONVENIO, ISNULL(ID_DEPARTAMENTO, '') AS ID_DEPARTAMENTO, ISNULL(ID_EMPRESA, '') AS ID_EMPRESA, ISNULL(ID_GRUPO_SALARIO, '') AS ID_GRUPO_SALARIO, ISNULL(ID_PUESTO, '') AS ID_PUESTO, ISNULL(BRUTO_ANUAL, 0) AS BRUTO_ANUAL, ISNULL(ID_AGRUPACION_SEGURIDAD,'') AS ID_AGRUPACION_SEGURIDAD, NOMBRE AS NOMBRE, ISNULL(NIVEL_SEGURIDAD,0) AS NIVEL_SEGURIDAD, ISNULL(ID_TIPO_AJUSTE,'') AS ID_TIPO_AJUSTE, ISNULL(ID_TIPO_SALARIO,'') AS ID_TIPO_SALARIO, ISNULL(ID_UNIDAD, '') AS ID_UNIDAD, ISNULL(ID_TURNO, '') AS ID_TURNO, ISNULL(ID_TIPO_JORNADA, '') AS ID_TIPO_JORNADA, ISNULL(ID_TIPO_TRABAJADOR, '') AS ID_TIPO_TRABAJADOR, ISNULL(DIRECCION_MAIL, '') AS DIRECCION_MAIL, CAST(SUELDO AS INT) AS SUELDO FROM SUELDO_MASIVO where dbo.SUELDO_MASIVO.ID_CENTRO_TRABAJO = 'GDL' ORDER BY NOMBRE


Esta es la variable sueldonuevo: -->Request.Form(sueldo)747.04, 215.04, 290.08, 1051.68, 519.68, 4982.88, 215.04, 564.48, 332.64, 1911.84, 1041.6, 641.76, 241.92, 257.6, 627.2, 484.96, 1158.08, 372.96, 226.24, 1200.64, 672, 853.44, 1214.08, 197.12, 459.2, 303.52, 1038.24, 372.96, 407.68, 855.68, 468.16, 2745.12, 1156.96, 806.4, 501.76, 1232, 747.04, 844.48, 641.76, 2077.6, 1078.56, 428.96, 1099.84, 1120, 336, 488.32, 504, 791.84, 323.68, 332.64, 1145.76, 980, 1467.2, 219.52, 180.32, 136.64, 1234.24, 1008, 749.28, 254.24, 184.8, 477.12, 184.8, 1109.92, 323.68, 310.24, 310.24, 932.96, 4114.88, 484.96, 280, 745.92, 322.56, 324.8, 403.2, 497.28, 2800, 411.04, 448, 296.8, 1156.96, 641.76, 2004.8, 1268.96, 630.56, 459.2, 272.16, 1214.08, 892.64, 374.08, 864.64, 715.68, 560, 129.92, 831.04, 837.76, 2985.92, 207.2, 583.52, 247.52, 2419.2, 213.92, 641.76, 484.96, 624.96, 409.92, 324.8, 237.44, 184.8, 3097.92, 327.04, 332.64, 431.2, 881.44, 206.08, 1680, 784, 1096.48, 196, 344.96, 144.48, 2844.8, 2959.04, 500.64, 1215.2, 188.16, 837.76, 1049.44, 581.28

Esta es la variable sueldo indiv: Request.Form(s)-->
este debería ser random : Request.Form(random)11
Esta es la variable MES: -->(nxstday) 13
Esta es la variable MES: -->Request.Form(nxstmonth) 10
Esta es la variable AÑO: -->Request.Form(nxstyear)2008
Esta es la variable opcion: -->Request.Form(op)MAS
Esta es la variable de FINCA: -->Request.Form(Finca)GDL
Esta es la variable porcentaje: -->Request.Form(porcentaje)12
Esta es la variable de EMPLEADO: -->Request.Form(ID_EMPLEADO)
Esta es la variable nuevo salario: -->Request.Form(nuevo)
Esta es la variable usuario: -->Request.Form(usr)ALL
y aqui se muestra cada 1 de los valores de una consulta del query
Cita:
VID_SOCIEDAD = 01
v1=747.04
VID_ID_EMPLEADO = 28548
VFEC_ALTA_ANTERIOR = 10/10/2008
VFEC_ALTA_NUEVA = 13/10/2008
VFEC_ANTIGUEDAD = 09/06/2008
VID_ESTADO_NOMINA = AL
VID_ESTADO_PLANTILLA = F
VID_CABECERA_IMSS = 01
VID_CATEGORIA = 5
VID_CENTRO_COSTO = 05
VID_CENTRO_TRABAJO = GDL
VID_CONTRATO_INTERNO = 01
VFEC_INICIO_CONTRATO = 10/06/2008
VFEC_FIN_CONTRATO = 01/01/2099
VFEC_FIN_PERIODO_PRUEBA=01/01/2099
VID_CONVENIO = 01
VID_DEPARTAMENTO = 54
VID_EMPRESA = 01
VID_GRUPO_SALARIO = 1
VID_PUESTO = GS9100
VBRUTO_ANUAL = 18500100
VID_AGRUPACION_SEGURIDAD =
VNIVEL_SEGURIDAD = 0
VID_TIPO_AJUSTE = 0
VID_TIPO_SALARIO = 3
VID_UNIDAD = 1
VID_TURNO = NR
VID_TIPO_JORNADA = 0
VID_TIPO_TRABAJADOR = 1
VSALARIO = 667
VEMAIL =
  #6 (permalink)  
Antiguo 24/10/2008, 11:21
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Problema ejecutando un PROCEDURE

ah, solo querìa decirles que solucioné el problema de la siguiente forma:

en una cadena fuì armando la cadena a ejecutar, algo asi:

Cita:
proce = " EXECUTE dbo.M4PR_HACER_MS_ST '"+Request.Form("random")+"', '"+rsVALor.Fields("ID_SOCIEDAD")+"', '"+rsVALor.Fields("ID_Empleado")+"', '"+CStr(rsVALor.Fields("FEC_ALTA_EMPLEADO"))+"' , '"+Request.Form("nxstday")+"/"+Request.Form("nxstmonth")+"/"+Request.Form("nxstyear")+"', '" +CStr(rsVALor.Fields("FEC_ANTIGUEDAD"))+"', '"+"MS"+"', '"+rsVALor.Fields("ID_ESTADO_PLANTILLA")+"', '"+rsVALor.Fields("ID_CABECERA_IMSS")+"', '"+rsVALor.Fields("ID_CATEGORIA")+"', '"+rsVALor.Fields("ID_CENTRO_COSTO")+"', '"+rsVALor.Fields("Finca")+"', '"+rsVALor.Fields("ID_CONTRATO_INTERNO")+"', '"+Request.Form("nxstday")+"/"+Request.Form("nxstmonth")+"/"+Request.Form("nxstyear")+"', '"+CStr(rsVALor.Fields("FEC_FIN_CONTRATO"))+"', '"+CStr(rsVALor.Fields("FEC_FIN_PERIODO_PRUEBA"))+ "', '"+rsVALor.Fields("ID_CONVENIO")+" ', '"+rsVALor.Fields("ID_DEPARTAMENTO")+"', '"+rsVALor.Fields("ID_EMPRESA")+"', '"+rsVALor.Fields("ID_GRUPO_SALARIO")+"', '"+rsVALor.Fields("ID_PUESTO")+"', '"+CStr(rsVALor.Fields("BRUTO_ANUAL"))+"', '"+rsVALor.Fields("ID_AGRUPACION_SEGURIDAD")+"' , '"+CStr(rsVALor.Fields("NIVEL_SEGURIDAD"))+"', '"+rsVALor.Fields("ID_TIPO_AJUSTE")+"', '"+rsVALor.Fields("ID_TIPO_SALARIO")+"', '1', '"+rsVALor.Fields("ID_TURNO")+"', '"+rsVALor.Fields("ID_TIPO_JORNADA")+"', '"+rsVALor.Fields("ID_TIPO_TRABAJADOR")+"', '"+CStr((rsVALor.Fields("SUELDO") * (Request.Form("a1")/100))+rsVALor.Fields("SUELDO"))+"', '"+rsVALor.Fields("DIRECCION_MAIL")+"'"
y despues lo mando a ejecutar asi:
Cita:
connEmind.Execute(proce)
Gracias, por si alguien tiene la misma incognita que tuve yo, pues ahi està 1 solucion
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 23:06.