PDA

Ver la Versión Completa : como sumo una columan de una BD


click
22-09-2003, 06:34:39
que ondas cuates:

tengo una pequeña tabla con los siguientes campos y sus registros:
id fecha horaini tiempo costo
1 20-09-03 12:00 2 20.00
2 20-09-03 12:00 2 20.00
3 20-09-03 12:00 2 20.00
4 21-09-03 12:00 2 20.00
5 21-09-03 12:00 2 20.00
6 23-09-03 12:00 2 20.00
7 25-09-03 12:00 2 20.00

lo que quiero es saber cuanto suman los registros de la fecha 20
y cuanto de la fecha 20 al 25

pero sin utilizar un reporteador como quickreport o cristal, con puras variables en un form.

facil? dime como
:confused:

Ruben_Cu
22-09-2003, 07:02:32
Hola click, la manera mas rápida de hacerlo es utilizando SQL y sus funciones y claúsulas, de forma general sería algo como:

select SUM (costo) from tutabla where fecha='20/09/03'

Después para pesentarlo en la forma:

Edit1.Text:= Formatfloat('#,##0.00', query1.fieldbyname('SUM (costo)').AsFloat)

Para el caso deL rango entre dos fechas debes utilizar predicate BETWEEN

Lo que he escrito es al vuelo pero te vale de punto de partida.
Saludos y suerte

click
22-09-2003, 08:43:05
muy bien, la idea ya la tengo, lo que ahora no eh logrado es como hacer para que en lugar de hacer una sola consulta fija todo el tiempo, hacer que sea variable osea que dependa del contenido de un edit, al escribir X fecha se realize la busqueda dependiendo de la fecha que escriba en el edit.

La otra es como hacer que el efecto de la busqueda se refleje en un dbgrid


:)

__cadetill
22-09-2003, 10:21:00
Supongamos que el Edit donde pones la fecha es "Fecha"


Query1.SQL.Add('select SUM (costo)');
Query1.SQL.Add('from tutabla');
Query1.SQL.Add('where fecha=:f');
Query.ParamByName('f').AsDateTime := StrToDate(Fecha.Text);
Query.Open;

Si en lugar de utilizar un TEdit utilizas un componente de fechas estilo al TDateTimePicker o TDateEdit (de las RX y que personalmente me gusta más), la asignación sería algo así


Query.ParamByName('f').AsDateTime := Fecha.Date;


Para el tema de coger un rango de fechas, utiliza el between dentro de la consulta SQL

Query1.SQL.Add('select SUM (costo)');
Query1.SQL.Add('from tutabla');
Query1.SQL.Add('where fecha between :fini and :ffin');
Query.ParamByName('f').AsDateTime := StrToDate(FechaIni.Text);
Query.ParamByName('f').AsDateTime := StrToDate(FechaFin.Text);
Query.Open;


Por cierto, los parámetros también puedes escribirlos directamente en la consulta SQL

Query1.SQL.Add('select SUM (costo)');
Query1.SQL.Add('from tutabla');
Query1.SQL.Add('where fecha =' +
QuotedStr(FormatDateTime('mm/dd/yyyy', FechaIni.Date)));

Tu eliges el método, pero yo suelo utilizar el primero para evitar esas transformaciones de fecha,....

Para el tema de visualizarlo en un TDbGrid, éste tiene la propiedad Datasource donde le puedes asignar un TDataSource, el cual, a su vez tiene la propiedad Dataset a la que le puedes asignar el TQuery (o el componente que utilices para lanzar SQLs)

click
10-10-2003, 01:41:23
ya logre realizar las consultas que necesito, pero ahora mi problema es que no eh logrado ver como paso el valor del sql osea la suma de toda la columna.

select sum(costo) from registro

quiero pasarlo a un edit.


agradezco sus comentarios

roman
10-10-2003, 01:53:38
La consulta te regresará un único registro con un único campo de manera que puedes acceder a él con;

Edit1.Text := Query1.Fields[0].AsString;

// Saludos

click
17-01-2005, 04:07:55
Hace ya año y medio me hechaste la mano con esta pregunta, pero eh perdido mi codigo y ahora toy rehaciendo mi programa, pero no recuerdo como lo solucione, pues con tu codigo expuesto aqui no me funciona hoy :confused: es decir, no logro hacer que en el dbgrid aparezca la informacion consultada y otra en el codigo utilizas en las ultimas lineas query me imagino que es query1.

Help...