Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 15
Salnhack Va por buen camino
este es el codigo completo que le paso al query

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;
Responder Con Cita
  #2  
Antiguo 13-09-2012
hoyosfelix hoyosfelix is offline
Miembro
 
Registrado: ago 2010
Ubicación: San Antonio, Paraguay
Posts: 38
Poder: 0
hoyosfelix Va por buen camino
Respuesta "Ayuda con consulta"

Hola, prueba de esta manera:

Código Delphi [-]
var    
vsql : string;  

begin   
  ....   
  vsql := ' SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO) ';   
  vsql := vsql + ' FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO ';   
  vsql := vsql + ' INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA ';   
  vsql := vsql + ' INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO ';    
  vsql := vsql + ' WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2 ';   
  vsql := vsql + ' GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS ';   
  vsql := vsql + ' ORDER BY C.IDCARRO ';     
  SQL.Add(vsql);    
  ParamByName('FECHA1').AsString:=inicio;   
  ParamByName('FECHA2').AsString:=fin;   
  Open; 
end

Fijate en los espacios al inicio y final de cada vsql, eso te asegura que al concatenar tengas separada tu sql.

Saludos.

Última edición por Casimiro Noteví fecha: 13-09-2012 a las 23:43:51. Razón: Aparece en una sola línea, no formatea al estilo Delphi.
Responder Con Cita
  #3  
Antiguo 13-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
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
Responder Con Cita
  #4  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 15
Salnhack Va por buen camino
Unhappy

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

Última edición por Salnhack fecha: 14-09-2012 a las 15:04:33.
Responder Con Cita
  #5  
Antiguo 14-09-2012
hoyosfelix hoyosfelix is offline
Miembro
 
Registrado: ago 2010
Ubicación: San Antonio, Paraguay
Posts: 38
Poder: 0
hoyosfelix Va por buen camino
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.

Código SQL [-]
var    
  vsql : string;  
begin        
  vsql := ' SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO) ';   
  vsql := vsql + ' FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO ';   
  vsql := vsql + ' INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA ';   
  vsql := vsql + ' INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO ';    
  vsql := vsql + ' WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2 ';   
  vsql := vsql + ' GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS ';   
  vsql := vsql + ' ORDER BY C.IDCARRO ';     

  SQL.Close;
    SQL.Clear;
    SQL.Add(vsql);    
    Query.Params.Items[0].AsDate:=fecha1.Date;
    Query.Params.Items[1].AsDate:=fecha2.Date;
  SQL.Open; 
end

Saludos.
Responder Con Cita
  #6  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 15
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
  #7  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 15
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
  #8  
Antiguo 14-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿Pero los campos fecha en la base de datos son del tipo texto?
Responder Con Cita
  #9  
Antiguo 14-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 15
Salnhack Va por buen camino
no son de tipo fecha
Responder Con Cita
  #10  
Antiguo 13-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Ves, así es más fácil, es que no tenemos bola mágica
Código Delphi [-]
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');

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.
Responder Con Cita
  #11  
Antiguo 13-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
Te falta poner un espacio antes o después, como quieras, en cada línea, para que luego no queden todas "pegadas"
Eso no es necesario, pues quedan en líneas distintas.

// Saludos
Responder Con Cita
  #12  
Antiguo 13-09-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Eso no es necesario, pues quedan en líneas distintas.
// Saludos
Cierto, solamente hace falta cuando se usa el método escrito por hoyosfelix.
Me he confundido porque yo suelo usar sql.text:
Código Delphi [-]
query.sql.text := 'select *' +
'  from tabla'+
'  where algo';
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 11:59:56.


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
Copyright 1996-2007 Club Delphi