Ver Mensaje Individual
  #9  
Antiguo 26-06-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Nicolas_2011 Ver Mensaje
Bien yo habia comenzado.. con la ultima opcion pero la deje a medias..

Código SQL [-]
SELECT SUM (detalle_factura.Subtotal) AS total
 FROM
detalle_factura, factura_compra, producto
where 
detalle_factura.id_producto = producto.id_producto and 
detalle_factura.id_fc = factura_compra.id_fc and
detalle_factura.id_fc like :fact
No veo porque la consulta la debas hacer uniendo a la tabla factura_compra ni a la de producto. con la siguiente sentencia ya obtendrias el resultado de total.

Código SQL [-]
SELECT SUM (Subtotal) AS total
FROM detalle_factura
WHERE detalle_factura.id_fc like :fact

No se porque usas un like, esto podría traerte valores incorrectos. mejor busca el valor exacto.

El problema de esta solución (solo la menciono) es que debes ir por cada inserción y/o actualización a la DB a obtener un resultado que en teoría ya tienes en memoria. generando una carga innecesaria. Para efectos del ejercicio que estás realizando es funcional y no genera ningun problema. pero cuando se trata de muchas estaciones, redes extensas y demás. Detalles como estos hacen diferencia.

Otra posible solución que te planteaba es recorrer el dataset para calcular el resultado. Una función como esta puede servir.

Código Delphi [-]
function ObtTotal(pDataSet : TDataSet; pCampTot : string) : Extended;
  var
    lResult : Extended;
    lBookMark : TBookmark;
begin
  lResult := 0;
  lBookMark := pDataSet.GetBookmark;
  try
    pDataSet.First;
    while not pDataSet.Eof do
    begin
      try
        try
          lResult := lResult + pDataSet.Fields.FieldByName(pCampTot).AsFloat;
        finally
          pDataSet.Next
        end;
      except
        Result := -1;
      end;
    end;
  finally
    if pDataSet.BookmarkValid(lBookMark) then
      pDataSet.GotoBookmark(lBookMark);
    Result := lResult;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita