Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 4 Semanas
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 167
Poder: 21
maravert Va por buen camino
Función SUM Pasarlo a un componente

Buenos días, estoy tratando de obtener la suma de un campo llamado Importe y pasar el resultado a un Label,
pero me dice que mi variable no existe.

Mi código es el siguiente

Código Delphi [-]
procedure TfrmAdminColeg.Button3Click(Sender: TObject);
var
  TotalImporte, Total: Double;
begin
  DM.CuentasPorCobrar.SQL.Clear;
  DM.CuentasPorCobrar.SQL.Add('SELECT SUM(importe) AS Total FROM CuentasPorCobrar');
  DM.CuentasPorCobrar.Open;
  if not DM.CuentasPorCobrar.FieldByName('Total').IsNull then
  begin
    TotalImporte := DM.CuentasPorCobrar.FieldByName('Total').AsFloat;
    Label4.Caption := FormatFloat('0.00', TotalImporte); // Formatear a dos decimales
  end
  else
  begin
    Label4.Caption := '0.00';
  end;
  DM.CuentasPorCobrar.Close;
end;


Me da el siguiente error
Imágenes Adjuntas
Tipo de Archivo: jpg 1.jpg (7,1 KB, 25 visitas)
Responder Con Cita
  #2  
Antiguo Hace 4 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Prueba con:
Código Delphi [-]
DM.CuentasPorCobrar.Fields[0].asFloat
Responder Con Cita
  #3  
Antiguo Hace 4 Semanas
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 167
Poder: 21
maravert Va por buen camino
Muchas gracias por tu respuesta, hice las modificaciones así.

Código Delphi [-]
 TotalImporte := DM.CuentasPorCobrar.Fields[0].Value;

Pero me regresa el valor de 1
Responder Con Cita
  #4  
Antiguo Hace 4 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues sumará 1, ¿no?
En eso no podemos ayudar sin más información y datos de ejemplo.
Responder Con Cita
  #5  
Antiguo Hace 4 Semanas
maravert maravert is offline
Miembro
 
Registrado: jul 2004
Ubicación: Xalapa, México
Posts: 167
Poder: 21
maravert Va por buen camino
Gracias por contestar, tengo una tabla con la siguiente estructura

Código SQL [-]
CREATE TABLE `CuentasPorCobrar` (
  `idColegiatura` int NOT NULL,
  `idGpo` int DEFAULT NULL,
  `idAlumno` int NOT NULL,
  `CuentasPorCobrarMaestro` int NOT NULL,
  `DiasTolerancia` int NOT NULL,
  `Referencia` int NOT NULL,
  `NumeroCargo` int NOT NULL,
  `Importe` decimal(10,2) NOT NULL,
  `FechaAplicacion` datetime NOT NULL,
  `FechaVencimiento` datetime NOT NULL,
  `Usuario` int NOT NULL,
  `Semestre` smallint DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

y lo que necesito es obtener el total del campo importe y pasarlo a un Label

Gracias, muy agradecido
Responder Con Cita
  #6  
Antiguo Hace 4 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si abres el phpmyadmin, o el que uses, y tecleas:
Código SQL [-]
SELECT SUM(importe) FROM CuentasPorCobrar
¿Qué te devuelve?
Responder Con Cita
  #7  
Antiguo Hace 4 Semanas
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 87
Poder: 10
marco3k Va por buen camino
Quizas sea por la mayúsculas o minúsculas en los nombres de tablas y campos, hay algunos servidores que estan configurados asi, distinguen eso y me paso y debí colocar tal como esta creado en el servidor, revisa eso.

Última edición por marco3k fecha: Hace 4 Semanas a las 17:03:50.
Responder Con Cita
  #8  
Antiguo Hace 3 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 235
Poder: 1
navbuoy Va por buen camino
es que el AS Total implica que lo dejara creo, en una variable Total que no tienes definida

yo por ejemplo para un Stored Procedure que hice hace 2 dias es asi, puede que te arroje algo de luz porque es algo parecido

Código:
DELIMITER $$

USE `BASE_DE_DATOS_A_USAR`$$

DROP PROCEDURE IF EXISTS `Stardust_Players_Conected`$$

CREATE DEFINER=`USUARIOBD`@`%` PROCEDURE `Stardust_Players_Conected`()
BEGIN
    DECLARE suma_total DECIMAL(10, 0);
    -- Sumar los valores de campo_a_sumar cuando condicion_campo es 1
    SELECT COALESCE(SUM(status_online), 0) INTO suma_total
    FROM STARDUST_BDUsers
    WHERE status_online = 1;
    -- Insertar el resultado en la tabla resultados_suma
    TRUNCATE TABLE STARDUST_TOTAL_PLAYERS_CONECTADOS;
    INSERT INTO STARDUST_TOTAL_PLAYERS_CONECTADOS (NUM_PLAYERS, Fecha)
    VALUES (suma_total, CURDATE());
    END$$

DELIMITER ;
como ves, el DECLARE suma_total es lo que seria tu Total que no encuentra

si "suma_total" es con decimales lo declaramos (por ejemplo con 2 decimales) como DECLARE suma_total DECIMAL(10, 2);

el COALESCE es por si no tiene valor ese campo o registro (NULL) creo que lo pone como 0

seria algo asi para pasarlo al TLabel o TEdit

Código:
void PasarSumaTotalAMyLabel() {
    // Supongamos que tienes un componente TMyQuery llamado MyQuery
    MyQuery->SQL->Clear();
    MyQuery->SQL->Add("SELECT SUM(Importe) INTO Total FROM CuentasPorCobrar");  // Tu consulta SQL
    MyQuery->Open();  // Ejecuta la consulta

    // Verificamos si hay resultados
    if (!MyQuery->Eof) {
        // Extraer el valor de 'Total'
        double sumaTotal = MyQuery->FieldByName("Total")->AsFloat;

        // Convertir el valor a texto y asignarlo al TLabel
        Label1->Caption = FloatToStr(Total);
    } else {
        Label1->Caption = "No hay resultados";  // En caso de no obtener resultados
    }

    MyQuery->Close();
}
TEN EN CUENTA QUE EL CAMPO Importe tiene la I en mayuscula en la definicion de la Tabla y eso creo que importa porque diferencia mayusculas de minusculas

Este tipo de consulta devuelve directamente la suma de un campo llamado campo en la tabla tu_tabla, y puedes extraer el valor de suma_total directamente desde el conjunto de resultados sin declarar nada en SQL.

Código:
// Asumiendo que tienes un componente TMyQuery llamado MyQuery
MyQuery->SQL->Clear();
MyQuery->SQL->Add("SELECT SUM(campo) AS suma_total FROM tu_tabla");  // La consulta SQL
MyQuery->Open();  // Ejecuta la consulta y abre el conjunto de resultados

if (!MyQuery->Eof) {  // Asegurarse que hay resultados
    double sumaTotal = MyQuery->FieldByName("suma_total")->AsFloat;  // Recuperar el resultado de la suma
    Label1->Caption = FloatToStr(sumaTotal);  // Mostrar en el Label
}

Última edición por navbuoy fecha: Hace 3 Semanas a las 13:07:08.
Responder Con Cita
  #9  
Antiguo Hace 3 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 235
Poder: 1
navbuoy Va por buen camino
y tu tienes en el SELECT SUM(importe) con minusculas y creo que en vez de AS deberias poner INTO

creo que lo que buscas se parece a ESTO: (si no funciona con AS prueba con INTO)

Código:
procedure PasarSumaTotalAMyLabel;
begin
  // Limpiar el SQL y añadir la consulta
  MyQuery.SQL.Clear;
  MyQuery.SQL.Add('SELECT SUM(Importe) AS Total FROM CuentasPorCobrar');  // Tu consulta SQL
  MyQuery.Open;  // Ejecuta la consulta

  // Verificamos si hay resultados
  if not MyQuery.Eof then
  begin
    // Extraer el valor de 'Total'
    Label1.Caption := FloatToStr(MyQuery.FieldByName('Total').AsFloat);
  end
  else
  begin
    Label1.Caption := 'No hay resultados';  // En caso de no obtener resultados
  end;

  MyQuery.Close;
end;
date cuenta que en tu codigo cuando intentas recuperar el "Total" haces referencia a la Tabla CuentasPorCobrar->FieldByName("Total") y no deberias sacarlo de ahi porque en la tabla no esta el campo Total sino en el resultado del MyQuery.... es algo asi como si el propio MyQuery crease una especie de campo "fantasma" temporal para Total con el resultado que luego al cerrar la consulta desaparece

Última edición por navbuoy fecha: Hace 3 Semanas a las 13:19:43.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Seleccionar un Dato en un DBGrid y Pasarlo a Otro. hondaalberto Varios 3 21-12-2010 22:46:27
Funcion o componente para calcular el md5? flystar Varios 8 05-08-2010 14:56:17
Funcion del componente Gauge RockFaster Varios 1 24-09-2008 00:23:42
Programa al pasarlo a otro pc mancurnino Varios 5 27-02-2008 00:12:53
Asignar una tecla de funcion a un componente CoCaInE Varios 2 19-06-2007 11:05:08


La franja horaria es GMT +2. Ahora son las 01:45:37.


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