Delphi - Ayuda con TStringGrid. Ventas por mes y año

 
Vista:
Imágen de perfil de J. Arturo

Ayuda con TStringGrid. Ventas por mes y año

Publicado por J. Arturo (2 intervenciones) el 23/01/2014 15:32:55
Mi problema es el siguiente, tengo tres tablas que son, Articulos, Facturas, Facturadt. Quiero mostrar en un StringGrid de un articulo en consulta, las cantidades vendidas por mes-año, esto con el objetivo de poder ver de impacto las ventas y poder tomar una mejor decición en los pedidos. El procedimiento que tengo es el siguiente:

procedure TMovimiento_Pedidos.desglose_articulo_ventas;
var conte, i, c1 : integer;
compras3, estado1 : string;
fecha1, fecha2 : string; //TdateTime;
begin
estado1 := 'ANULADO';
fecha1 := datetostr(fechaini.DateTime);
fecha2 := datetostr(fechafin.DateTime);
c1 := 0;

IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select count(*) as entradas from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID)
'+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
' where a.ARCODIGO = '''+Codigo_Prod.Text+'''');

IBQuery4.Prepare;
IBQuery4.Open;

begin
conte := IBQuery4.FieldByName('entradas').AsInteger;


IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as ventas_mes'+
'from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between ' ''+fecha1+''' and '''+fecha2+''') '+
'where a.ARCODIGO = '''+Codigo_Prod.Text+''' group by 1, 2'+
'order by 1, 2');

IBQuery4.Prepare;
IBQuery4.Open;
end;

for i := 1 to conte do
begin
begin
sg1.Cells[1+c1,3] := IBQuery4.FieldByName('meses1').AsString+'-'+IBQuery4.FieldByName('anio1').AsString;
sg1.Cells[2+c1,3] := IBQuery4.FieldByName('ventas_mes').AsString;

c1 := c1+2;
end;
IBQuery4.Next;
end;

end;

Y cuando lo corro me da un error con el mensale "Attempt to execute an unprepared dynamic SQL statement"

No se donde puedo tener el problema.

Por favor si me pueden ayudar, o replantear el procedimiento.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con TStringGrid. Ventas por mes y año

Publicado por E.T. (1244 intervenciones) el 23/01/2014 17:24:24
Comenta o elimina las lineas: IBQuery4.Prepare;
todas las que haya e intenta de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de J. Arturo

Ayuda con TStringGrid. Ventas por mes y año

Publicado por J. Arturo (2 intervenciones) el 23/01/2014 17:48:31
No me sirvio tu consejo, de eliminar el IBQuery4.Prepare;

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

Ayuda con TStringGrid. Ventas por mes y año

Publicado por E.T. (1244 intervenciones) el 24/01/2014 23:16:11
Para probar que no sea la sentencia la que está mal, pon antes de cada open esta linea
IBQuery4.SQL.savetofile('sql.txt');
abre el archivo sql.txt que se creará en la carpeta donde está el programa y prueba la sentencia con alguna herramienta de gestion de tu base de datos, si las dos sentencias ejecutan sin problema, el error está en el programa, si no la sentencia tiene algo mal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar