Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda consulta sql (https://www.clubdelphi.com/foros/showthread.php?t=72302)

microbiano 09-02-2011 17:12:27

ayuda consulta sql
 
resulta que tengo que sacar la fecha de ultimo pago de un cliente, para ello lo quiero hacer con la siguiente funcion;

Código Delphi [-]
procedure TFcobro.ultimo_pago;
var wcontrato_meses:string;
 wanio_ejercicio:string;
begin
 wanio_ejercicio:=FormatDateTime('yyyy',Date);
 wcontrato_meses:=Trim(Self.txtcontrato.Text);

 if wcontrato_meses<>'' then
  begin
    with fmodulo.Qry_Temp do
     begin
       sql.Clear;
       SQL.Add('SELECT contrato,anio, Max(Fecha) AS Fecha');
       sql.Add('from recibo');
       sql.Add('group by contrato,anio');
       sql.Add('(((having contrato)=:Pcontrato) and ((anio)=:Panio)');
       Parameters.ParamByName('Pcontrato').Value:=Trim(wcontrato_meses);
       Parameters.ParamByName('Panio').Value:=Trim(wanio_ejercicio);
       try
        Open;
        if not Fmodulo.Qry_Temp.IsEmpty then
         begin
          while not Fmodulo.Qry_Temp .Eof do
           begin
             self.L_ultimaFechaPago.Caption:=DateToStr(FieldByname('fecha').AsDateTime);
             Next;
           end;
         end;  
       except
        on e: EoleException do
         begin
          MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
         end;
       end;  
     end;  
  end;
end;

sin embargo, me muestra un error cuando paso los parametros que es el siguiente:

Error: Error de sintaxis (falta operado) en la expresión de consulta 'anio (((having contrato=?) and ((anio)=?)' codigo: -2147217900


no entiendo por que si ejecuto la consulta desde el analizador de consultas no tengo problemas.


que creen que pueda ser, de antemano muchas gracias por tomarse el tiempo para leer este mensaje.

rrf 09-02-2011 18:06:19

Hola.

¿Has visto como queda construida la orden SQL antes de que se ejecute la línea con el "open"?. Por ejemplo con un showmessage. Quizás te muestre un error que te ha pasado desapercibido.

Saludos.

microbiano 09-02-2011 18:42:03

Gracias
 
Me Respondo, revisando la consulta tuve un error grave, quedo de la siguiente manera el error lo pongo en engritas y otro color.
Código Delphi [-]
procedure TFcobro.ultimo_pago;
var wcontrato_meses:string;
 wanio_ejercicio:string;
begin
 wanio_ejercicio:=FormatDateTime('yyyy',Date);
 wcontrato_meses:=Trim(Self.txtcontrato.Text);

 if wcontrato_meses<>'' then
  begin
    with fmodulo.Qry_Temp do
     begin
       sql.Clear;
       SQL.Add('SELECT contrato,anio, Max(Fecha) AS Fecha');
       sql.Add('from recibo');
       sql.Add('group by contrato,anio');
       sql.Add('having (((contrato)=:Pcontrato) and ((anio)=:Panio))');
       Parameters.ParamByName('Pcontrato').Value:=Trim(wcontrato_meses);
       Parameters.ParamByName('Panio').Value:=Trim(wanio_ejercicio);
       try
        //open;
        Self.txt2.Text:=SQL.Text;
        Open;
        if not Fmodulo.Qry_Temp.IsEmpty then
         begin
          while not Fmodulo.Qry_Temp .Eof do
           begin
             self.L_ultimaFechaPago.Caption:=DateToStr(FieldByname('Fecha').AsDateTime);
             Next;
           end;
         end;  
       except
        on e: EoleException do
         begin
          MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
         end;
       end;  
     end;  
  end;
end;


La franja horaria es GMT +2. Ahora son las 22:28:49.

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