| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Niko Invitado
|
Publicado: Vie 03 Dic, 2004 10:05 am Asunto: sumar campos de una tabla |
|
|
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 |
|
 |
Alberto Lavariega Arista Lt JG

Registrado: 22 Oct 2004Mensajes: 66Ubicación: Bahias de Huatulco, Oaxaca
|
Publicado: Mar 28 Dic, 2004 7:35 pm Asunto: create un cursor!!! |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 29 Dic, 2004 12:43 am Asunto: |
|
|
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 |
|
 |
Alberto Lavariega Arista Lt JG

Registrado: 22 Oct 2004Mensajes: 66Ubicación: Bahias de Huatulco, Oaxaca
|
Publicado: Mie 29 Dic, 2004 1:09 am Asunto: no es tan sencillo, como lo que muestras!!! |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 29 Dic, 2004 3:50 am Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 29 Dic, 2004 9:13 am Asunto: |
|
|
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 |
|
 |
Alberto Lavariega Arista Lt JG

Registrado: 22 Oct 2004Mensajes: 66Ubicación: Bahias de Huatulco, Oaxaca
|
Publicado: Mie 29 Dic, 2004 7:06 pm Asunto: |
|
|
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  _________________ Alberto Lavariega Arista |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 29 Dic, 2004 7:47 pm Asunto: |
|
|
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 |
|
 |
|