
Calcular suma en columna dbgrid
#1
Escrito 12 junio 2011 - 04:42
Antes de nada presentarme, soy Jesus de Cádiz, y me alegro de haber encontrado muchos nicks conocidos de otros foros y webs por aqui.
Y ahora a la cuestion, intento obtener la suma de una columna de un dbgrid (delphi 2010 sobre FB), como se les ocurre la forma mas eficiente de hacerlo, porque recorrer todos los registros para obtener el total me parece un atraso y un desperdicio de trafico de red.
saludos y gracias
#2
Escrito 12 junio 2011 - 05:13
El DBGrid muestra el contenido de un dataSet.
Si quieres obtener la sum de un campo lo puedes hacer por sql:
Select sum(TuCampo) as suma where Tucondicion.
Saludos
#3
Escrito 12 junio 2011 - 06:38
Saludos
#4
Escrito 13 junio 2011 - 01:50
Mi idea es saber si es posible a nivel del conjunto de datos poder calcular ese total, ya que como digo cambia o puede cambiar con facilidad, por eso la solucion de ClientDataSet y el campo tipo Aggregate, pero no trabajo con ellos y ando un poco perdido. Alguna orientacion en este sentido?
Gracia y un Saludo
#5
Escrito 13 junio 2011 - 02:50
http://delphiallimit...tdataset-i.html
http://delphiallimit...dataset-ii.html
http://delphiallimit...ataset-iii.html
http://delphiallimit...dataset-iv.html
http://delphiallimit...ataset-y-v.html
http://delphiallimit...emoria-con.html
Saludos.
#6
Escrito 13 junio 2011 - 03:49
Saludos y gracias
#7
Escrito 13 junio 2011 - 03:51
Gracias Marc por los enlaces, que he estado repasando.... y me queda una duda, como accedo a los campos agregattes de un Clientdataset para por ejemplo colocar su valor en una etiqueta por ejemplo
Saludos y gracias
Lo puedes poner como un campo normal y corriente. Para los controles del formulario es indistinguible de cualquier otro campo.
Saludos.
#8
Escrito 13 junio 2011 - 05:16
Algo no estoy haciendo bien
Saludos
#9
Escrito 13 junio 2011 - 05:52
Pues por alguna extraña razon, no me aparece en la lista de los campos disponibles para el Datasource correspondiente...
Algo no estoy haciendo bien
Saludos
El Datasource tiene que estar enlazado con el ClientDataset (y no con el Dataset que le proporciona los datos via un DatasetProvider).
Después, en la lista de campos del ClientDataset (que se abre con un doble-clic sobre el mismo), añades un campo con el botón derecho -> New Field, y en Field Type marcas que es de tipo Aggregate.
A partir de ese momento ya debería estar disponible para ser enlazado vía DataSource a cualquier otro control.
NOTA: Para que funcione correctamente, no olvides rellear en Expression su función de Cálculo, y activar a True el AggregatesActive del ClientDataset.
Saludos.
#10
Escrito 13 junio 2011 - 06:31
saludos
#11
Escrito 13 junio 2011 - 11:28
Ahora tengo otra cuestion: si se filtran los datos del Dataset como puedo hacer para que refresque el contenido del campo agregatte con el resultado del nuevo conjunto de datos filtrado
Gracias y un saludo
#12
Escrito 13 junio 2011 - 12:43
Gracias a vuestra ayuda por fin veo el resultado del campo agregatte.
Ahora tengo otra cuestion: si se filtran los datos del Dataset como puedo hacer para que refresque el contenido del campo agregatte con el resultado del nuevo conjunto de datos filtrado
Gracias y un saludo
Creo que ese ya es el comportamiento normal de los campos agregados, el de solo sumar los registros que cumplen el filtro.
Saludos.
#13
Escrito 13 junio 2011 - 12:49
Hola.
Gracias a vuestra ayuda por fin veo el resultado del campo agregatte.
Ahora tengo otra cuestion: si se filtran los datos del Dataset como puedo hacer para que refresque el contenido del campo agregatte con el resultado del nuevo conjunto de datos filtrado
Gracias y un saludo
Creo que ese ya es el comportamiento normal de los campos agregados, el de solo sumar los registros que cumplen el filtro.
Saludos.
Además de lo que dice Marc, hay que tener claro que para que el campo agregate se actualice hay que aplicar el filtro sobre el TClientDataset y no sobre el Dataset enlazado al TDatsetProvider.
Saludos
#14
Escrito 13 junio 2011 - 02:28
Además de lo que dice Marc, hay que tener claro que para que el campo agregate se actualice hay que aplicar el filtro sobre el TClientDataset y no sobre el Dataset enlazado al TDatsetProvider.
Gracias por ese pequeño apunte, lo estaba haciendo sobre el Dataset, pensando que la actualizacion era automatica pero veo que no
Gracias y un Saludo