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

Error de sintaxis en CASE?

Estas en el tema de Error de sintaxis en CASE? en el foro de ASP Clásico en Foros del Web. He estado mirando en un montón de sitios distintos cómo se hace un case, y resulta que yo creo que lo que yo tengo está ...
  #1 (permalink)  
Antiguo 25/04/2007, 02:55
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Error de sintaxis en CASE?

He estado mirando en un montón de sitios distintos cómo se hace un case, y resulta que yo creo que lo que yo tengo está bien, pero me dá un error que encima yo considero estupido porque no creo que poniendo un ; entre Select y case funcionara, me podriais confirmar si está bien o no? Quizás me falle otra cosa pero no sé...


Y otra duda, si la variable varmax no está cargada daría error o algo?

Código:
contador=0;
	while (!rstIntranet.eof & contador<=4){
		%><tr>
			<% 
varmax="Select max(id_destacado)-contador from destacados"
rstIntranet.Open(varmax,cone,adOpenStatic,adCmdTable)
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)"
rstIntranet.Open(vartabla,cone,adOpenStatic,adCmdTable)
 Select Case vartabla
    Case "comics"
    select2="Select comic_titulo,comic_imagen from comics where id_comic=varmax" %>
    <%Response.write("<img src='"+rstIntranet("comic_imagen")+"'>")</td>%>			
    <% Response.write("<a href='desarrollo_comics.asp?Id="+rstIntranet("id_comic")+"'   class='desarrollo' target='_parent'>"+rstIntranet("comic_titulo")+"</a>")%><br><br>
<%> End Select <%>
		</tr>			
		<%rstIntranet.Movenext
		contador=contador + 1
	}
	%>

Tipo de error:
Error de compilación de Microsoft JScript (0x800A03EC)
Se esperaba ';'
/portal_joven/listado_destacados.asp, línea 35, columna 7


Linea 35: Select Case vartabla


Por cierto, estoy usando JScript


Opción 2: Parece ser que no existe Select case sino Switch, pero también falla

Código:
	contador=0;
	while (!rstIntranet.eof & contador<=4){
		%><tr>
			<% 
 varmax="Select max(id_destacado)-contador from destacados"			 intra2.Open(varmax,cone,adOpenStatic,adCmdTable)	
 vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)"
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable)
 Switch (vartabla){
	Case "comics";
	select2="Select comic_titulo,comic_imagen from comics where id_comic=varmax" %>
	<%Response.write("<img src='"+rstIntranet("comic_imagen")+"'>")</td>%>			
	<% Response.write("<a href='desarrollo_comics.asp?Id="+rstIntranet("id_comic")+"' class='desarrollo' target='_parent'>"+rstIntranet("comic_titulo")+"</a>")%><br><br>
					<% break; %>
				<% Default: %>
					<% Response.write("hola") %>
					
			<%> } <%>
		</tr>			
		<%rstIntranet.Movenext
		contador=contador + 1
	}
	%>
Error: Error de compilación de Microsoft JScript (0x800A03EC)
Se esperaba ';'
/portal_joven/listado_destacados.asp, línea 40, columna 17


