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

Calendario Con Links

Estas en el tema de Calendario Con Links en el foro de ASP Clásico en Foros del Web. Hola que tal... tengo un error que dice asi: Código: Tipo de error: (0x80020009) Ocurrió una excepción. /agenda/calendario.asp, línea 183 acá está la parte del ...
  #1 (permalink)  
Antiguo 06/02/2006, 11:38
 
Fecha de Ingreso: septiembre-2004
Mensajes: 42
Antigüedad: 19 años, 9 meses
Puntos: 0
Calendario Con Links

Hola que tal... tengo un error que dice asi:

Código:
Tipo de error:
(0x80020009)
Ocurrió una excepción. 
/agenda/calendario.asp, línea 183
acá está la parte del código que tiene el error... lo que sucede es que cuando pongo el segundo "rs2.MoveNext" ... me aparece un error en el principio del condicional, en la parte del condicion que dice lo que se tiene que cumplir... y no sé como arreglarlo... (los puse en negrita para que los identifiquen)
Código:
'conexion a base de datos
		dim con2,rs2,sql2,xdia
		set con2 = server.CreateObject("ADODB.Connection")
		con2.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\agenda\agenda.mdb;User Id=;Password=;"
		set rs2 = server.CreateObject("ADODB.Recordset")
		sql2 = "SELECT *FROM EVENTOS WHERE FECHA LIKE '%/"&xmes&"/%' order by FECHA "
		rs2.open sql2,con2,1,2
		rs2.MoveFirst

'Pintamos el calendario
iActual = 1
iPosicion = iPrimerDiaSemanaMes
do while iActual <= iDiasDelMes
	
		if iPosicion = 1 then
			'Empezamos nueva semana, es decir nueva fila
			Response.Write vbTab & "<TR>" & VbCrLf 
		end if


	if Cint(iActual) = Cint(day(rs2.Fields("FECHA"))) then			


		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write (vbTab & vbTab & "<TD CLASS='diaActual'><B><A HREF='diax.asp?dia="&day(rs2.Fields("FECHA"))&"'>"& iActual & "</A></B><br></TD>" & vbCrLf)
				rs2.MoveNext
		else
				Response.Write (vbTab & vbTab & "<TD ALIGN='CENTER'><A HREF='diax.asp?dia="&day(rs2.Fields("FECHA"))&"'>" & iActual & "</A><br></TD>" & vbCrLf)
				rs2.MoveNext
		end if
		
	else
		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write vbTab & vbTab & "<TD CLASS='diaActual'><B>"& iActual & "</B><br></TD>" & vbCrLf
			
		else
				Response.Write vbTab & vbTab & "<TD ALIGN='CENTER'>" & iActual & "<br></TD>" & vbCrLf
		end if
	end if
gracias por cualquier ayuda!...

Alexis
  #2 (permalink)  
Antiguo 06/02/2006, 12:13
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
A ver si me aclaro.... ¿podrías poner el valor de iDia, de iPrimerDiaSemanaMes
y de iDiasDelMes? Si no lo pudo seguirlo.

Y otra cosa, en un bucle condicional de registros además de movenext necesitas controlar los End Of File ( osea EOF) tal como:

do while iActual <= iDiasDelMes AND not rs2.EOF

Si no tambien casca



Un saludo
  #3 (permalink)  
Antiguo 06/02/2006, 12:19
 
Fecha de Ingreso: septiembre-2004
Mensajes: 42
Antigüedad: 19 años, 9 meses
Puntos: 0
código completo

este es el código completo :) gracias !

Código:
<%
Function NombreMes (mes)
select case mes
	case 1
		NombreMes = "Enero"
	case 2
		NombreMes = "Febrero"
	case 3
		NombreMes = "Marzo"
	case 4
		NombreMes = "Abril"
	case 5
		NombreMes = "Mayo"
	case 6
		NombreMes = "Junio"
	case 7
		NombreMes = "Julio"
	case 8
		NombreMes = "Agosto"
	case 9
		NombreMes = "Septiembre"
	case 10
		NombreMes = "Octubre"
	case 11
		NombreMes = "Noviembre"
	case 12
		NombreMes = "Diciembre"
end select
End Function 'NombreMes
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
'Utilizaba esta variable para depurar
'Dim sOrigen

'iDia, iMes, iAno --> la fecha seleccionada
Dim iDia, iMes, iAno, sEnviado

'iDiasDelMes: numero de días del mes
'iDiaSemana: día de la semana en que cae la fecha
'iPrimerDiaSemanaMes: el día de la semana en que empieza el mes
Dim iDiasDelMes, iDiaSemana, iPrimerDiaSemanaMes

Dim dFecha 'la fecha enterita

'Para pintar la tabla necesito
Dim iActual, iPosicion

'Recojo los valores del form
iDia = Request.Form("Dia")
iMes = Request.Form("Mes")
iAno = Request.Form("Ano")
sEnviado = Request.Form("Enviado")
'sOrigen = "form"


	'La pongo a la fecha de hoy
		iDia = Day(Now)
		iMes = Month(Now)
		iAno = Year(Now)
		'sOrigen = "auto"

	'Avisamos y utilizamos la de hoy

	dFecha = Date
	iMes = Month(dFecha)
	iDia = Day(dFecha)
	iAno = Year(dFecha)

