Muchas gracias por la respuesta, uso Paradox 7 (disculpad por no haberlo dicho antes), he añadido esto a la función:
Código Delphi
[-]procedure TFormPresupuestos.CalcularTotal;
var
import, total: real;
begin
import:=TPresProdDetalle.FieldByName('Importe').asFloat;
QSuma.Close;
QSuma.Params[0].AsInteger:=TPresupuestosIdpres.AsInteger;
QSuma.Open;
total:=QSuma.FieldByName('ST').Value;
TPresupuestosSumaTotal.AsFloat:=total;
end;
y ejecuto paso a paso para depurar y resulta que el TPresProdDetalle es tabla detalle y hasta que no confirmo el presupuesto no realizo TPresProdDetalle, no se si el error puede venir por ahí, ya que si pruebo solo con un producto en el detalle el importe que recoge es un numero erroneo, a pesar de que a esta funcion se le llama en el evento TPresProdDetalleAfterInsert, no se si vosotros tendreis alguna idea. Muchas Gracias.