Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Existe alguna función que sume todos los valores de un campo numérico de una tabla y me arroge el resultado?
Gracias, saludos.

Silvio.-
Responder Con Cita
  #2  
Antiguo 08-06-2004
Sirkius Sirkius is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
Sirkius Va por buen camino
Cita:
Empezado por silviodp
Existe alguna función que sume todos los valores de un campo numérico de una tabla y me arroge el resultado?
Gracias, saludos.

Silvio.-
Pues creo que segun la base de datos es SUM(campo) o COUNT(campo).

Saludos
Responder Con Cita
  #3  
Antiguo 08-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Puedes hacer una sentencia SQL de suma

Código SQL [-]
 select sum(campo) as suma
 from tabla
 where condiciones
y desde Delphi luego recuperar el valor
Código Delphi [-]
 var
   i: integer;
 begin
 .....
   Query.Open;
   i := Query.FieldByName('Suma').AsInteger;

Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #4  
Antiguo 08-06-2004
Sirkius Sirkius is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
Sirkius Va por buen camino
Cita:
Empezado por Sirkius
Pues creo que segun la base de datos es SUM(campo) o COUNT(campo).

Saludos
Ups... vaya error que metí: COUNT no suma solo cuenta...
Responder Con Cita
  #5  
Antiguo 08-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Estoy utilizando Paradox 7, con el BDE, y creo que esa funcion no la tiene, me parece...
Saben si alguna otra?
Gracias.

Silvio.-
Responder Con Cita
  #6  
Antiguo 08-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Pues el Local SQL (que es lo que usa el BDE) sí que incorpora el SUM (de hecho, cualquier motor de bases de datos que se precie mínimamente lo incorpora, es casi básico)

Quizás es que no lo estás haciendo correctamente

Por qué no explicas que estás haciendo exactamente?
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #7  
Antiguo 09-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Lo que quiero hacer es que cuando cargo el detalle de una factura (Tabla Detproducto), me vaya sumando el total de cada producto en otro campo que pertenece a la tabla Consumos, que seria el total de la factura.
Me explico?, estoy trabajando con el BDE con tablas Paradox 7, en Delphi 5.
Muchas gracias.

Silvio.-
Responder Con Cita
  #8  
Antiguo 10-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Lo siento silviodp, quizás estoy algo espeso, pero no termino de entenderte

Por que no miras de ponernos la estructura de las tablas y la relación que hay entre ellas? A ver si así lo entiendo mejor
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #9  
Antiguo 10-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Ok, no hay problema, la estructura de las tablas es la siguiente:

TblConsumo:

IDConsumo (Numerico)
Facturan (N)
Fecha (Date)
Seccion (N)
Vehiculo (N)
Observacion (Memo)
Totalfactu (N)

TblDetproducto: (tabla detalle, es el detalle de la factura cargada, donde se cargan los productos, y se calcula el precio y el iva de cada uno, segun la cantidad)

Consumo (N)
IDDetal (N)
Producto (Alpha)
Cantidad (N)
Precunit (N)
Ivaunit (N)
Precneto (N)
Netoiva (N)
Precfinal (N)

Las dos tablas están relacionadas por la relación Maestro-Detalle mediante el campo IDConsumo en la primera (que es la Maestro) y Consumo de la segunda (Detalle).
Y bueno, a medida que voy cargando los productos en la tabla Detalle, quiero que me vaya Sumando en el campo Totalfactu de la Maestro el precio de cada producto cargado (es decir del campo Precfinal), que es el precio final de la factura...
Yo lo estoy haciendo así:
en el boton Grabar del form que me permite cargar un Producto
Código:
procedure TForm16.GrabarClick(Sender: TObject);
begin
  ModuloDatos.TblDetproducto.Post;
  Modulodatos.DSDetproducto.Enabled:=True;
  Form4.Modificar.Enabled:=True;
  Form4.Quitar.Enabled:=True;
  Close;
end;
y en el BeforePost de la tabla TblDetproducto hago
Código:
procedure TModuloDatos.TblDetproductoAfterPost(DataSet: TDataSet);
var
 x,y:Currency;
 n,m:Integer;
begin
 m:=ModuloDatos.TblDetproducto.RecordCount;
 For n:=1 To m Do
  begin
   x:=ModuloDatos.TblDetproducto.FieldValues['PRECFINAL'];
   y:=y+x;
  end;
  ModuloDatos.TblConsumos.FieldValues['TOTALFACTU']:=y;
end;
pero no funciona, es decir lo hace la primer vez pero cuando cargo otro producto, me arroja el resultado de sumar dos veces el último.
Haber si me pueden dar una idea.
Espero haber sido mas claro. Haaa, me olvidaba uso Paradox 7, y trabajo con Delphi 5.
Gracias.

