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

BBDD: Se esperaba un final de instrucción

Estas en el tema de BBDD: Se esperaba un final de instrucción en el foro de ASP Clásico en Foros del Web. Hola a todos, Tengo una paginilla que pretendo que acceda a una base de datos access. Todo me funciona bien menos la query, he probado ...
  #1 (permalink)  
Antiguo 18/05/2005, 02:08
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
BBDD: Se esperaba un final de instrucción

Hola a todos,

Tengo una paginilla que pretendo que acceda a una base de datos access. Todo me funciona bien menos la query, he probado la misma desde access y funciona sin problemas, no se si puedo haber hecho algo mal o es algún problema de compatibilidad con ASP o q, os pongo la consulta:

"SELECT [usuario.NOMBRE], [usuario.APELLIDO1], [usuario.DNI], [gestion.FACTURA], [gestion.ENTRADA], [gestion.SALIDA], [TOTAL] FROM usuario, gestion WHERE [gestion.TOTAL] <> 0 And [usuario.FECHA] Between #"&desde&"# And #"&hasta&"# ORDER BY [usuario.fecha];"

Probandola por trozos, la parte que da el problema es la de:

And [usuario.FECHA] Between #"&desde&"# And #"&hasta&"#

y el error que me da es el siguiente:

Error de compilación de Microsoft VBScript (0x800A0401)
Se esperaba un final de instrucción
/CasaRural/sub04-03-1.asp, line 38, column 224


Alguien me puede decir algo?

Muchas gracias (otra vez).
  #2 (permalink)  
Antiguo 18/05/2005, 07:21
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
En esos casos claros de error de sintaxis, lo que debes hacer es desplegar la consulta ya formada y revisarla con cuidado.
Por ejemplo, haz algo así:

sql = "SELECT [usuario.NOMBRE], [usuario.APELLIDO1], [usuario.DNI], [gestion.FACTURA], [gestion.ENTRADA], [gestion.SALIDA], [TOTAL] FROM usuario, gestion WHERE [gestion.TOTAL] <> 0 And [usuario.FECHA] Between #"&desde&"# And #"&hasta&"# ORDER BY [usuario.fecha];"
response.write sql
response.end

Postea el resultado generado para ayudarte a revisarla. Tambien verifica los tipos de datos y todo eso.

Saludos
  #3 (permalink)  
Antiguo 18/05/2005, 07:23
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
y quita el ; del final
  #4 (permalink)  
Antiguo 18/05/2005, 08:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Lo hago todo y me pone lo mismo.

Información técnica (para personal de soporte técnico)

Tipo de error:
Error de compilación de Microsoft VBScript (0x800A0401)
Se esperaba un final de instrucción
/CasaRural/sub04-03-1.asp, line 23, column 227
sql = "SELECT [usuario.NOMBRE], [usuario.APELLIDO1], [usuario.DNI], [gestion.FACTURA], [gestion.ENTRADA], [gestion.SALIDA], [TOTAL] FROM usuario, gestion WHERE [gestion.TOTAL] <> 0 And [usuario.FECHA] Between #"&desde&"# And #"&hasta&"# ORDER BY [usuario.fecha]"

como podeis imaginar, se muy poco de Bases de datos, estoy revisando otras querys relativamente similares pero no encuentro donde está el problema :(
  #5 (permalink)  
Antiguo 18/05/2005, 09:16
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
Hola!
Una vez me pasó algo similar y lo resolví quitando, en principio, como bien sugiere trasgikabi, el ; del final.
Además de eso, también quité los [] que encierran a los campos. Al parecer lo toma barbaro en access pero cuando corre por asp hacen problemas.
Fijate con eso y despues nos cuentas.
También estaría interesante que postearas el response.Write(sql) a ver qué está interpretando del texto de tu consulta
Otra cosa que se me ocurre es colocar #'&desde%'# And #'&hasta&'# ya que usar comillas dobles todo el tiempo suele generar problemas de interpretación.
Fijate despacio opción por opción y nos contás si?
__________________
Why can't we not be sober?
www.partitorium.com.ar
  #6 (permalink)  
Antiguo 18/05/2005, 09:43
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Gracias a los 2 por la ayuda...


Bien, vamos por partes. El ";" del final se lo quité cuando me lo dijisteis.



El response.write(sql), me pone lo siguiente:

SELECT usuario.NOMBRE, usuario.APELLIDO1, usuario.DNI, gestion.FACTURA, gestion.ENTRADA, gestion.SALIDA, TOTAL FROM usuario, gestion WHERE gestion.ALTA <> 0 And FECHA Between #'&desde&'# And #'&hasta&'# ORDER BY FECHA


Pruebo con corchetes "[]", sin ellos, con comillas dobles y con comillas simples, estos son los resultados (atención al segundo):

Tipo de error:
Microsoft JET Database Engine (0x80040E07)
Error de sintaxis en la fecha en la expresión de consulta 'gestion.ALTA <> 0 And FECHA Between #'&desde&'# And #'&hasta&'#'. <== las 2 fechas con comilla simple


Tipo de error:
Microsoft JET Database Engine (0x80040E07)
Error de sintaxis en la fecha en la expresión de consulta 'gestion.ALTA <> 0 And FECHA Between #01/01/1950# And #'&hasta&'#'. <== OJO, la primera comilla doble y la segunda simple. APARECE LA FECHA DE LA COMILLA DOBLE


Tipo de error:
Error de compilación de Microsoft VBScript (0x800A0401)
Se esperaba un final de instrucción
/CasaRural/sub04-03-1.asp, line 38, column 200
SQL = "SELECT usuario.NOMBRE, usuario.APELLIDO1, usuario.DNI, gestion.FACTURA, gestion.ENTRADA, gestion.SALIDA, TOTAL FROM usuario, gestion WHERE gestion.ALTA <> 0 And FECHA Between #'&desde&'# And #"&hasta&"# ORDER BY FECHA" <== la primera comilla simple y la segunda comilla doble


Tipo de error:
Error de compilación de Microsoft VBScript (0x800A0401)
Se esperaba un final de instrucción
/CasaRural/sub04-03-1.asp, line 38, column 200
SQL = "SELECT usuario.NOMBRE, usuario.APELLIDO1, usuario.DNI, gestion.FACTURA, gestion.ENTRADA, gestion.SALIDA, TOTAL FROM usuario, gestion WHERE gestion.ALTA <> 0 And FECHA Between #"&desde&"# And #"&hasta&"# ORDER BY FECHA" <== las dos con comilla doble

...
  #7 (permalink)  
Antiguo 18/05/2005, 09:50
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
.

Podés fijarte sacandole los #....
Igualmente fijate primero si te trae todos los datos sin el between, sabiendo eso, sabes si el error se produce por una instrucción anterior o posterior a eso.
En base al error que muestre continuas probando de colocar el between sin los # a ver qué te dice....
Suerte
__________________
Why can't we not be sober?
www.partitorium.com.ar
  #8 (permalink)  
Antiguo 18/05/2005, 09:55
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola

Creo que basta con que lo hagas asi la consulta:

"SELECT usuario.NOMBRE, usuario.APELLIDO1, usuario.DNI, gestion.FACTURA, gestion.ENTRADA, gestion.SALIDA, TOTAL FROM usuario, gestion WHERE gestion.TOTAL <> 0 And usuario.FECHA Between '" & desde & " and '" & hasta & "' ORDER BY usuario.fecha"

Así no te deberia de marcar error. (De sintaxis en ASP)

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #9 (permalink)  
Antiguo 18/05/2005, 11:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis (falta operador) en la expresión de consulta 'gestion.TOTAL <> 0 And usuario.FECHA Between '01/01/1950 and '01/12/2005' ORDER BY usuario.fecha'.
/CasaRural/sub04-03-1.asp, line 46

Aunque me da error, por fin pone las dos fechas, con lo q ahora es por otra cosa... Podeis dar por solucionado el tema, que ya me busco yo la vida con lo del operador que quede ;)

