¿Cómo puedo recorrer un campo especifico y recorrer todas sus filas hacia abajo para obtener sus valores y sumarlos, usando el componente query y dejar el resultado en un memo?
Hubiese sido bueno saber en que tipo de Base de Datos Trabajas, pero lo voy a hacer bien general (Voy a suponer que trabajas con Paradox o DBase). La sentencia SQL para sumar un campo (Columna) es: SELECT SUM(Valor) FROM "EJEMPLO.DB" Esto te suma todos los valores del campo "Valores" Si vos quieres mostrar los y también la suma de los mismos tienes que hacer por separado, o sea, usando dos TQuery así: 1° TQuery SELECT Valor FROM "EJEMPLO.DB" para mistrar los valores y 2° TQuery (Al que actualizaras cada vez que actualices el 1° TQuery) SELECT SUM(Valor) FROM "EJEMPLO.DB" Un ejemplo para que veas ACLARACIÓN Este ejemplo supones que tienes una tabla llamada ejemplo. Db, la cual tiene solo un campo llamado valor en el mismo lugar donde se encuentre el .exe //Esta es el archivo Unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, StdCtrls, Mask, DBCtrls, Grids, DBGrids; type TForm1 = class(TForm) QMuestraValores: TQuery; QSumaValores: TQuery; DSQMuestraValores: TDataSource; DSQSumaValores: TDataSource; DBGrid1: TDBGrid; QMuestraValoresValor: TSmallintField; DBEdit1: TDBEdit; QSumaValoresTotal: TFloatField; Memo1: TMemo; procedure ActualizaTotal(DataSet: TDataSet); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.ActualizaTotal(DataSet: TDataSet); begin //Controla siempre si esta cerrada para abrirla if Not QSumaValores.Active Then Begin //Si esta Cerrada Abrila QSumaValores.Open; End Else Begin //Si esta Abierta Carrala y Abrila para actualizar; QSumaValores.Close; QSumaValores.Open; End; //Aca lo ponemos en un memo que es lo mismo que un campo memo Memo1.Text := QSumaValoresTotal.AsString; //Para un DBMemo es //DBMemo.Value := QSumaValoresTotal.AsString; end; procedure TForm1.FormActivate(Sender: TObject); begin QMuestraValores.DatabaseName := ExtractFilePath(Application.ExeName); QSumaValores.DatabaseName := ExtractFilePath(Application.ExeName); //El TQuery que suma se abre con el evento onOpen de el TQuery siguiente QMuestraValores.Open; end; end. //Este es el archivo Unit1.dfm object Form1: TForm1 Left = 312 Top = 136 Width = 162 Height = 330 Caption = 'Suma Campos' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnActivate = FormActivate PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid Left = 25 Top = 10 Width = 99 Height = 156 DataSource = DSQMuestraValores TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] Columns = < item Expanded = False FieldName = 'Valor' Visible = True end> end object DBEdit1: TDBEdit Left = 25 Top = 177 Width = 96 Height = 21 DataField = 'Total' DataSource = DSQSumaValores TabOrder = 1 end object Memo1: TMemo Left = 24 Top = 210 Width = 98 Height = 79 TabOrder = 2 end object QMuestraValores: TQuery AfterOpen = ActualizaTotal AfterEdit = ActualizaTotal AfterPost = ActualizaTotal AfterDelete = ActualizaTotal RequestLive = True SQL.Strings = ( 'SELECT Valor' 'FROM "Ejemplo.db"') Left = 40 Top = 60 object QMuestraValoresValor: TSmallintField FieldName = 'Valor' end end object QSumaValores: TQuery SQL.Strings = ( 'SELECT SUM(Valor) as Total' 'FROM "Ejemplo.db"') Left = 35 Top = 120 object QSumaValoresTotal: TFloatField FieldName = 'Total' end end object DSQMuestraValores: TDataSource DataSet = QMuestraValores Left = 85 Top = 60 end object DSQSumaValores: TDataSource DataSet = QSumaValores Left = 85 Top = 120 end end Creo que te va a servir, Revisa los eventos que ahí esta todo el PRG DX