'Hallo los días del mes
select case iMes
	case 1,3,5,7,8,10,12
		iDiasDelMes = 31
	case 2
		if iAno mod 4 = 0 then
			'Año bisiesto!
			iDiasDelMes = 29
		else
			iDiasDelMes = 28
		end if
	case else
		iDiasDelMes = 30
end select

'Hallo el día de la semana
iDiaSemana = DatePart("w", DateSerial(iAno, iMes, iDia))

'Y el día de la semana en que empieza el mes
iPrimerDiaSemanaMes = DatePart("w", DateAdd("d", - iDia+1, DateSerial(iAno, iMes, iDia)), 2)

'Las siguientes líneas las utilizo para depurar. ;-)
'Response.Write(dFecha)
'Response.Write("<br>")
'Response.Write( iDia & "/" & iMes & "/" & iAno & "<br>")
'Response.Write "Dia: " & iDia & ", Mes: " & iMes &", Año: " & iAno & "<br>"
'Response.Write "Días del mes: " & iDiasDelMes & "<br>"
'Response.Write "El mes empieza en: " & iPrimerDiaSemanaMes & "<br>"

'Vamos a pintar la tabla
%>
<style type="text/css">
<!--
.Estilo1 {font-size: 10px}
-->
</style>
<div align="center">
  <TABLE BORDER="5" CELLPADDING="1" CELLSPACING="0" class="calendario">
    <TR>
      <TD bgcolor=#FF6600><center><A HREF="calendario.asp?Dia=<%=iDia%>&Mes=<%=DatePart("m", DateAdd("m", -1, dFecha))%>&Ano=<%=Year(DateAdd("m", -1, dFecha))%>">&lt;&lt;</A></center></TD>
	    <TD COLSPAN="5" bgcolor=#CC3300> <CENTER>
		    <font color="#FFFFFF"><b><%=NombreMes(iMes)& " " & Year(dFecha)%></b></font>
	    </CENTER> </TD>
	    <TD bgcolor=#FF6600><center><A HREF="calendario.asp?Dia=<%=iDia%>&Mes=<%=DatePart("m", DateAdd("m", 1, dFecha))%>&Ano=<%=Year(DateAdd("m", 1, dFecha))%>">&gt;&gt;</A></center></TD>
    </TR>
    <TR>
      <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
        </span>		  <CENTER class="Estilo1">
          <b>L</b>
          </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>M</b>
	        </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>X</b>
	        </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>J</b>
	        </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>V</b>
	        </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>S</b>
	        </CENTER>	    </TD>
	    <TD><span class="Estilo1"><IMG SRC="espacio.gif" HEIGHT="1" WIDTH="30" ALT="" BORDER="0"><br>
	    </span>		  <CENTER class="Estilo1">
	        <b>D</b>
	        </CENTER>	    </TD>
    </TR>
    
  <%
'Relleno con blancos si el mes no empieza en Lunes!
if iPrimerDiaSemanaMes <> 1 then
	iPosicion = 1
	Response.Write vbTab & "<TR> " & VbCrLf
	do while iPosicion < iPrimerDiaSemanaMes
		Response.Write vbTab & vbTab & "<TD>&nbsp;</TD>" & vbcrlf
		iPosicion = iPosicion + 1
	loop
end if

' preparo fecha para conexion a base de datos
if len(imes) = 1 then
xmes = 0&imes
end if


 'conexion a base de datos
		dim con2,rs2,sql2,xdia
		set con2 = server.CreateObject("ADODB.Connection")
		con2.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\agenda\agenda.mdb;User Id=;Password=;"
		set rs2 = server.CreateObject("ADODB.Recordset")
		sql2 = "SELECT *FROM EVENTOS WHERE FECHA LIKE '%/"&xmes&"/%' order by FECHA "
		rs2.open sql2,con2,1,2
		
		rs2.MoveFirst

'Pintamos el calendario
iActual = 1
iPosicion = iPrimerDiaSemanaMes
do while iActual <= iDiasDelMes
	
		if iPosicion = 1 then
			'Empezamos nueva semana, es decir nueva fila
			Response.Write vbTab & "<TR>" & VbCrLf 
		end if


	if Cint(iActual) = Cint(day(rs2.Fields("FECHA"))) then			


		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write (vbTab & vbTab & "<TD CLASS='diaActual'><B><A HREF='diax.asp?dia="&day(rs2.Fields("FECHA"))&"'>"& iActual & "</A></B><br></TD>" & vbCrLf)
				rs2.MoveNext
		else
				Response.Write (vbTab & vbTab & "<TD ALIGN='CENTER'><A HREF='diax.asp?dia="&day(rs2.Fields("FECHA"))&"'>" & iActual & "</A><br></TD>" & vbCrLf)
				
		end if
		
	else
		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write vbTab & vbTab & "<TD CLASS='diaActual'><B>"& iActual & "</B><br></TD>" & vbCrLf
			
		else
				Response.Write vbTab & vbTab & "<TD ALIGN='CENTER'>" & iActual & "<br></TD>" & vbCrLf
		end if
	end if


	
		if iPosicion = 7 then
		'Estamos en domingo, cerramos la semana :)
			Response.Write vbTab & "</TR>" & vbCrLf
			'Pongo iPosicion a cero pq voy a sumarle uno ahorita mismo
			iPosicion = 0
		end if

		'Incrementamos!
		iActual = iActual + 1
		iPosicion = iPosicion + 1