Muchisimas gracias.
  #10 (permalink)  
Antiguo 18/05/2005, 11:48
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!

Si te fijas dice:

Microsoft JET Database Engine (0x80040E14)

Eso me dice que el error es en tu base de datos, como te dije arriba, la sintaxis de ASP estaba mal, entonces solo te puse la sintaxis correcta , ahora te recomiendo que esa cadena que se genero de SQL la uses directo en tu base de datos y ahi la pruebes para que mires mas claramente lo que esta pasando.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #11 (permalink)  
Antiguo 18/05/2005, 11:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
No se si habra sido un error de tipeo al escribir la nueva consulta en el Post, pero te olvidaste de cerrar las comillas simples en esta parte FECHA Between '" & desde & " . Por lo que veo en el error, me parece que no fue un error de tipeo, porque tambien te sale sin haber cerrado la comilla simple. Fijate con eso haber como te va. Saludos.
  #12 (permalink)  
Antiguo 18/05/2005, 11:57
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Cierto...

Falta esa comilla.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #13 (permalink)  
Antiguo 18/05/2005, 12:27
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Tras varias peleas... Solo consigo que me funcione con esto:

<% SQL = "SELECT * FROM usuario WHERE FECHA Between " & desde & " and " & hasta & "" %>


(Lo pongo por si a alguien le sirviera en un futuro)


Pero no se q le pasará a mi BBDD que ahora ni me muestra el resultado en la propia Base de Datos...

cuando vaya consiguiendo nuevos resultados lo cuento por aquí.
  #14 (permalink)  
Antiguo 18/05/2005, 12:40
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Bueno...

Haciendo caso al ultimo error de sintaxis y a lo que mariano_donati apunto, la consulta deberia ser como:

"SELECT usuario.NOMBRE, usuario.APELLIDO1, usuario.DNI, gestion.FACTURA, gestion.ENTRADA, gestion.SALIDA, TOTAL FROM usuario, gestion WHERE gestion.TOTAL <> 0 And usuario.FECHA Between '" & desde & "' and '" & hasta & "' ORDER BY usuario.fecha"

Es decir, agregué la comilla que hacia falta, ahora, prueba nuevamente asi y dinos que pasa.

Suerte!!

Por cierto, nunca he usado Between para fechas, solo para numeros, entonces no se si ahi sea un problema. Y si en la base de datos no te muestra errores es que la consulta esta regresando algo vacio.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #15 (permalink)  
Antiguo 18/05/2005, 12:48
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
no, así no me funciona, para que lo haga, he tenido que quitar las comillas simples...

Y no me muestra nada, en un principio debería de mostrarme lo q le pido puesto q tengo varios registros que debería enseñarme. No se lo q estará haciendo, pero algo debo estar haciendo mal...

Estaba poniendo las fechas de tipo "dd/mm/aaaa", tb he probado a ponerlas a modo "mm/dd/aaaa" y si q me devuelve datos, pero no lo que debería, digamos que me junta unas filas con otras haciendo que las claves primarias aparezcan tantas veces como claves primarias hay en la tabla.

cuando vaya descubriendo algo lo pongo.
  #16 (permalink)  
Antiguo 18/05/2005, 13:00
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Ok.

Por principio tienes razon, las fechas deben ser como MM/DD/YYYY

Prueba asi..

where (gestion.total > 0)
and (usuario.fecha>= '01/01/1950' and usuario.fecha<= '12/01/2005')
ORDER BY usuario.fecha

Prueba la cadena directamente en tu administrador de BDD para asegurar como debes creae correctamente la consulta, luego te preocupas por hacer lo mismo desde ASP.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #17 (permalink)  
Antiguo 18/05/2005, 13:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Me parece que el error esta en el Between, por eso no te acepta las comillas simples, al aceptar solamente tipos de datos numericos. Intenta encerrar la hora entre #--# haber que sale con eso, no creo que funcione, pero si quieres seguir haciendola con Between tienes que empezar a probar. Sino, me parece que lo más lógico sería hacerlo como te acaba de decir Neuron, ah por cierto Neuron, muy buena tu pagina.
Saludos.
  #18 (permalink)  
