Sumar campos

Quiero sumar un campo que tiene unos registros de números decimales, pero que estén dentro de una determinada fecha, algo así como
Sumar campo precios que en campo fecha tengan entre 1 de enero al 1 de febrero, estoy usando 3 controles datasource1, adotable1, adoconnection1, entonces tendría que usar un adoquery para realizar la consulta, el campo con los valores a sumar se llama importe, y el campo con las fechas se llama fecha, la base de datos es org.mdb es decir del access, y el resultado necesito ponerlo en un componente memo del delphi o en un edit, no se como hacer la consulta usando los componentes ado,¿cómo lo hago? También me gustaría saber como puedo sumar campos con componentes ado sin usar adoquery.
Muchas gracias!

2 respuestas

Respuesta
1
No se si he entendido bien tu pregunta, creo que lo que quieres saber es la suma de todos los importes en un rango de fecha. Yo lo que haría es usar el filter del adorable para seleccionar solo los registros de la fecha que te interese y luego recorrerlos sumando todos los importes y almacenándolo en una variable que luego puedes mostrar en un edit.
Seria algo así:
var
ImporteTotal: Integer;
begin
ImporteTotal := 0;
adotable.disablecontrols;
try
adotable.filter := '(FECHA >= '1/1/2001') AND (FECHA < 1/2/2001)';
adotable.filtered := true;
adotable.first;
while not adotable.EOF do
begin
ImporteTotal := ImporteTotal + adotable['IMPORTE'];
adotable.next;
end;
adotable.filter := '';
adotable.filtered := false;
edit.text := Inttostr(ImporteTotal);
finally
adotable.enablecontrols;
end;
end;
El código no lo he probado así que si lo pegas a saco te dará algún error :)
Esto lo puedes meter en el OnShow del formulario, o donde quieras. El disablecontrols y enablecontrols solo son necesarios si utilizas el adorable para mostrar datos mediante un datasource, para que no se vea como recorres toda la tabla.
Respuesta
1
Para eso no te queda otra que el SQL (ADOQuery), por la rapidez, ya que de lo contrario tendrías que recorrer toda la tabla e ir sumando los registros (muy lento).
Para el ADOQuery pones en la propiedad SQL:
SELECT SUM(PRECIO)
FROM TABLA
WHERE (FECHA>=:Desde) AND (FECHA<=:Hasta)
:Desde y :Hasta son variables en SQL
Luego les definis el tipo en la Propiedad Params
Estas se modifican en runtime de la sig. forma
//Cerras el SQL
ADOQuery. Close;
//Modificas las variables
ADOQuery.Params.ParamsByName('Desde').Value := ValorDesde;
ADOQuery.Params.ParamsByName('Hasta').Value := ValorHasta;
//y abris el query para actualizar los datos
ADOQuery. Open;
Espero que esto te ayude, cualquier cosa cerra esta pregunta y haceme otra.
DX

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas