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

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

Estas en el tema de Microsoft OLE DB Provider for ODBC Drivers error '80040e14' en el foro de ASP Clásico en Foros del Web. Hola buen día a todos, estoy haciendo un carrito de compra, y en el código de búsqueda me da el siguiente error, al colocar un ...
  #1 (permalink)  
Antiguo 04/09/2007, 01:04
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 5 meses
Puntos: 0
Sonrisa Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Hola buen día a todos, estoy haciendo un carrito de compra, y en el código de búsqueda me da el siguiente error, al colocar un nombre en el formulario e iniciar la búsqueda.

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 'ACTIVO and COD_SECCION IN () and PRODUCTO LIKE '%discos%''.


/carrito/Productos/busqueda.asp, línea 100

La línea 99 y 100 son estas:

99:
SQL = "Select COD_PRODUCTO, PRODUCTO, PRECIO FROM productos " & "where ACTIVO and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO"

100
Tabla.Open SQL, Base, 3,3

El formulario es este:

<form name="formi" method="post" action="<%=Ruta%>">
<input type="Hidden" name="nombre" value="<%=nombre%>">
<input type="Hidden" name="seccion" value="<%=request.form("seccion")%>">
<input type="Hidden" name="pagina" value="">
</form>


Gracias de antemano por la ayuda...
  #2 (permalink)  
Antiguo 04/09/2007, 01:48
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

where ACTIVO = 'loquesea' and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO

Supongo que el campo ACTIVO es boolean. Sin embargo, como los valores true o false tienen un valor tinyint de 0/1 o -1/0 dependiendo de la BD que uses, debes poner el valor que estes buscando:

where ACTIVO = true and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO

o

where ACTIVO = 1 and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO


Acostumbrate a usar true/false, 1/0, -1/0, etc cuando trabajes con valores booleanos



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 04/09/2007, 02:02
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Gracias por responder tan rápido

Hice lo que me indicaste y me sigue dando el mismo error (con ambas opciones true/1):

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 'ACTIVO=1 and COD_SECCION IN () and PRODUCTO LIKE '%web%''.

/carrito/Productos/busqueda.asp, línea 99
  #4 (permalink)  
Antiguo 04/09/2007, 02:29
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Mira lo que pusiste :

COD_SECCION IN ()




Chequea que haya datos en la variable secciones, y de paso, en nombre. En caso de que no haya, no añadas la condición ya que te el motor SQL te dará error.


Es decir

SQL = "Select COD_PRODUCTO, PRODUCTO, PRECIO FROM productos " & "where ACTIVO = 1"

if secciones <> "" then SQL = SQL & " and COD_SECCION IN ("&secciones & ")"

if nombre <> "" then SQL = SQL & " and PRODUCTO LIKE '%"&nombre&"%' "

SQL = SQL & " order by PRODUCTO""


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; 04/09/2007 a las 02:43
  #5 (permalink)  
Antiguo 04/09/2007, 04:22
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Gracias otra vez, lo he revisado y sigue igual, te mando el código completo para ver si tu puedes ver lo que yo no...

Dim Base 'Objeto de conección a la base de datos
Dim tabla 'Objeto recordset para realizar consultas
Dim SQL 'String para crear la consulta SQL
Dim categoria 'Codigo de la categoria que estamos mostrando
Dim cod_categoria 'Nombre de la categoria en la que estamos
Dim nombre 'nombre que está buscando el usuario
Dim secciones 'secciones en la que se realiza la búsqueda
Dim seccion 'variable para obtener las secciones
Dim pagina 'contiene el número de la página que estamos viendo
Dim cont 'contador de registros mostrados
Dim Ruta 'Auxiliar para almacenar la Ruta


'fin de la definición de variables


categoria = Request.QueryString ("categoria")
cod_categoria = Request.QueryString ("cod_categoria")
secciones = ""

For each seccion in request.form("seccion")
if secciones="" then
secciones="'"&seccion&"'"
else
secciones=secciones & ", '" & seccion & "'"
end if

next
nombre =request.form("nombre")
%>


%>
<html xmlns="http://www.w3.org/1999/xhtml">



<head>
<%
'########## COMENZAMOS A LLENAR CABECERA
%>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>productos</title>

<script languaje="javascript">
<!--
function enviar(donde)
{
document.formi.pagina.value=donde
document.formi.submit()
}
//-->
</script>

</head>


<%'########## COMENZAMOS A LLENAR EL CUERPO
%>
<body>

<a href="../index.asp">home</a><br />
<a href="../compra/cesta.asp">Ver Cesta</a><br />


<%
Ruta="secciones.asp?cod_categoria="& Server.URLEncode(cod_categoria)
%>

<h2><a href="<%=Ruta%>"><%=categoria%></a><br /></h2>

<%
Ruta="busqueda.asp?categoria="&Server.URLEncode(ca tegoria)& "&cod_categoria="&Server.URLEncode(cod_categoria)% >

<form name="formi" method="post" action="<%=Ruta%>">
<input type="Hidden" name="nombre" value="<%=nombre%>">
<input type="Hidden" name="seccion" value="<%=request.form("seccion")%>">
<input type="Hidden" name="pagina" value="">
</form>

<%
Set Base = Server.CreateObject("ADODB.Connection")
Set tabla =Server.CreateObject("ADODB.RecordSet")
Base.Open = "servidor.tienda"
SQL = "Select COD_PRODUCTO, PRODUCTO, PRECIO FROM productos " & "where ACTIVO=1 and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO"
tabla.Open SQL, Base, 3,3


IF tabla.EOF then
Response.write "No se ha encontrado ningún producto " & "que cumpla las especificaciones"
else
...
  #6 (permalink)  
Antiguo 04/09/2007, 07:26
Avatar de CésarBalaguer  
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

tu variable secciones no tiene valor revisa el request.form("seccion")
  #7 (permalink)  
Antiguo 04/09/2007, 07:30
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Pon esto

Código:
SQL = "Select COD_PRODUCTO, PRODUCTO, PRECIO FROM productos " & "where ACTIVO = 1"
if secciones <> "" then SQL = SQL & " and COD_SECCION IN ("&secciones & ")" 
if nombre <> "" then SQL = SQL & " and PRODUCTO LIKE '%"&nombre&"%' "
SQL = SQL & " order by PRODUCTO""
en vez de

Código:
SQL = "Select COD_PRODUCTO, PRODUCTO, PRECIO FROM productos " & "where ACTIVO=1 and COD_SECCION IN ("&secciones & ") and PRODUCTO LIKE '%"&nombre&"%' order by PRODUCTO"
Te evitará errores en el montaje de la cadena SQL. Si request.form("seccion") viene vacio (supongo que es un select múltiple) no montará la condición IN. Lo mismo que nombre. Si viene vacio no hará el LIKE.




Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #8 (permalink)  
Antiguo 04/09/2007, 10:29
Avatar de Cameron_2006  
Fecha de Ingreso: diciembre-2006
Mensajes: 248
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Gracias a Cesar y a Tammander por ayudarme a resolver este error, se resolvió al cambiar el código como lo explicó tammander.

Ahora me salió otro error, pero no se si abrir otra incidencia, digamos para que quede constancia. Lo haré jeje.

Mil gracias a ambos por estar allí.
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 14:31.