Antiguo 18/05/2005, 13:32
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Gracias!!

Gracias mariano_donati, ha sido mucho trabajo en equipo durante mucho tiempo pero ahi esta, como cualquier proyecto esta en Version 1.0, pero está creciendo y pronto mirarán ahí secciones más interactivas y espacios de expresión enfocados a los mismos sistemas que estamos ofreciendo. Solo que por el momento ya necesitabamos subir esta versión inicial para poner una muestra a nuestros clientes de como trabajamos, ya sabes que si no muestras tu trabajo pues es mas desconfianza.

Pero pronto habrá seccion más padres, más que nada contenido más avanzado sobre lo que estamos promoviendo, como miraras, ahorita hemos logrado sintetizar de manera fácil de entender el tipo de sistemas que ofrecemos, y también detalles de seguridad, comunicación, etc., pero estamos trabajando en ampliar esas secciones a contenidos más completos.

Gracias, y siempre son bienvenidos los comentarios, sugerencias, quejas, etc., de hecho sibimos una sección de comentarios rápidos y han dado buenos resultados y buenos aportes de nuestros usuarios.

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #19 (permalink)  
Antiguo 18/05/2005, 13:48
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Neuron, Felicidades, no sabía q eras el webmaster, q apenas llevo un par de días por akí y esto es la kañanunca me habían respondido tanto ni tan rápido cuando me toca preguntar a mi ;)

Mariano, respecto a lo de la hora, no lo estoy haciendo con "now" sino con "date", es decir, q el formato solo es dd/mm/aaaa, no hay q poner hora...

Leí por algún sitio lo de poner las ## encerrandolo, pero si lo pongo, esto me hace lo mismo que si pongo el formato en mm/dd/aaaa.

Weno, ya si q os dejo por hoy (espero q esto no me vuelva a enganchar hasta mañana).

Gracias por todo, y como este tema me es importante, ya explicaré como lo he concluido para ayudar a quien se encuentre en la misma situación.

Saludo3s.
  #20 (permalink)  
Antiguo 20/05/2005, 01:43
 
Fecha de Ingreso: mayo-2005
Mensajes: 19
Antigüedad: 19 años, 1 mes
Puntos: 0
Weno, como ya comenté, si al final lo conseguía, pondría como lo había hecho, aqui va la explicación.

Si leeis lo anterior, el problema estaba al poner las fechas el rollo de las comillas simples, dobles y las #, con tanto simbolo junto, pa mi q ASP se hacía la picha un lio (o me lo hacía yo)

Para solucionar el asunto, he hecho una concatenación de variables, haciendo la Query por trozos, separo las variables de la fecha de la query, así en las variables quedan aisladas y no hay tanto follón, la query funciona.

NOTA: investigando un poco con access, también me di cuenta de que faltaban parámetros a la Query, pongo el código implicado para que quede claro:

<%
SQL = "SELECT [gestion].[FECHA], [usuario].[NOMBRE], [usuario].[APELLIDO1], [usuario].[DNI], [gestion].[FACTURA], [gestion].[ENTRADA], [gestion].[SALIDA], [gestion].[NOCHE], [gestion].[TOTAL] FROM usuario INNER JOIN gestion ON [usuario].[DNI]=[gestion].[DNI] WHERE [gestion].[FECHA] Between #"
SQL1 = desde
SQL2 = "# And #"
SQL3 = hasta
SQL4 = "# ORDER BY [gestion].[FECHA] "
'abro la conexión y todo eso y
SET Rs = ObjetoConexion.Execute(SQL & SQL1 & SQL2 & SQL3 & SQL4)
%>

Supongo q todos lo entendereis bien (lo he entendido yo q soy el más paquete...), no obstante, si alguien tiene alguna duda, este es el momento ;)

Salu2.
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 02:01.