 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
pguzman Ens

Registrado: 07 Feb 2003Mensajes: 34
|
Publicado: Vie 21 Mar, 2003 1:40 pm Asunto: sumar los valores de un campo de todos los registros |
|
|
Hola
Pues eso, quiero mostrar en un TEdit el valor de la suma de un determinado campo de todos los registros de una tabla.
No se si me explico:
Tengo una tabla en la que hay un campo "valor"
Quiero que me muestre la suma de ese campo de todos los registros.
Muchas gracias |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Vie 21 Mar, 2003 2:16 pm Asunto: |
|
|
Pues eso no es muy complicado, si creo que te he entendido lo que quieres hacer, mira para hacer esa y otras cosas, puedes usar un TQuery.
Si siempre es la misma consulta la puedes introducir en tiempo de diseño, si quieres reusar el componente pues bien la metes en tiempo de diseño o bien la cambias cuando quieras, supongamos que no lo haces en tiempo de diseño, y que el TQuery se llama qConsulta (en tiempo de diseño le asignas el nombre y le asignas la BD en cuestión).
Luego en cualquier parte del codigo, haces lo siguiente:
(Supondremos que tienes una tabla que se llama GASTOS_CLIENTES, que contiene un COD_CLIENTE, FECHA, GASTO y que se encuentra indexado por CODIGO_DE_CLIENTE y FECHA (claves primarias) de forma que un cliente tiene un cierto gasto en una cierta fecha y tu quieres obtener la suma de todos los gastos por CLIENTES.
| Código: |
// Todos los gastos por clientes
qConsulta->SQL->Clear();
qConsulta->SQL->Add("SELECT COD_CLIENTE, SUM(GASTO) AS GASTO");
qConsulta->SQL->Add("FROM GASTOS_CLIENTES");
qConsulta->SQL->Add("GROUP BY COD_CLIENTE");
qConsulta->Prepare(); // Prepara la consulta
qConsulta->Open(); // Ejecuta la consulta
// Ahora iteramos entre los clientes para ir sacando los datos por pantalla
|
Si por el contrario lo que queremos es obtener el total de gastos de todos los clientes, pues más facil todavía:
| Código: |
// Total de Gastos
qConsulta->SQL->Clear();
qConsulta->SQL->Add("SELECT SUM(GASTO) AS GASTO");
qConsulta->SQL->Add("FROM GASTOS_CLIENTES");
qConsulta->Prepare(); // Prepara la consulta
qConsulta->Open(); // Ejecuta la consulta
qConsulta->First();
float total_gastos=qConsulta->FieldByName("GASTO")->AsFloat;
// Si tu TEdit se llama eGastos (por ejemplo) pues:
eGastos->Text=FloatToStrF(total_gastos, ffCurrency, 6, 2);
|
Ala!! espero que te sirva. |
|
| Volver arriba |
|
 |
pguzman Ens

Registrado: 07 Feb 2003Mensajes: 34
|
Publicado: Vie 21 Mar, 2003 6:04 pm Asunto: no funciona |
|
|
Hola, gracias ante todo.
Lo que quiero hacer es lo segundo que dices (lo facil) pero no me funciona lo que tu me dices.
El campo que tengo que sumar se llama "base" y esta en la tabla "apunte", según lo que me comentas, la instrucción SQL sería:
SELECT SUM(base) AS base FROM apunte ¿no?
gracias |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Sab 22 Mar, 2003 1:01 am Asunto: |
|
|
Si imaginaba que era lo segundo, vamos a ver, imagino que estás trabajando en Builder y usando algun SGBD, como imagino que también tienes un Administrador con el SGBD, prueba directamente a ejecutar la consulta sobre el servidor y sobre la BD en concreto.
Si como bien dices tienes una tabla llamada APUNTE y un campo llamado BASE y este es de tipo Númerico, ya sea integer, float, numeric, etc. pues debería funcionarte, siempre y cuando el SGBD soporte este tipo de funciones agregadas. Aunque en principio debería soportarla ya que es algo muy estandar.
Prueba primero esto:
SELECT SUM(BASE)
FROM APUNTE
El "AS BASE" lo metí para renombrar el campo de salida, sino te aparecera otra cosa.
Repito que te debería funcionar SUM suma todas las tuplas que cumplan la condición en ese caso como no hay ni WHERE ni GROUP pues las sumará todas devolviendo una única tupla con el resultado de sumar el campo BASE de todas las tuplas de la tabla APUNTE.
Si por ejemplo quieres saber cuantas tuplas tienes pues:
SELECT COUNT(*)
FROM APUNTE
(Este ultimo es un comentario para que lo pruebes por si acaso tu SGBD no soportara funciones agregadas, como no has dicho que SGBD utilizas).
Venga suerte y al toro.
En el caso de que no te funcione porque no lo soporte el SGBD puedes hacer varias cosas, una recorrer una a una todas las tuplas en tu programa o intentar crear un trigger o procedimiento almacenado que se invoke cuando tu quieras, el problema de esto ultimo es que si no soporta funciones agregadas tan básicas, no creo que soportara ni TRIGGERs ni PROCEDIMIENTOS ALMACENADOS.
Venga saludos. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|