FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
No consigo ejecutar una consulta sql
Estoy haciendo una consulta sql en delphi sobre varias tablas que tengo en la misma carpeta. Otras consultas me las hace bien, pero la siguiente no, me da un error que dice : Invalid use of keyword token.
La he repasado mucho y yo creo que aparentemente esta bien, nose cual es el error La consulta es esta : SELECT M.NALBA,M.OBRA,M.FECHA,M.ORIGI,H.ALBA2,MO.DESC,MO.NOME,MO.CLIE,L.PARTE,L.TIPO,L.HORA1 FROM MAEALBA M INNER JOIN LINPRTS L ON L.NALBA=M.NALBA INNER JOIN MAEOBRA MO ON MO.OBRA=L.OBRA INNER JOIN HSTMOVI H ON H.OBRA=MO.OBRA WHERE L.TIPO='E' AND M.FECHA > '9/30/2005'; Saludos |
#2
|
||||
|
||||
El error que te dá es porque estás utilizando una 'palabra clave' dentro de la consulta.
No has puesto que motor de BD utilizas. No sé decirte cual de las palabras que estás utilizando en tu consulta (que aparentemente está bien, según lo que he podido observar), puede ser una palabra clave para ese motor. Cambia alguno de los 'alias' que utilizas en esa consulta, a ver si es eso. Saludos,
__________________
Piensa siempre en positivo ! |
#3
|
||||
|
||||
Según el error que da, es que interpreta un nombre de campo o de tabla como una palabra reservada del lenguaje SQL (o al menos así lo interpreto yo ese error).
Si se trata de esto, deberías buscar información de tu motor de bases de datos, mirar las palabras reservadas que tenga, y ver si alguna está en tu SQL. Un ejemplo: Si tienes un campo que se llama USERNAME, no podrás hacer sqls sobre ese campo, porque USERNAME es una palabra reservada de Interbase (por decir algo) y da conflicto al interpretar el SQL. Solución: cambiar el nombre del campo por USERSNAME o UNAME, etc. No sé si podría ocurrir con el campo "MO.DESC". Desc es típico del order by para indicar un orden descendente, pero en principio, no debería haber problemas porque está cualificado, es decir, lleva "MO." delante, por tanto indica que es un campo perteneciente a la tabla MO. Quita ese campo del select y si no da error después, hemos acertado. Como digo, no puedo asegurar que sea ese el error, pero es lo único que veo. El SQL parece estar bien. OFFTOPIC: No me he sentido más inseguro de una respuesta en mi vida . Edito: Al ver el mensaje de gluglu, ya me siento más seguro Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
Coincido con Lepe que puede ser el nombre del campo DESC que coincide con una palabra reservada que se puede incluir en el 'Order By' para ordenar el query en orden descendente.
__________________
Piensa siempre en positivo ! |
#5
|
|||
|
|||
Coincido con Lepe y gluglu, la solución es o cambiar el nombre del campo o usar comillas dependiendo del motor de base de datos que uses, por ejemplo:
MO."DESC" si es paradox, MO.`DESC` en MySQL, estos son los que recuerdo de memoria. |
#6
|
|||
|
|||
He probado a quitar el campo mo.desc y al ejecutar el programa en delphi ahora no me sale ningun error, pero cuando voy a ejecutar la consulta se queda como colgado y se me cuelga el ordenador.
Y si esa misma consulta la intento ejecutar en access quitando lo del mo.desc, me sale el mismo error : error de sintaxis (falta operador) en la expresión de consulta. Las tablas sobre las que trabajo son archivos dbf que tengo todos en una misma carpeta dentro del programa y solamente uso un dataset, un query y un dbgrid para mostrar la consulta. Lo único que se me ocurre es que sea normal que tarde tanto porque por ejemplo una consulta tan simple como esta : SELECT M.NALBA,H.ALBA2 FROM MAEALBA M INNER JOIN HSTMOVI H ON M.OBRA=H.OBRA; Con eso ya le cuesta un poco, casi 1 minuto, ya que estamos hablando con tablas con muchos registros (hstmovi tiene más de 76000 registros y maemovi más de 37000). Puff, es que es tal la lentitud que en delphi una consulta como esa se me cuelga el pc, en access por lo menos le cuesta pero la ejecuta. Última edición por snowlis fecha: 19-04-2007 a las 18:37:07. |
#7
|
|||
|
|||
parentesis?
aunque hace rato que no trabajo en access, creo que necesita parentesis en los join, quedaria asi:
le saque el campo DESC porque tambien creo que te traera problemas...
tambien puedes probar sin los INNER JOIN
Espero que te sea de ayuda... Saludos |
#8
|
|||
|
|||
Lentitud
En cuanto a la lentitud...
Todas las tablas tienen indices por los campos intervinientes en los join? |
#9
|
|||
|
|||
Gracias Hach por las consultas, las probaré
En cuanto a los indices no los tengo, solo tengo en la carpeta los archivos de delphi y los DBF. Creo que también tenía los indices NT1,NT2 y NT3 pero los borré porque me di cuenta que el delphi se los pasaba por el forro y creo que no servía para nada, pero igual me equivoco. Si se los pongo, las consultas iran más rápidas o en que influye tener los indices o no ? |
#10
|
|||
|
|||
Indices
los indices son indispensables!!!!
estas andando en auto con el freno de mano puesto!!! je para esta consulta en particular necesitas tener los siguientes indices SELECT M.NALBA,M.OBRA,M.FECHA,M.ORIGI,H.ALBA2 , MO.NOME,MO.CLIE,L.PARTE,L.TIPO,L.HORA1 FROM MAEALBA M, LINPRTS L, MAEOBRA MO, HSTMOVI H WHERE M.FECHA > '9/30/2005' AND L.NALBA=M.NALBA AND L.TIPO='E' AND MO.OBRA=L.OBRA AND H.OBRA=MO.OBRA MAEALBA : fecha, nalba LINPRTS : nalba, tipo, obra MAEOBRA : obra HSTMOVI : obra esto es lo ideal, veras la diferencia de velocidad |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error al ejecutar consulta | mierda | SQL | 1 | 11-03-2007 22:06:36 |
Error al Ejecutar consulta de Eliminacion | JoanKa | Varios | 2 | 02-01-2007 16:10:53 |
Ejecutar una consulta de Access | Leviatan | Conexión con bases de datos | 2 | 17-10-2006 10:08:37 |
ejecutar consulta de access | juanmdq | Tablas planas | 2 | 07-01-2005 13:59:19 |
ADO: Error al ejecutar una consulta repetidamente | sostro | Conexión con bases de datos | 6 | 31-08-2004 17:43:50 |
|