Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Contar registros por fecha (https://www.clubdelphi.com/foros/showthread.php?t=84673)

lucho1981 20-11-2013 13:51:16

Contar registros por fecha
 
Muy buenas amigos. Después de tanto tiempo, vuelvo por estos lados.
Tengo una db en mysql 5 con delphi 7.
En una tabla tengo un campo fecha (año, mes día) y desde delphi necesito hacer una consulta en la que me cuente la cantidad de registros que hay en un mes y año determinado.
El usuario seleccionara el mes (de 1 a 12) y el año (2012, 2013....etc) y necesito que me muestre la cantidad de registros que hay en un mes en particular.
Mi idea (no se si errada) es:
Código Delphi [-]
var
contador: integer;
begin
        cantidad:=0;
        dm.tarea.first;
        while not dm.tarea.eof do
               begin
                      //aca es donde no tengo en claro como comparar las fechas con mi mes y año. Seguramente será con un if donde irá incrementando mi contador, pero no se como hacerlo.
               end;
end;

Muchas gracias por su ayuda.

Casimiro Notevi 20-11-2013 14:13:36

Usa sql, algo similar a esto:
Ejemplo, mes 11:
Código SQL [-]
select count(*) from tabla where extract(month from fecha)= 11

TOPX 20-11-2013 14:13:50

Buenas.

Mi idea es, que en la propiedad que tiene la sentencia sql de dm.tarea diga algo como:
Código SQL [-]
SELECT COUNT(*) as cantidad
FROM tabla
WHERE YEAR(fecha) = :anio_fecha
  AND MONTH(fecha) = :mes_fecha
Y luego, en Delphi asigna asigna los valores para los parámetros anio_fecha y mes_fecha.
-

lucho1981 20-11-2013 14:45:18

muchas gracias
 
Gracias por sus comentarios.
Intenté hacer como me dijo TOPX y pasar por parámetros mes y año.

Me dió este error:
Project mantenimiento.exe raised exception class EZSQLException with message 'SQL Error: You have an error in your SQL syntax; check de manual that corresponds to your MySQL server version for the right syntax to use near '*) as cantidad FROM tarea WHERE YEAR (fecha)=2013 AND MONTH(fecha)=11' at line 1'. Proecess stopped. Use Step or Run to continue.


Con esta consulta me devolvería por parámetros el resultado o como lo tomo nuevamente en delphi (supongamos que quiero asignarlo a una variable).

lucho1981 20-11-2013 14:50:30

Corregido el error
 
El error era únicamente un espacio demás.
Ahora la pregunta es, como hago para tomar el resultado de la consulta y asignarlo a una variable??

Muchas gracias

ecfisa 20-11-2013 15:23:47

Hola lucho1981.

Un ejemplo para la consulta anterior:
Código Delphi [-]
...
var
  Cantidad: Integer;
begin
  with TuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) AS CANTIDAD FROM TABLA')
    SQL.Add('WHERE YEAR(FECHA) = :ANIO_FECHA');
    SQL.Add('AND MONTH(FECHA) = :MES_FECHA');
    Open;
    Cantidad := FieldByName('CANTIDAD').AsInteger;
  end;
...

Saludos :)

lucho1981 20-11-2013 15:39:44

Muchas gracias.
 
Muchas gracias. Me sirvió a la perfección.^\||/

Cita:

Empezado por ecfisa (Mensaje 469846)
Hola lucho1981.

Un ejemplo para la consulta anterior:
Código Delphi [-]
...
var
  Cantidad: Integer;
begin
  with TuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) AS CANTIDAD FROM TABLA')
    SQL.Add('WHERE YEAR(FECHA) = :ANIO_FECHA');
    SQL.Add('AND MONTH(FECHA) = :MES_FECHA');
    Open;
    Cantidad := FieldByName('CANTIDAD').AsInteger;
  end;
...

Saludos :)


lucho1981 28-11-2013 15:20:41

Nueva consulta
 
Amigos tengo una consulta que para mi puede ser parecida (es por ello que no inicio un nuevo hilo)
Tengo una tabla en mysql, la que tiene un campo time (hh:mm:ss), necesito sumar todos los campos de una determinada fecha.
Mi consulta es la siguiente
Código SQL [-]
SELECT SUM(*) as TOTAL
FROM TAREA
WHERE YEAR (fecha) = :anio
AND MONTH (fecha) = :mes

Luego de leer un poco vi que SUM es solo para valores enteros.
Como puedo hacer para sumar dicho campo?

lucho1981 28-11-2013 16:02:49

Me autorrespondo
 
Luego de leer un poco mas, efectivamente la función SUM de Mysql no suma valores Time.
Lo que hice fue convertir todo a segundos, sumar, y convertir a time otra vez.
Código SQL [-]
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(hs_previstas))) as TOTAL
FROM tarea
WHERE YEAR(fecha)= :anio
AND MONTH(fecha)= : mes

Todo anduvo perfecto.


La franja horaria es GMT +2. Ahora son las 04:38:07.

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