loop

'Relleno con blancos si no termino en domingo
'Primero compruebo que no sea uno, pues si terminamos en 7 (domingo)
'al incrementar por ultima vez se queda en 1. Típico en los bucles :-)
if iPosicion <> 1 then
	while iPosicion <= 7
	'Las celdas blancas...
		Response.Write vbTab & vbTab & "<TD>&nbsp;</TD>" & vbCrLf
		iPosicion = iPosicion + 1
	wend
	'... y el fin de fila!
	Response.Write vbTab & "</TR>" & vbCrLf

end if



%>
  </TABLE>
</div>
  #4 (permalink)  
Antiguo 06/02/2006, 13:36
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Mi primera duda es si has comprobado (con esa sentencia SQL) si te da valores ya que usar el LIKE con fechas y con formato de texto (comillas y %) en Access no es muy buena idea (yo lo he probado y na de na. Claro está que igual no está FECHA como tipo DATE ??¿¿¿)

Tampoco entiendo mucho esto:

Código:
' preparo fecha para conexion a base de datos
if len(imes) = 1 then
xmes = 0&imes
end if
Veo que imes es alfanumerico ya que estas calculando la longitud de una cadena (¿me equivoco?). de todas formas parece que funciona ya que el error te lo hace en el bucle. Aun así comprueba el resultado que suelta ese recordset. Si el campo FECHA es de tipo DATE la sentencia SQL debería ser asi:

sql2 = "SELECT DAY(FECHA) FROM EVENTOS WHERE MONTH(FECHA) = " & xmes & " order by FECHA "

Pero si te funciona bien, no he dicho nada


Veamos esto:

Código:
 'conexion a base de datos
		dim con2,rs2,sql2,xdia
		set con2 = server.CreateObject("ADODB.Connection")
		con2.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\agenda\agenda.mdb;User Id=;Password=;"
		set rs2 = server.CreateObject("ADODB.Recordset")
		sql2 = "SELECT DAY(FECHA) FROM EVENTOS WHERE FECHA LIKE '%/"&xmes&"/%' order by FECHA "
		rs2.open sql2,con2,1,2
		
		rs2.movefirst
		if not rs2.EOF then dayMagico = Cint(day(rs2.Fields("FECHA")))		

'Pintamos el calendario
iActual = 1
iPosicion = iPrimerDiaSemanaMes
do while iActual <= iDiasDelMes
	
		if iPosicion = 1 then
			'Empezamos nueva semana, es decir nueva fila
			Response.Write vbTab & "<TR>" & VbCrLf 
		end if


	if Cint(iActual) = diaMagico then			


		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write (vbTab & vbTab & "<TD CLASS='diaActual'><B><A HREF='diax.asp?dia="&diaMagico&"'>"& iActual & "</A></B><br></TD>" & vbCrLf)
				rs2.MoveNext
				
		else
				Response.Write (vbTab & vbTab & "<TD ALIGN='CENTER'><A HREF='diax.asp?dia="& diaMagico&"'>" & iActual & "</A><br></TD>" & vbCrLf)
				
		end if
		if not rs2.EOF then 
			rs2.movenext
			diaMagico = day(rs2.Fields("FECHA"))
		end if
	else
		if iActual = iDia then
			
			'Resaltamos la fecha seleccionada
				Response.Write vbTab & vbTab & "<TD CLASS='diaActual'><B>"& iActual & "</B><br></TD>" & vbCrLf
			
		else
				Response.Write vbTab & vbTab & "<TD ALIGN='CENTER'>" & iActual & "<br></TD>" & vbCrLf
		end if
	end if


	
		if iPosicion = 7 then
		'Estamos en domingo, cerramos la semana :)
			Response.Write vbTab & "</TR>" & vbCrLf
			'Pongo iPosicion a cero pq voy a sumarle uno ahorita mismo
			iPosicion = 0
		end if

		'Incrementamos!
		iActual = iActual + 1
		iPosicion = iPosicion + 1
loop
Como puedes ver la mayor diferencia es que evito toparme con el fin de registro (el EOF). Prueba y nos cuentas.



Un saludo
  #5 (permalink)  
Antiguo 06/02/2006, 20:55
 
Fecha de Ingreso: septiembre-2004
Mensajes: 42
Antigüedad: 19 años, 9 meses
Puntos: 0
muchísimas gracias, voy a probar si funciona...



ale
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 22:46.