Estoy trabajando en los reportes de una aplicación y opté por usar un procedimiento para generar una tabla local temporal (BDE) para almacenar las lineas del reporte y luego generar la salida usando un TQuickRep.
Todo funciona razonablemente bien pero el rendimiento es patetico, haciendo diversas pruebas logre detectar que si quito la linea de "ExecSQL" que corresponde al insert de los datos en la tabla temporal el rendimiento cambia drasticamente (desgraciadamente no se genera el reporte
) pero agregar unos 400 registros en el archivo temporal toma hasta 20seg (si quito la linea "ExecSQL" todo el proceso dura menos de 1 seg) por lo que asumo que mi problema de rendimiento está directamente asociado al insert
Este es el código: (fDataMod.Q1 es un tQuery conectado a un TDatabase local).
Código Delphi
[-]
With fDataMod.Q1 do
Begin
Sql.Clear;
Sql.Add('Insert into '+CuotedStr(FName));
Sql.Add('(CodMay, CodAux, Descrip, Ref, Concep, NumComp, FchComp,');
Sql.Add(' M1, M2, M3, M4, LinTop, Bold, IdDetalle ) Values');
Sql.Add('(:CodMay, :CodAux, escrip, :Ref, :Concep, :NumComp, :FchComp,');
Sql.Add(' :M1, :M2, :M3, :M4, :LinTop, :Bold, :IdDetalle)');
ParamByName('CodMay').AsString := Datos.CMay;
ParamByName('CodAux').AsString := Datos.CAux;
ParamByName('Descrip').AsString := Datos.Desc;
ParamByName('Ref').AsString := Datos.Ref;
ParamByName('Concep').AsString := Datos.Conc;
ParamByName('NumComp').AsString := Datos.NComp;
ParamByName('FchComp').AsDate := Datos.FComp;
ParamByName('M1').AsCurrency := Datos.M1;
ParamByName('M2').AsCurrency := Datos.M2;
ParamByName('M3').AsCurrency := Datos.M3;
ParamByName('M4').AsCurrency := Datos.M4;
ParamByName('LinTop').AsInteger := Datos.LTop;
ParamByName('Bold').AsBoolean := Datos.Bold;
ParamByName('IdDetalle').AsInteger := Datos.IdDet;
ExecSQL;
End;
End;
¿ El uso de Parametros afecta (mucho) el rendimiento ?
¿ Que puedo hacer para acelerar el proceso de inserción ?
Gracias