![]() |
Ayuda con consulta
Hola a todos
escribo para ver quien me puede ayudar tengo 4 tablas carro idcarro nocarro indicecons 1 TSA-590 10 2 TSA-250 20 hojaruta idhojaruta idcarro nohojatuta chofer 1 1 150 Juan 2 2 151 Pedro deschojaruta iddeschojaruta idhojaruta origen destino kmrecorrido fecha 1 1 Las Tunas Holguin 74 1/09/2012 2 1 Holguin Las Tunas 74 1/09/2012 3 2 Las Tunas Santuago 204 2/09/2012 consumo idconsumo idcarro consumo chip fecha 1 1 10 150 1/09/2012 2 2 50 12 1/09/2012 3 1 10 20 2/09/2012 4 2 10 25 2/09/2012 5 2 40 50 3/09/2012 necesito hacer una consulta que me selecione por carro los km recorrido y el consumo en un rango de fecha 1/9/2012-30/9/2012 algo asi carro indicecons kmrecorrido consumo TSA-590 10 148 20 TSA-250 20 204 100 este es el resultado que me deveria dar y estoy utilizando esta consulta pero me devuelve los resultados incorrectamente |
He traducido tu SQL utilizando JOINs.
El probelma, me parece, radica en que no tienes unido de ninguna manera el consumo con hojaruta. En este caso, el SELECT te devolverá todos los elementos de consumo y todos los elementos de hojaruta y todas sus posibles combinaciones. Si luego de filtrar entre fechas obtienes: consumo (1, 2, 3) hojaruta (a, b, c) El select te devolverá: (1-a, 1-b, 1-c, 2-a, 2-b, 2-c, 3-1, 3-b, 3-c) Supongo que la mejor opción, puesto que no hay relación entre consumo y hojaruta es hacer dos SELECTs dentro de uno: Algo así:
|
hola duilioisola
he probado el codigo que me sugeriste pero me da error en sintaxis |
Respuesta "Ayuda con consulta"
Buen día Salnhack, te paso un select para probar
SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO) FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2 GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS ORDER BY C.IDCARRO Saludos... |
Cita:
![]() Y te ahorras todo el trabajo que has hecho poniendo colores por palabras, tipos de letras, etc. Gracias :) |
Respuesta "Ayuda con consulta"
Buena tarde,
Gracias por el consejo. Realmente, intenté resaltar la sintaxis de SQL, pero no entendía muy bien cómo funcionaba, ahora me quedó claro. En la próxima entrada voy a utilizar correctamente los tag's. Saludos. |
Gracias ^\||/
|
Cita:
tengo poco conocimiento de SQL solo lo basico por eso me resulta dificil lograr el resultado que espero |
Cita:
Se parará en una línea, indicará algo más, el mensaje completo y exacto dirá otra cosa, pégalo aquí... no somos adivinos ;) |
Respuesta "Ayuda con consulta"
Hola,
Para verificar que la consulta traiga algún resultado se debe probar primero en una herramienta de SQL, por ejemplo el FlameRobin. Allí en vez de :fecha1 y :fecha2 podés cambiar por un rango que tengas en tu tabla consumo, ejemplo:
Si devuelve un resultado significa que la consulta está correcta y luego ya se puede pasar al SQL de tu componente Query en Delphi. Es cierto lo que dice Casimiro Notevi, sería interesante saber en dónde estás corriendo la consulta, si en Delphi, en FlameRobin u otro; si tuvieramos más datos podríamos ir directo al problema. Saludos. |
1 Archivos Adjunto(s)
La consulta la estoy corriendo en deplhi y el error que me muestra es el que adjunto
|
Parece que no has tecleado bien la consulta, ¿puede ser?, pon el código que lo veamos.
Seguimos sin ser adivinos ;) |
este es el codigo completo que le paso al query
|
Respuesta "Ayuda con consulta"
Hola, prueba de esta manera:
Fijate en los espacios al inicio y final de cada vsql, eso te asegura que al concatenar tengas separada tu sql. Saludos. |
Ves, así es más fácil, es que no tenemos bola mágica ;)
Te falta poner un espacio antes o después, como quieras, en cada línea, para que luego no queden todas "pegadas" EDITO: Lo que ha dicho hoyosfelix, no lo había visto. |
hoyosfelix, para que no salga el código "hecho un desastre" te aconsejo que primero envies el mensaje y seguidamente lo edites. El problema es que si le das a "previsualizar" antes de "enviar", se descuadra como te ha salido a ti.
Le tenemos que dar un repaso a la configuración del vbulletin :) |
Cita:
// Saludos |
Cita:
Me he confundido porque yo suelo usar sql.text:
|
Hola a todos he probado la via de hoyosfelix pero me sigue dando el mismo error
Error en sintaxis falta operador http://clubdelphi.com/foros/attachme...9&d=1347566837 |
Respuesta "Ayuda con consulta"
Buen día, vamos por paso.
1º Quiero saber si la consulta funciona, favor probar en el diseñador de consulta SQL de Access, ejecutarlo y ver resultados. 2º Podriamos ver de nuevo tu sintaxis en Delphi. 3º En tu form poner 2 componentes TDateTimePicker que se llamen fecha1 y fecha2, que vamos a pasar como parámetro a tu consulta. 4º Luego, reemplazar tu código actual por el siguiente, ya que veo en el código anterior que las variables que se pasan a la SQL no son fechas, son enteros pero no fecha de la forma '01/09/2012' y el SQL te lanza el error ya que espera una fecha válida.
Saludos. |
dando respuesta a tu 1 pregunta probe la consulta an access y me sale el mismo error "Error en Sintanxis (Falta Operador)"
|
este es mi codigo
explico en mi form hay dos combobox en uno cargo el año y en el segundo los meses que trae ese año cuando doy clic en el boton aceptar lo primero es escoger el id del mes selecionado y asignarlo a una variable
luego paso esta variable como condicion para selecionar el rango de fecha del mes ejemplo enero del 2012 es del 01/01/2012 hasta 31/01/2012, y estos valores se lo asigno a dos variables (inicio y fin).
luego esas dos variables la paso como parametro de condicion a la consulta que nos esta dando trabajo
espero que con esto haberme pordido explicar bien y puedan entender mi codigo esta consulta es para ser cargada en un qreport asociado al query !!!:-| |
¿Pero los campos fecha en la base de datos son del tipo texto? :confused:
|
no son de tipo fecha
|
Cita:
|
Cita:
Cita:
|
Señor muerto, esta tarde llegamos.
Quise decir: Señor, muerto está, tarde llegamos. |
disculpa mi falta de Gramática, que cuando uno escribe rapido se le van esos detalles
|
Y si son de tipo fecha, ¿por qué usas string?
|
funciona igual que si lo hiciera asi
segun he analizado el error no radica en el tipo de dato en que pase la variebles de condicion sino en la estructura y sintaxis del codigo SQL. Porque con mi primer código la sentencia SQL no daba error, lo que no devolvia los valores requeridos y en esta que me propone hoyosfelix, tiene un error en sintaxis y por eso me da el error, he tratado de entenderla pero me resulta dificil este metodo de combinación con INNER JOIN , he estado estudiando en variso cursos online esta estructuración pero como la combinacion está tan compleja no he logrado aun decifrar donde puede estar el error en sintaxis. espero que algunos de ustedes con mas esperiencia en este tema me pueda ayudar. |
Veamos, si quitamos toda la parafernalia queda esto:
Pruébalo en ibexpert, flamerobin, etc. en lo que uses. Pon alguna fecha fija, si quieres, sin parámetros.
Cuando esté correcto y funcionando, entonces será el momento de pasarlo al delphi. |
cuando corro la consulta me sale el siguiente error
|
¿Has comprobado que esos nombres de campos son correctos en sus tablas?
¿Por qué no extraes la "metada" (estructura de la base de datos) con ibexpert o el programa que uses y lo pegas aquí? |
En cuanto a la primera pregunta si, los campos se corresponde con los de mi tabla y en cuanto a la segunda utiliso Access y no se como extraer lo que me pides, Adjunto una captura de pantalla a ver si esto te puede ayudar
|
Access... no sé si admite "inner join".
Por cierto, el mensaje de error no lo has "copiado y pegado", deberías de hacerlo así. Y la imagen que has puesto en el .rar a mi me dice que está defectuosa. Cuando estés escribiendo un mensaje, si miras un poco más abajo, verás que hay una opción para adjuntar imágenes. |
1 Archivos Adjunto(s)
ve a ver si la puedes ver ahora
|
Ya resolvi el error que me daba la consulta SQL, en Access cuando se utiliza mas de una ves INNER JOIN debes agruparlos con parentisis, el codigo sql me quedaria asi
lo he probado pero todavia me esta devolviendo mal los datos |
Cita:
Cita:
|
|
en access el parametro de fecha se pone así, sino lo reconoce como texto
|
| La franja horaria es GMT +2. Ahora son las 09:22:41. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi