Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
dando respuesta a tu 1 pregunta probe la consulta an access y me sale el mismo error "Error en Sintanxis (Falta Operador)"
Responder Con Cita
  #22  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
Unhappy

este es mi codigo

Código Delphi [-]
with datamodule29.Query2 do
    Begin
     Close;
     SQl.Clear;
     SQL.Add('Select idmes from mes where mes=mes');
     ParamByName('pmes').AsString:=suiDBLookupComboBox2.Text;
     Open;
     mes:=FieldByName('idmes').AsInteger;
     Close;
     SQl.Clear;
     SQL.Add('Select * from mes where idmes=idmes');
     ParamByName('pidmes').AsInteger:=mes;
     Open;
     inicio:=FieldByName('inicio').AsString;
     fin:=FieldByName('fin').AsString;
     Close;
     SQL.Clear;
     SQL.Add('SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO)');
     SQL.Add('FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO');
     SQL.Add('INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA');
     SQl.Add('INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO');
     SQL.Add('WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2');
     SQL.Add('GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS');
     SQL.Add('ORDER BY C.IDCARRO');
     ParamByName('FECHA1').AsString:=inicio;
     ParamByName('FECHA2').AsString:=fin;
     Open;
    end;

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

Código Delphi [-]
Close;
     SQl.Clear;
     SQL.Add('Select idmes from mes where mes=mes');
     ParamByName('pmes').AsString:=suiDBLookupComboBox2.Text;
     Open;
     mes:=FieldByName('idmes').AsInteger;

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).

Código Delphi [-]
 Close;
     SQl.Clear;
     SQL.Add('Select * from mes where idmes=idmes');
     ParamByName('pidmes').AsInteger:=mes;
     Open;
     inicio:=FieldByName('inicio').AsString;
     fin:=FieldByName('fin').AsString;

luego esas dos variables la paso como parametro de condicion a la consulta que nos esta dando trabajo
Código Delphi [-]
     Close;
     SQL.Clear;
     SQL.Add('SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO)');
     SQL.Add('FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO');
     SQL.Add('INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA');
     SQl.Add('INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO');
     SQL.Add('WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2');
     SQL.Add('GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS');
     SQL.Add('ORDER BY C.IDCARRO');
     ParamByName('FECHA1').AsString:=inicio;
     ParamByName('FECHA2').AsString:=fin;
     Open;

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
Responder Con Cita
  #23  
Antiguo 14-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Pero los campos fecha en la base de datos son del tipo texto?
Responder Con Cita
  #24  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
no son de tipo fecha
Responder Con Cita
  #25  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Salnhack Ver Mensaje
no son de tipo fecha
¿Y entonces de qué tipo son?
Responder Con Cita
  #26  
Antiguo 15-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Y entonces de qué tipo son?
Creo que quiso decir:

Cita:
no, son de tipo fecha
// Saludos
Responder Con Cita
  #27  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Señor muerto, esta tarde llegamos.
Quise decir:
Señor, muerto está, tarde llegamos.
Responder Con Cita
  #28  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
disculpa mi falta de Gramática, que cuando uno escribe rapido se le van esos detalles
Responder Con Cita
  #29  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Y si son de tipo fecha, ¿por qué usas string?
Código Delphi [-]
ParamByName('FECHA1').AsString:=inicio;
ParamByName('FECHA2').AsString:=fin;
Responder Con Cita
  #30  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
funciona igual que si lo hiciera asi

Código Delphi [-]
var inicio,finatetime;

...

ParamByName('FECHA1').AsDateTime:=inicio;
ParamByName('FECHA2').AsDateTime:=fin;

...


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.

Última edición por Salnhack fecha: 15-09-2012 a las 15:44:09.
Responder Con Cita
  #31  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veamos, si quitamos toda la parafernalia queda esto:
Código SQL [-]
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
Pruébalo en ibexpert, flamerobin, etc. en lo que uses. Pon alguna fecha fija, si quieres, sin parámetros.

Código SQL [-]
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 '01.01.2012' AND '15.09.2012'
GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS
ORDER BY C.IDCARRO

Cuando esté correcto y funcionando, entonces será el momento de pasarlo al delphi.
Responder Con Cita
  #32  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
cuando corro la consulta me sale el siguiente error
Código SQL [-]
Error en Sintaxis (Falata Operador) en la expresión de consulta'HR.IDCARRO = C.IDCARRO
INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA
INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO'.

Última edición por Salnhack fecha: 15-09-2012 a las 17:50:31.
Responder Con Cita
  #33  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿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í?
Responder Con Cita
  #34  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
Unhappy

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

Última edición por Salnhack fecha: 15-09-2012 a las 22:45:06.
Responder Con Cita
  #35  
Antiguo 15-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #36  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
ve a ver si la puedes ver ahora
Imágenes Adjuntas
Tipo de Archivo: jpg acces.jpg (19,8 KB, 5 visitas)
Responder Con Cita
  #37  
Antiguo 15-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
Smile

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

Código SQL [-]
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 01/01/2012 AND 31/01/2012 
GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS 
ORDER BY C.IDCARRO


lo he probado pero todavia me esta devolviendo mal los datos
Responder Con Cita
  #38  
Antiguo 16-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Salnhack Ver Mensaje
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
Vaya, las cosas de microsoft, haciendo las cosas diferentes a los demás

Cita:
Empezado por Salnhack Ver Mensaje
lo he probado pero todavia me esta devolviendo mal los datos
¿Mal?, ¿qué quieres decir?
Responder Con Cita
  #39  
Antiguo 16-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.073
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Salnhack Ver Mensaje
lo he probado pero todavia me esta devolviendo mal los datos
Código Delphi [-]
WHERE CO.FECHA BETWEEN 01/01/2012 AND 31/01/2012
Las fechas en las sql van entre comillas, aunque son fechas.
Código SQL [-]
WHERE CO.FECHA BETWEEN '01/01/2012' AND '31/01/2012'
Responder Con Cita
  #40  
Antiguo 17-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
en access el parametro de fecha se pone así, sino lo reconoce como texto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con consulta SQL n03l SQL 4 18-04-2007 22:03:40
Ayuda con consulta raco Varios 6 06-04-2005 02:14:25
Ayuda con consulta SQL tgsistemas SQL 9 18-02-2004 16:14:07
Ayuda con consulta JorgeBec SQL 7 21-10-2003 20:25:16
ayuda en consulta bismarito Firebird e Interbase 1 29-07-2003 00:40:45


La franja horaria es GMT +2. Ahora son las 09:39:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi