Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

sumar campos de una tabla

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: sumar campos de una tabla Responder citando

Hola a todos! en mi aplicacion tengo una base de datos en acces y utilizo el componente TTable, lo que quiero hacer es una especie de funcion que me calcule la suma de los valores de un campo determinado si otro campo cumple una condicion, más o menos seria algo asi , lo que pasa es que no controlo mucho las propiedades y funciones del TTable:

float Funcion(String VALOR);
float Total=0;
Table->Active=true;
Table->First();
while(!Table->Eof)
{
if(Table->FieldValue("Campo1")==VALOR)
{
Total+=Table->FieldValue("Campo2")->AsFloat;
}
Table->Next();

}
return(Total);

Esto es una especie de borrador de lo que quiero hacer si alguien me pudiera indicar como es el codigo exactamente me haria un gran favor...gracias..
Volver arriba
Mensaje    Asunto: create un cursor!!! Responder citando

hola, para ello tienes que crear un cursor, para recorrer la tabla y sumar los que cumplan con ese valor..


bajate la cara oculta de builder, posiblemente ahi venga sobre cursores..



saludos, suerte.
_________________
Alberto Lavariega Arista
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

qry->SQL->Clear();
qry->SQL->Add("SELECT SUM(CAMPO1) AS suma FROM tutabla");
qry->Open();
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: no es tan sencillo, como lo que muestras!!! Responder citando

no es tan sencillo como el codigo que muestras, lo primero que se me viene a la mente es crear un cursor para sumar los valores que cumplan con la condicion establecida..

algo parecido a esto...

Código:
DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT " "
   SELECT @message = "----- Books by Author: " +
      @au_fname + " " + @au_lname

   PRINT @message

   -- Declare an inner cursor based   
   -- on au_id from the outer cursor.

   DECLARE titles_cursor CURSOR FOR
   SELECT t.title
   FROM titleauthor ta, titles t
   WHERE ta.title_id = t.title_id AND
   ta.au_id = @au_id   -- Variable value from the outer cursor

   OPEN titles_cursor
   FETCH NEXT FROM titles_cursor INTO @title

   IF @@FETCH_STATUS <> 0
      PRINT "         <<No Books>>"     

   WHILE @@FETCH_STATUS = 0
   BEGIN
     
      SELECT @message = "         " + @title
      PRINT @message
      FETCH NEXT FROM titles_cursor INTO @title
   
   END

   CLOSE titles_cursor
   DEALLOCATE titles_cursor
   
   -- Get the next author.
   FETCH NEXT FROM authors_cursor
   INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO



checa la cara oculta de builder ahi debe venir la explicacion para la crecion de cursores...

saludos[/code]
_________________
Alberto Lavariega Arista
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

qry->Close();
qry->SQL->Clear();
qry->SQL->Add("SELECT SUM(campo2) AS Total FROM Table ");
qry->SQL->Add("WHERE campo1==''+Valor+"' "); // Si valor es
alfanumerico
qry->Open();

Alberto..no entiendo, por que dices que no es tan sencillo..me pierdo de algo?[/quote]
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Touchsoftware está en lo cierto, es así de sencillo...

Si el campo es alfanumerico:
Código:
qry->Close();
qry->SQL->Clear();
qry->SQL->Add("SELECT SUM(campo2) AS Total FROM Table");
qry->SQL->Add("WHERE campo1='" + Valor + "'");
qry->Prepare();
qry->Open();


Y si el campo es de tipo entero y Valor es de tipo entero:
Código:
qry->Close();
qry->SQL->Clear();
qry->SQL->Add("SELECT SUM(campo2) AS Total FROM Table");
qry->SQL->Add("WHERE campo1=" + IntToStr(Valor));
qry->Prepare();
qry->Open();


La consulta que dijo Touchsoftware sumará el campo2 de todas las tuplas de la tabla Table que cumplan que su campo1 se igual a valor, luego la consulta es correcta.

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

jajaja, asi es chicos...


lo he probado y funciona muy bien, sucede que muy pocas veces utilzo, los TQuery, ya que simpre utilzo los procedimientos almacenados de SQL Server..


Gracias, no cabe duda que aprendo mejores cosas en el foro..


bye Embarassed
_________________
Alberto Lavariega Arista
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Si utilizas Procedimientos almacenados, también puedes utilizar este tipo de consultas dentro de estos tipos de procedimientos, incluso puedes precisamente parametrizar esta consulta usando un procedimiento almacenado parametrizado y ya es la pera!!!

algo como:

SELECT *
FROM procedimiento_almacenado(valor)

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.