Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASP Clásico (http://www.forosdelweb.com/f15/)
-   -   Error de sintaxis en Sentencia SQL (http://www.forosdelweb.com/f15/error-sintaxis-sentencia-sql-141227/)

ciberpata 11/07/2003 10:01

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

u_goldman 11/07/2003 10:21

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,

lexus 11/07/2003 10:26

podrias poner mas resumido tu codigo? solo la parte que te saca el error.

ciberpata 11/07/2003 10:54

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

u_goldman 11/07/2003 11:02

Vuelvo y digo...je je je :-D

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,

ciberpata 11/07/2003 11:13

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

u_goldman 11/07/2003 11:20

:censura:

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") & "'"

ciberpata 11/07/2003 11:34

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

u_goldman 11/07/2003 11:37

:-D 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,

ciberpata 11/07/2003 11:42

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.


La zona horaria es GMT -6. Ahora son las 07:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.