Linea 38: Switch (vartabla){

EDITO: no creo que sea la variable, porque incluso poniendo switch(comics) da el mismo error.

Última edición por Shilfild; 25/04/2007 a las 04:23
  #2 (permalink)  
Antiguo 26/04/2007, 02:21
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Mensaje Re: Error de sintaxis en CASE?

Hola

Si usas JScript debes utilizar el Switch. Es C a fin de cuentas. Tambien, por ello, te recomiendo que acabes todas las lineas con el punto y coma. Prueba a poner el punto y coma al final de las sentencias precedentes:

Código:
varmax="Select max(id_destacado)-contador from destacados"; intra2.Open(varmax,cone,adOpenStatic,adCmdTable);    
 vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
Y quitala del case y en su lugar usa los dos puntos (:)

Sintaxis:

switch (expresion) {
case
etiqueta :
instrucciones;
break;
case etiqueta :
instrucciones;
break;
....
default :

}




Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 26/04/2007, 02:31
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Error de sintaxis en CASE?

Lo que me has comentado fui probandolo ayer recordando algo de C, pero me sigue dando el mismo error, pongo el código completo con la parte donde falla destacada, por si veis algo raro.... que ya no sé qué puede ser...

Código:
<%@ language="JScript" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<!-- Hay que cambiar esto por el diseño de la propia página -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../Intranet/web/intranet.css" rel="stylesheet" type="text/css">
<link href="../Intranet/web/scroll.css" rel="stylesheet" type="text/css">
</head>

<body>
<!-- #INCLUDE file="ADOJAVAS.inc" -->
<%
	cone=Server.CreateObject("ADODB.Connection");
	cone.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="+Server.MapPath("portaljoven.mdb"));
	rstIntranet=new ActiveXObject("ADODB.RecordSet");
	intra2=new ActiveXObject("ADODB.RecordSet");
	intra3=new ActiveXObject("ADODB.RecordSet");
	sentencia="Select * from destacados order by id_destacado desc";
	rstIntranet.Open(sentencia,cone,adOpenStatic,adCmdTable);
	rstIntranet.movelast;
	rstIntranet.movefirst;
	
	%>

	<table border=0>
	<%
	contador=0;
	while (!rstIntranet.eof & contador<=4){
		%><tr>
			<% 
varmax="Select max(id_destacado)-contador from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
 Switch(vartabla){
	Case "comics":
        select2="Select comic_titulo,comic_imagen from comics where id_comic=varmax";
intra4.Open(vartabla,cone,adOpenStatic,adCmdTable);
Response.write("<img src='"+rstIntranet("comic_imagen")+"'>");			
Response.write("<a href='desarrollo_comics.asp?Id="+rstIntranet("id_comic")+"' class='desarrollo' target='_parent'>"+rstIntranet("comic_titulo")+"</a>")<br><br>
break; 
				%>
					
			<%> } <%>	
		</tr>			
		<%rstIntranet.Movenext;
		contador=contador + 1;
	}
	%>
</table>
<%rstIntranet.close;
cone.close;
intra2.close;
intra3.close;%>
</body>
</html>
El error:
Error de compilación de Microsoft JScript (0x800A03EC)
Se esperaba ';'
/portal_joven/listado_destacados.asp, línea 40, columna 16


Línea 40: Switch(vartabla){
  #4 (permalink)  
Antiguo 26/04/2007, 05:15
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Error de sintaxis en CASE?

Vamos a ver esta parte:

Código:
    <%
    contador=0;
    while (!rstIntranet.eof & contador<=4){
        %><tr>
            <% 
varmax="Select max(id_destacado)-contador from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
 Switch(vartabla){
    Case "comics":
        select2="Select comic_titulo,comic_imagen from comics where id_comic=varmax";
intra4.Open(vartabla,cone,adOpenStatic,adCmdTable);
Response.write("<img src='"+rstIntranet("comic_imagen")+"'>");            
Response.write("<a href='desarrollo_comics.asp?Id="+rstIntranet("id_comic")+"' class='desarrollo' target='_parent'>"+rstIntranet("comic_titulo")+"</a>")<br><br>
break; 
                %>
                    
            <%> } <%>    
        </tr>            
        <%rstIntranet.Movenext;
        contador=contador + 1;
    }
    %>
</table>
Supongo que lo que quieres es esto

Código:
    <%
    contador=0;
    while (!rstIntranet.eof && contador<=4){
         %><tr>
    <% 
           varmax="Select max(id_destacado)-contador from destacados";
           intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
           vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
           intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
            if(intra3.fields[0].value=="comics"){
       
             select2="Select comic_titulo,comic_imagen from comics where id_comic=varmax";
             intra4.Open(vartabla,cone,adOpenStatic,adCmdTable);
             Response.write("<img src='"+rstIntranet("comic_imagen")+"'>");            
             Response.write("<a href='desarrollo_comics.asp?Id="+rstIntranet("id_comic")+"' class='desarrollo' target='_parent'>"+rstIntranet("comic_titulo")+"</a>")<br><br>
              
       }
                    
       <%    
    </tr>            
       <%
           rstIntranet.Movenext();
       contador=contador + 1;
    }
    %>
</table>
Pegalo y cuentame que tal. Por cierto, abre y cierra parentesis en todos los metodos que uses (close --> close(), movefirst --> movefirst(), etc ) que JScript es muy pejigera con esas cosas.

Si solo vas a hacer un caso, es mejor usar el if

Otra cosa que no comprendo es que vas al final del recordset y vuelves:

rstIntranet.movelast;
rstIntranet.movefirst;
¿para qué?




un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -

Última edición por tammander; 26/04/2007 a las 05:20 Razón: revisando codigo
  #5 (permalink)  
Antiguo 26/04/2007, 05:29
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Error de sintaxis en CASE?

Increible, poniendo el código que has puesto tú, sigue dando el error:..

Error de compilación de Microsoft JScript (0x800A03EC)
Se esperaba ';'
/portal_joven/listado_destacados.asp, línea 40, columna 30


Línea 40: Switch(intra3.fields[0].value){

Lo del movefirst y movelast lo he puesto todo cerrado con () y está puesto porque el técnico me dijo que era mejor ponerlo ya que a él le solia dar fallo y al ponerlo se evitaba el fallo.

Mi otra opción es ponerlo a VBScript de esta manera:

Código:
contador=0;
	while (!rstIntranet.eof & contador<=4){
		%><tr>
			<% 
varmax="Select max(id_destacado)-contador from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
 vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado=varmax)";
 intra3.Open(vartabla,cone,adOpenStatic,adCmdTable); %>
<script language=VBScript runat=server>
	Select Case vartabla
		case "comics":
		     Response.Write("hola")
		case else:
		    Response.Write("adios")				
		End Select	
			
			
			</script>
					
		
		</tr>			
		<%rstIntranet.Movenext();
		contador=contador + 1;
	}
Ahora el error es distinto, pero este ya, incluso me lo esperaba x_x porque es una historia de selects que no estoy segura de poder hacerla bien.

Linea 37: intra2.Open(varmax,cone,adOpenStatic,adCmdTable);


Error: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.
/portal_joven/listado_destacados.asp, línea 37


Por otra parte ya que estamos, en esta sentencia:

Código:
 varmax="Select max(id_destacado)-contador from destacados";
Estaría bien la resta esa? Es que a mí me suena a que sí de cuando hacía Oracle, pero viendo que quitando ' -contador' me dá error al ejecutar la siguiente select con el mismo problema, creo que no se va a poder...

Seguiré intentando sacar las selects, pero igual tengo que postear lo que pretendo hacer, porque me lio muchisimo yo sola con esto, gracias...
  #6 (permalink)  
Antiguo 26/04/2007, 06:57
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Error de sintaxis en CASE?

Lo raro es el error que te da.

Error de compilación de Microsoft JScript (0x800A03EC)
Se esperaba ';'
/portal_joven/listado_destacados.asp, línea 40, columna 30

No tiene sentido. Aun asi he visto errores simples como el operador de comparacion que pones & cuando es && o esa variable contador que metes en una cadena sin evaluar:

varmax="Select max(id_destacado)-contador from destacados";

las sentencias SQL es un lenguaje aparte que no tiene nada que ver con JSCript. Cuando envias una sentencia SQL al motor ODBC la ejecuta tal cual. No hace comprobaciones de ningun tipo si la mandas como cadena en, por ejemplo, un execute. Otra cosa es usar el objeto Command del componente ADODB (CreateObject("ADODB.command")) que si monta la cadena SQL en base a unos parametros. Investigalo, puede que te resulte util.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #7 (permalink)  
Antiguo 26/04/2007, 20:30
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 18 años, 1 mes
Puntos: 88
Re: Error de sintaxis en CASE?

solo por curiosidad

de esta forma se escribe en Jscript?? con corchetes
Línea 40: Switch(intra3.fields[0].value){


ahora si lo usamos en vbscript, no seria con parentesis
Línea 40: Switch(intra3.fields(0).value){

solo una duda...
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #8 (permalink)  
Antiguo 27/04/2007, 03:28
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Error de sintaxis en CASE?

Asi es Shiryu, el acceso a los datos de un array se hace con corchetes en JScript y con parentesis en VBScript. Shilfild usa JScript.

:/

Curiosidades de los lenguajes.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #9 (permalink)  
Antiguo 27/04/2007, 03:49
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Error de sintaxis en CASE?

Sé, bueno, supongo porque yo aquí no tengo ya nada el 100% seguro que el error que tengo ahora mismo es en la select, pero quizás a simple vista veais un error que no consigo ver yo ni para atrás.

Si pudierais leerlo un momento y ayudarme lo agradecería mucho

Código:
intra2=new ActiveXObject("ADODB.RecordSet");
intra3=new ActiveXObject("ADODB.RecordSet");
varmax="Select max(id_destacado) from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado='"+ varmax +"')";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable); %>
El error: Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresión de criterios.
/portal_joven/listado_destacados.asp, línea 41


Linea41: intra3.Open(vartabla,cone,adOpenStatic,adCmdTable) ; %>

Si por lo que sea quereis más información sobre tablas y demás, aquí está todo explicado x_x Gracias de antemano

http://www.forosdelweb.com/f21/no-consigo-crear-select-correcta-485074/
  #10 (permalink)  
Antiguo 27/04/2007, 06:42
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Busqueda Re: Error de sintaxis en CASE?

hola shilfild,

creo que tienes un pequeño lio mental con los recordset:

Código:
intra2=new ActiveXObject("ADODB.RecordSet");
intra3=new ActiveXObject("ADODB.RecordSet");
varmax="Select max(id_destacado) from destacados";
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado='"+ varmax +"')";
intra3.Open(vartabla,cone,adOpenStatic,adCmdTable); %>
varmax es una cadena que contiene una sentencia SQL. No es un resultado. Deberia ser algo como esto:

Código:
ntra2=new ActiveXObject("ADODB.RecordSet");
intra3=new ActiveXObject("ADODB.RecordSet");
varmax="Select max(id_destacado) from destacados";
' Esto te va a abrir un rs con registro
intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
if (! intra2.EOF) {
      vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado="+ intra2.fields[0].value +")";
      intra3.Open(vartabla,cone,adOpenStatic,adCmdTable);
}
  %>
intra2.fields[0].value contiene el campo id_destacado del registro mas grande (de 1 a 1000 devolveria 1000) .

El error que te da es de tipos por lo que supongo que id_destacados es numérico no alfanumerico



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #11 (permalink)  
Antiguo 27/04/2007, 09:25
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
Re: Error de sintaxis en CASE?

Me gustaría poder ayudar, pero necesitaría que Shilfild me hiciera un pequeño resumen de lo que tiene hasta el momento y el error exacto, ya no estoy seguro que lo que haya en los mensajes anteriores sea el problema.

Saludos
  #12 (permalink)  
Antiguo 30/04/2007, 01:32
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Error de sintaxis en CASE?

Uhm... el otro día estuve enredando ayudada por el técnico pero seguimos sin saber nada, las tablas de la BD siguen igual, actualmente el código está asi:

Código:
<%@ language="JScript" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<!-- Hay que cambiar esto por el diseño de la propia página -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../Intranet/web/intranet.css" rel="stylesheet" type="text/css">
<link href="../Intranet/web/scroll.css" rel="stylesheet" type="text/css">
</head>

<body>
<!-- #INCLUDE file="ADOJAVAS.inc" -->
<%
	cone=Server.CreateObject("ADODB.Connection");
	cone.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="+Server.MapPath("portaljoven.mdb"));
	rstIntranet=new ActiveXObject("ADODB.RecordSet");
	intra2=new ActiveXObject("ADODB.RecordSet");
	intra3=new ActiveXObject("ADODB.RecordSet");
	sentencia="Select * from destacados order by id_destacado desc";
	rstIntranet.Open(sentencia,cone,adOpenStatic,adCmdTable);
	rstIntranet.movelast();
	rstIntranet.movefirst();
	
	%>

	<table border=0>
	<%
	contador=0;
	while (!rstIntranet.eof && contador<=4){
		%><tr>
			<% 
			var varmax;
			intra2=new ActiveXObject("ADODB.RecordSet");
			intra3=new ActiveXObject("ADODB.RecordSet");
			varmax="Select max(id_destacado) from destacados";
			intra2.Open(varmax,cone,adOpenStatic,adCmdTable);
			vartabla="Select tipo_nombre from tipos where id_tipo=(select destacados_tipo from destacados where id_destacado='"+ varmax +"')";
			intra3.Open(vartabla,cone,adOpenStatic,adCmdTable); 
			 %> 
			<script language=VBScript runat=server>
				Select Case vartabla
					case "comics":
						Response.Write("hola")
					case else:
						Response.Write("adios")				
					End Select	
			</script>
					
		
		</tr>			
		<%rstIntranet.Movenext();
		
		contador=contador + 1;
	}
	%>
</table>
<%rstIntranet.close();
cone.close();
intra2.close();
intra3.close();%>
</body>
</html>
Está preparado para que tenga que salir "hola" por pantalla.

El error es el siguiente:

Tipo de error:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresión de criterios.
/portal_joven/listado_destacados.asp, línea 43


Linea 43:intra3.Open(vartabla,cone,adOpenStatic,adCmdTab le);

"donde id_destacado es de tipo entero y var_max es cadena" esto me respondieron,pero según lo que sé yo, max(id) mostraría el maximo valor numérico de la id, no?

Edito:

He puesto este código y he omitido la segunda sentencia
Código:
		if(isNaN(varmax)){
				Response.Write("No es numero")
			}else{
				Response.Write("Numero")
			}
Resulta que no es número, si alguien tiene idea de cómo lo podria hacer... ?
Y creo que tampoco la segunda variable esta bien, pero de momento me interesa lo del número...

Por cierto, tengo alguna manera de visualizar el contenido de una variable en JScript? Gracias

Última edición por Shilfild; 30/04/2007 a las 02:31
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 03:55.