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

Error de sintaxis en Sentencia SQL

Estas en el tema de Error de sintaxis en Sentencia SQL en el foro de ASP Clásico en Foros del Web. Saludos al foro: Lo que la pagina "ofertas.asp" tiene que hacer es lo siguiente: Recoge el valor del campo claseoferta de un recordset y lo ...
  #1 (permalink)  
Antiguo 11/07/2003, 10:01
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Error de sintaxis en Sentencia SQL

Saludos al foro:
Lo que la pagina "ofertas.asp" tiene que hacer es lo siguiente:
Recoge el valor del campo claseoferta de un recordset y lo muestra dentro de un formulario, de forma que al pulsar sobre el botón "Ir a" vaya a la pagina "generartabla.asp".

La página generartabla.asp debe lanzar un listado filtrado por el valor del campo claseoferta; pero me produce un error que es el siguiente:


Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis (falta operador) en la expresión de consulta 'claseoferta ='.

/generartabla.asp, line 53


Les paso el código de las dos páginas por si ven el error, porque yo no soy capaz de verlo.

------------------------------------------
Codigo de la página ofertas.asp:


<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<title>Escoja su clase de oferta</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_jumpMenuGo(selName,targ,restore){ //v3.0
var selObj = MM_findObj(selName); if (selObj) MM_jumpMenu(targ,selObj,restore);
}
//-->
</script>

</head>

<body>
<!--Incluimos el fichero de constantes-->
<!--#INCLUDE file="ADOVBS.inc"-->
<%
'Para conexión a dsn arsys con ACCESS
'Set Ob_Conn= Server.CreateObject("ADODB.Connection")
'Set Ob_Command= Server.CreateObject("ADODB.Command")
'Ob_Conn.open "DSN=clubviajesoferta.com.access"
'Ob_Command.ActiveConnection=Ob_Conn
'Ob_Command.CommandType=adCmdText
'Ob_Command.CommandText= "SELECT * FROM ofertas WHERE id = " & Request.QueryString("id")"
'Set Ob_RS=Ob_Command.Execute ()
'Termina aquí la conexion a dsn arsys con ACCESS

'Para conexion a ODBC local
Set Ob_Conn = Server.CreateObject("ADODB.Connection")
Set Ob_Command= Server.CreateObject("ADODB.Command")
Ob_Conn.open "cvo_odbc"
' Abrimos la tabla, declaramos que conexión esta abierta, tipo de cursor, tipo de cerrojo, y opciones
Ob_Command.ActiveConnection=Ob_Conn
Ob_Command.CommandType=adCmdText
Ob_Command.CommandText= "SELECT DISTINCT claseoferta FROM ofertas"
Set Ob_RS=Ob_Command.Execute ()
%>
Estos son las clases de ofertas que tiene a su disposición:
Haga click sobre el botón "Ir A" correspondiente para ver el contenido de dichas ofertas
<% do until Ob_RS.eof %>

<form method="post" action="generartabla.asp?claseoferta=<%=Ob_RS("cla seoferta")%>">
<%=Ob_RS("claseoferta")%>
<input type="hidden" name="campodebusqueda" value="<%=Ob_RS("claseoferta")%>">
<input type="submit" value="Ir A">
</form>
<%Ob_RS.movenext%>
<% loop %>
<%Ob_RS.close
Ob_Conn.close%>

</body>
</html>
------------------------------------------


Codigo de la página "generartabla.asp"


<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%response.Expires=0%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>

<SCRIPT LANGUAGE="JavaScript">
<!--
function AbrirVentana (theURL, winName, features)
{
window.open (theURL, winName, features);
}
-->
</SCRIPT>


</head>

<body background="images/frame_izqda_con_opacidad.jpg" leftmargin="0" topmargin="25" marginwidth="0" marginheight="0">
<!--Incluimos el fichero de constantes-->
<p>
<!--#INCLUDE file="ADOVBS.inc"-->
<%
'Para conexión a dsn arsys con ACCESS
'Set Ob_Conn= Server.CreateObject("ADODB.Connection")
'Set Ob_Command= Server.CreateObject("ADODB.Command")
'Ob_Conn.open "DSN=clubviajesoferta.com.access"
'Ob_Command.ActiveConnection=Ob_Conn
'Ob_Command.CommandType=adCmdText
'Ob_Command.CommandText= "SELECT * FROM ofertas"
'Set Ob_RS=Ob_Command.Execute ()
'Termina aquí la conexion a dsn arsys con ACCESS

'Para conexion a ODBC local
Set Ob_Conn = Server.CreateObject("ADODB.Connection")
Set Ob_Command= Server.CreateObject("ADODB.Command")
Ob_Conn.open "cvo_odbc"
' Abrimos la tabla, declaramos que conexión esta abierta, tipo de cursor, tipo de cerrojo, y opciones
Ob_Command.ActiveConnection=Ob_Conn
Ob_Command.CommandType=adCmdText
Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = " & Request.form("claseoferta")
Set Ob_RS=Ob_Command.Execute ()
%>
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr bgcolor="#e0e0e0">
<td width="8%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Destino</font></div></td>
<td width="5%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Zona</font></div></td>
<td width="23%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Salidas</font></div></td>
<td width="17%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Fecha
de Salida</font></div></td>
<td width="19%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Hotel</font></div></td>
<td width="3%"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Categoría</font></td>
<td width="4%"><div align="left"><font size="2"><font size="1"><font size="1"><font face="Arial, Helvetica, sans-serif"></font></font></font></font></div></td>
<td width="12%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Precio</font></div></td>
<td width="13%"> <div align="left"><font color="#003399" size="1" face="Arial, Helvetica, sans-serif">Regimen</font></div></td>
</tr>
<% do until ob_RS.eof %>
<tr align="left" valign="top" bgcolor="#ebf3eb">
<td>
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("destino")%></font></div></td>
<td>
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("Zona")%></font></div></td>
<td>
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("salidas")%></font></div></td>
<td>
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("fechasalida")%></font></div></td>
<td>
<div align="left">
<p><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("hotelnombre")%> </font></div></td>
<td><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("hotelcategoria")%></font></td>
<td><font size="1" face="Arial, Helvetica, sans-serif"><a href="generartabla.asp"
onClick="AbrirVentana('ficha_hotel.asp?id=<%=Ob_RS ("id")%>', '', 'top=112, left=165, width=627, height=350, resizable=0')" shape="rect" >
<img src="images/iconohotel.gif" alt="Información sobre el hotel" width="22" height="22"></a>
</font>
<td>
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("hotelprecio")%> €</font></div></td>
<td width="16%">
<div align="left"><font size="1" face="Arial, Helvetica, sans-serif"><%=Ob_RS("hotelregimen")%></font></div></td>
</tr>
<% Ob_RS.movenext
loop
Ob_RS.close
Ob_Conn.close
%>
</table>
</body>
</html>

Gracias por todo a todo el foro
  #2 (permalink)  
Antiguo 11/07/2003, 10:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Cita:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis (falta operador) en la expresión de consulta 'claseoferta ='.

/generartabla.asp, line 53
Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = " & Request.form("claseoferta")

Hazle un response.write al request.Form("claseoferta"), lo mas seguro es que no esté llegando...

Cita:
<form method="post" action="generartabla.asp?claseoferta=<%=Ob_RS("cla seoferta")%>">
<%=Ob_RS("claseoferta")%>
<input type="hidden" name="campodebusqueda" value="<%=Ob_RS("claseoferta")%>">
<input type="submit" value="Ir A">
</form>
Envía clase oferta en un campo de tipo hidden, creo que eso debe ser

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 11/07/2003, 10:26
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 5 meses
Puntos: 4
podrias poner mas resumido tu codigo? solo la parte que te saca el error.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 11/07/2003, 10:54
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
En este momento la base de datos tiene 3 registros:

Canarias
Islas
Prueba

Creo que está pasando el parámetro porque en la barra de direcciones me aparece lo siguiente:


Cada vez que pulso el botón "ir a" me aparece para el primer registro:
http://localhost/generartabla.asp?claseoferta=Canarias

para el segundo registro:
http://localhost/generartabla.asp?claseoferta=Islas

Y para el 3 registro:
http://localhost/generartabla.asp?claseoferta=Prueba
  #5 (permalink)  
Antiguo 11/07/2003, 11:02
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Vuelvo y digo...je je je

Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = " & Request.form ("claseoferta")

Estás haciendo el request a una forma, pero lo envías por querystring...

Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = " & Request.querystring ("claseoferta")

O lo envías en un input de tipo hidden y haces el request con el .form o lo dejas como está y ocupas el .querystring...

Creo que por ahí va la cosa


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 11/07/2003, 11:13
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
He optado por poner la instruccion que tu me comentabas en el fichero generartabla.asp y dejar el resto como está:
Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = " & Request.querystring ("claseoferta")

y me da el siguiente error:

Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.

Y ahora si que estoy perdido.... del todo.

Gracias
  #7 (permalink)  
Antiguo 11/07/2003, 11:20
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98


Ye vi el error, hagamos algo, no le pongas ni .form, ni .querystring, dejalo request("claseoferta"), ahora, no será que el tipo de dato de tu campo es texto? si es así la SQL debe quedar:

Ob_Command.CommandText= "SELECT * FROM ofertas WHERE claseoferta = '" & Request("claseoferta") & "'"
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #8 (permalink)  
Antiguo 11/07/2003, 11:34
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Ya me funciona... aunque todavia no entiendo cual era el error... ahora me toca estudiarlo.
Muchisimas gracias.....
me has salvado la vida ... porque a tal momento ya estaba completamente loco.
Muchas gracias de nuevo
  #9 (permalink)  
Antiguo 11/07/2003, 11:37
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
puuuffff, je je, el error estaba en que estabas buscando un dato mal en un campo de tipo texto, los textos te los pide SQL entre apostrofes 'Este es un texto'.

SELECT...WHERE campo= '" & variable & "'"

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 11/07/2003, 11:42
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Me siento realmente abrumado... (con tu paciencia, colaboración, etc.) y no es peloteo. Siento dar tanto la lata. Pero cuando ya no me salen las cosas es el ultimo recurso.
Si todo el mundo se te pareciese un poco, creo que nos iria mejor de lo que nos va.
Y que no se me queje el resto del foro porque os juro que nunca he visto este nivel de colaboracion y solidaridad.
Gracias a todos.
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 21:01.