Silvio.-
Responder Con Cita
  #10  
Antiguo 10-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Vale, ahora sí lo entiendo. Puedes hacer una cosa así:

En el AfterPost (que no BeforePost) puedes hacer.....

Código Delphi [-]
  procedure TForm1.Table1AfterPost(DataSet: TDataSet);
  var
    Q: TQuery;
  begin
    Q := TQuery.Create(Selft);
    Q.Database := 'la que sea';
    try
      Q.SQL.Text := 'select sum(Cantidad*Precunit) suma from TblDetproducto where Consumo = ' +
          Table1.FieldByName('IDConsumo ').AsString;
      Q.Open;
      if Q.IsEmpty then
        Table1.FieldByName('Totalfactu').AsFloat := 0
      else
        Table1.FieldByName('Totalfactu').AsFloat := Q.FieldByName('suma').AsFloat;
    finally
      FreeAndNil(Q);
    end;
  end;
Donde Table2 será tu tabla maestra

Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #11  
Antiguo 10-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Cbrrr:
Mirando el código que me escribiste,yo lo traté de hacer de ésta forma
Inserté en el Modulo de datos una Query, que se llama Consulta1, en su propiedad SQL escribi lo siguiente:
Código:
select sum(Precfinal) As Suma
From Det_producto Inner Join Consumos On Det_producto.Consumo=Consumos.IdConsumo;
Y en el evento AfterPost de la tabla TblDetProducto lo siguiente:
Código:
procedure TModuloDatos.TblDetproductoAfterPost(DataSet: TDataSet);
Var
 x:Variant;
begin
   ModuloDatos.Consulta1.Close;
   ModuloDatos.Consulta1.Open;
   If ModuloDatos.Consulta1.IsEmpty Then
     ModuloDatos.TblConsumos.FieldByName('Totalfactu').AsFloat:=0
   Else
     X:=Modulodatos.Consulta1.FieldByName('Suma').AsFloat;
     ModuloDatos.TblConsumos.FieldByName('Totalfactu').AsFloat:=x;

end;
Pero no me funciona, el tema está en como asigno 'SUMA' o el valor que tengo en ella al campo 'Totalfactu', de la tabla TblConsumos, ya que me parece que es eso lo que hago mal.
Igual antes probé con tu código pero no me ejecuta el programa ya que me dice que 'No puedo asignar la base de datos porque es de sólo lectura (o algo así) a Q.database:=DB Control (que es el nombre de mi base)
Responder Con Cita
  #12  
Antiguo 10-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
se supone que precfinal = Cantidad*Precunit, no?

Pues bien, a ese SQL está algo "mal"
1.- Lo sobra la unión (join) con la tabla maestra (teniendo el campo por el que buscar en la tabla detalle, es una tontería consumir recursos para hacer una join)
2.- Al quitar la join, le falta un parámetro, que es Consumo del cual quieres calcular la suma, sino te lo calculará de todo (cláusula where)

por lo que te podría quedar algo así:
Código SQL [-]
   select sum(Precfinal) as suma
   from det_producto
   where consumo = :consumo
y desde código hacer algo así:
Código Delphi [-]
    procedure TModuloDatos.TblDetproductoAfterPost(DataSet: TDataSet);
  Var
   x: Float;
  begin
     Consulta1.Close;
     Consulta1.ParamByName('consumo').AsInteger:=TblConsumos.FieldByName('IDConsumo').AsInteger;
     Consulta1.Open;
     If Consulta1.IsEmpty Then
       x := 0
     Else
       x := Consulta1.FieldByName('Suma').AsFloat;
     
     TblConsumos.Edit;
     TblConsumos.FieldByName('Totalfactu').AsFloat := x;
     TblConsumos.Post;
  end;
Consejo: acostúmbrate a no usar variables de tipo Variant cuando sabes, de entrada, el tipo de dato que será
Consejo2: dentro de un mismo formulario/módulo de datos, no hace falta que hagas referencia a éste

Espero que te sirva
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #13  
Antiguo 11-06-2004
silviodp silviodp is offline
Miembro
 
Registrado: may 2003
Ubicación: General Levalle, Argentina
Posts: 277
Poder: 22
silviodp Va por buen camino
Suma de un campo

Muchas gracias Cbrrr, anduvo perfecto!!!, lo unico que no me reconoce es cuando defino x como Float, tuve que definirla como Currency.
Saludos.

Silvio.-
Responder Con Cita
  #14  
Antiguo 11-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Perdón, sí, estaba yo pensando en bases de datos. El Float debería haber sido un Real (o un Currency como tu dices)
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:59:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi