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

Llamar a un procedimiento almacenado dentro de un bucle do while

Estas en el tema de Llamar a un procedimiento almacenado dentro de un bucle do while en el foro de ASP Clásico en Foros del Web. Buenas tardes, a ver si alguien puede echarme una mano. Tengo una aplicación que carga unos datos de un fichero excel. En concreto tiene cuatro ...
  #1 (permalink)  
Antiguo 12/05/2009, 09:18
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Llamar a un procedimiento almacenado dentro de un bucle do while

Buenas tardes,

a ver si alguien puede echarme una mano.
Tengo una aplicación que carga unos datos de un fichero excel. En concreto tiene cuatro registros que puedo mostrar por pantalla si las pinto con una tabla. El siguiente paso es llamar a una funcion que ejecuta un procedimiento almacenado desde dentro de un blucle do while, para que inserte todos los registros del fichero excel pero solo lo ejecuta una vez, es decir, solo inserta un registro en base de datos. Alguien me puede orientar? Es q no puedo meter un procedure dentro de un bucle?

Muchas gracias.

Código:
do while not rsExcel.EOF
					
	'IdServicio = trim(rsExcel(0)) 'Viene vacio
	Usuario = replace(trim(rsExcel(1)),"'","''")
	Fecha_Captado = replace(trim(rsExcel(2)),"'","''")
	Sol_Nip = replace(trim(rsExcel(3)),"'","''")
	Sol_email = replace(trim(rsExcel(4)),"'","''")
	Sol_Organization = replace(trim(rsExcel(5)),"'","''")
	Sol_Unit = replace(trim(rsExcel(6)),"'","''")
	Sol_CeCo = replace(trim(rsExcel(7)),"'","''")
	Sol_Refer = replace(trim(rsExcel(8)),"'","''")
	DR_Empresa = replace(trim(rsExcel(9)),"'","''")
	DR_Direccion = replace(trim(rsExcel(10)),"'","''")
	DR_Localidad = replace(trim(rsExcel(11)),"'","''")
	DR_Codigo_postal = replace(trim(rsExcel(12)),"'","''")
	DR_Provincia = replace(trim(rsExcel(13)),"'","''")
	DR_Pais = replace(trim(rsExcel(14)),"'","''")
	DR_Contacto = replace(trim(rsExcel(15)),"'","''")
	
if Usuario <> "" and Sol_Nip <> "" then
	Call Almacenar 'Procedimiento almacenado
	if trim(IdServicio) <> "" then
	       solicitudes = solicitudes & ";" & IdServicio & ""
	end if
	
Call limpiarcampos
end if
						
rsExcel.MoveNext
loop
rsExcel.Close


Sub Almacenar

	cadenaSQL = "EXEC TRANS_CARGARSOLICITUDES "
	cadenaSQL = cadenaSQL & vbnewline		
	
	cadenaSQL = cadenaSQL & "@Usuario				='" & Usuario & "'," 
	cadenaSQL = cadenaSQL & "@Fecha_Captado			='" & obtenerFecha(cstr(day(Fecha_Captado)), cstr(month(Fecha_Captado)), cstr(year(Fecha_Captado)),False) & "'," 
	
	cadenaSQL = cadenaSQL & "@Sol_Nip				='" & Sol_Nip & "'," 
	cadenaSQL = cadenaSQL & "@Sol_email				='" & Sol_email & "'," 
	cadenaSQL = cadenaSQL & "@Sol_Organization		='" & Sol_Organization & "'," 
	cadenaSQL = cadenaSQL & "@Sol_Unit				='" & Sol_Unit & "'," 
	cadenaSQL = cadenaSQL & "@Sol_CeCo				='" & Sol_CeCo & "'," 
	cadenaSQL = cadenaSQL & "@Sol_Refer				='" & Sol_Refer & "'," 
	
	cadenaSQL = cadenaSQL & "@DR_Empresa			='" & DR_Empresa & "'," 
	cadenaSQL = cadenaSQL & "@DR_Direccion			='" & DR_Direccion & "'," 
	cadenaSQL = cadenaSQL & "@DR_Localidad			='" & DR_Localidad & "'," 
	cadenaSQL = cadenaSQL & "@DR_Codigo_postal		='" & DR_Codigo_postal & "'," 
	cadenaSQL = cadenaSQL & "@DR_Provincia			='" & DR_Provincia & "'," 
	cadenaSQL = cadenaSQL & "@DR_Pais				='" & DR_Pais & "'," 
	cadenaSQL = cadenaSQL & "@DR_Contacto			='" & DR_Contacto & "'" 
		
	ejecutar
	
' el procedimiento me devuelve el id del registro insertado
	IdServicio = rs("IdServicio")
			
End Sub
  #2 (permalink)  
Antiguo 12/05/2009, 10:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Llamar a un procedimiento almacenado dentro de un bucle do while

Puedes llamar tantas veces desees un SP, definitivamente esto es un problema de lógica

Pueden ser varias cosas, que no puedas insertar registros duplicados y enmascares la excepción (revisa las llaves de tu tabla), que no entre al IF más que una sola vez (revisa que tus variables Sol_Nip y usuario no se limpien en alguna de las funciones que tienes ahí o que vengan en el excel en el formato adecuado).

Checa que los campos que esperas sean numéricos, sean en verdad numéricos en Excel y lo mismo con los string (si en Excel una columa string tiene un número, este número debe tener una marca verde indicando que es cadena), aunque veas información en Excel, si no tiene el formato que estas esperando, ASP no lo va a leer y obtendra una cadena vacia.

Conclusión: debuguea cuidadosamente.

Saludos
  #3 (permalink)  
Antiguo 13/05/2009, 01:42
 
Fecha de Ingreso: mayo-2003
Mensajes: 70
Antigüedad: 22 años
Puntos: 0
Respuesta: Llamar a un procedimiento almacenado dentro de un bucle do while

Muchas gracias Myakire. Ya lo solucione. El problema es que al limpiar campos, ponia a "" valores de tipo int y se saltaba la ejecución.

Un error tonto pero que me ha traido de cabeza.

Un saludo.
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 12:07.