Cita:
Empezado por mamcx
Ahi tienes que usar es funciones de fecha, no de numero.
|
Efectivamente, pero es que en algún sitio había visto que se podía usar el SUM sobre valores de tiempo.
Cita:
Empezado por Casimiro Notevi
¿Seguro que es dialecto 3?
|
La definición de la BB.DD. está puesta así:
Código SQL
[-]Ocio->Connected = false;
Ocio->DatabaseName = "Tablas\\Ocio.fdb";
Ocio->SQLDialect = 3;
Ocio->Params->Clear();
Ocio->Params->Add("USER 'sysdba'");
Ocio->Params->Add("PASSWORD 'masterkey'");
Ocio->Params->Add("PAGE_SIZE 4096");
Ocio->Params->Add("DEFAULT CHARACTER SET ISO8859_1 COLLATION ES_ES_CI_AI");
Ocio->CreateDatabase();
Así que sí, es dialecto 3.
Cita:
Empezado por Neftali [Germán.Estévez]
Yo optaría por guardar internamente los tiempos en segundos (en BD).
Luego a la hora de pintarlos sólo tienes que pasarlos a horas, minutos y segundos. Es una cuestión de visualización.
De esa forma puedes usar la funciones tipo SUM sin problemas.
|
Es una alternativa que no se me había ocurrido pero te obliga a decodificar el tiempo para poder guardarlo en segundos con lo cual al final tienes el mismo trabajo; he optado por el segundo query de mi mensaje (SUM(EXTRACT(HOUR FROM Tiempo)) Hora) y queda así el código:
Código:
int Hora, Minuto, Segundo;
Query->Close();
Query->SQL->Text = "SELECT Disco, SUM(EXTRACT(HOUR FROM Tiempo)) Hora,
SUM(EXTRACT(MINUTE FROM Tiempo)) Minuto,
SUM(EXTRACT(SECOND FROM Tiempo)) Segundo
FROM Pistas GROUP BY Disco ORDER BY Disco";
Query->Open();
for (; !Query->Eof; Query->Next())
{
Segundo = Query->FieldByName("Segundo")->AsInteger % 60;
Minuto = Query->FieldByName("Minuto")->AsInteger + (int)Query->FieldByName("Segundo")->AsInteger / 60;
Hora = Query->FieldByName("Hora")->AsInteger + (int)Query->FieldByName("Minuto")->AsInteger / 60;
Minuto = Minuto % 60;
[...]
}
Muchas gracias por todas vuestras sugerencias.