Cita:
Empezado por Nicolas_2011
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;