Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   sumar columna sql (https://www.clubdelphi.com/foros/showthread.php?t=71557)

anubis 27-12-2010 19:46:27

sumar columna sql
 
Buenas,

ya estuve dando vueltas por estos post referente al tema que nos ocupa, pero no hay forma de que funcione.

Algunos da este tipo de solución:

Código Delphi [-]
 query1.SQL.Text:='select sum(importe) as suma from lineasventa';
   query1.ExecSQL;
  label5.caption:=query1.fieldbyname('suma').asstring;

Donde importe es un campo de la tabla lineasventa, pero suma es el resultado de dicha suma por lo que no pertenece a la tabla, y es ahi, al ejecutarlo, donde me da error diciendome que no pertenece a la tabla.

Lo que pretendo es lo siguente:

Sumar la columna completa de importe y que se vea reflejada en un label.
El ejemplo de otro post haciendo referencia a las notas de estudiante no sirvio de mucho puesto que solo quiere sumar de la misma linea.

Un saludo y gracias

marcoszorrilla 27-12-2010 19:52:42

Cita:

Empezado por anubis (Mensaje 385913)
Buenas,
Código Delphi [-]
 query1.SQL.Text:='select sum(importe) as suma from lineasventa';
   query1.Open;
  label5.caption:=query1.fieldbyname('suma').asstring;




Un saludo y gracias


Un Saludo.

anubis 27-12-2010 21:04:01

Gracias por contestar, me sirve de mucho.

No se si le faltara algo a:

Código Delphi [-]
query1.SQL.Text:='select sum(importe) as suma from lineasventa';

Porque en ejecucion al llegar a esa linea me dice que el campo 'HORA' no se encuentra.
Efectivamente en la tabla tengo un campo hora, además de otros, lo que no entiendo es por que dice que no lo encuentra.

marcoszorrilla 27-12-2010 21:46:01

Cita:

Empezado por anubis (Mensaje 385917)
Gracias por contestar, me sirve de mucho.
Código Delphi [-]
query1.SQL.Text:='select sum(importe) as suma from lineasventa';

Probablemente tengas campos persistentes en el Query.

Primero haz doble clic en el Tquery y en la ventana del editor de campos si aparece algo bórralo.

Un Saludo.

anubis 27-12-2010 22:17:09

Gracias de nuevo,

La verdad no tengo ningun campo ahi donde me dices, ya revise todo lo demas y tampoco hay nada visible.

Lo tenia relacionado cno un dbgrid pero tambien lo quite a ver, pero me sigue dando el msimo error.

marcoszorrilla 27-12-2010 22:24:42

Lo mejor es que elimines el Tquery y pongas uno nuevo y comiences desde cero porque la operación es bien sencilla y te tiene que funcionar.

Un Saludo.

anubis 28-12-2010 06:18:25

gracias funciono bien, pero tengo un pequeño problema
a colacion de eso.

Haciendolo asi me suma todo que esl o que queria, pero si despues hago un filtro con fechas, en el dbgrid me sale lo que busco, el problema me surge cuando quiero que me sume solo lo que me sale por las fechas pero me da error, me dice que el codigo(es otro campo) no se encuentra.

marcoszorrilla 28-12-2010 07:21:24

Código Delphi [-]
query1.SQL.Text:='select sum(importe) as suma from lineasventa And Fecha Between :i And :f';;
Query1.ParamByName('i').AsDate:=dFechaINi;
Query1.ParamByName('f').AsDate:=dFechaFin;
Query1.Open;

En donde dFechaIni y dFechaFin serían dos variables de tipo fecha conteniendo las fechas inicial y final respectivamente.

Un Saludo.

anubis 29-12-2010 01:59:44

gracias de nuevo.

Bien como me he debido de liar yo solo, creo y, a pesar de hacer funcionar el programa a nivel dbgrid con filtro, se me resiste el poder sumar en funcion de lo que me aparece en el dbgrid, pero no encuentra los campos.

No quiero pretender que sea un curso acelerado de sql :(, sino mas bien una pequeña orientacion sobre, me imagino, algo tan básico como esto.

Pongo las lineas donde hago lo que me dices:

En el formcreate tengo esto:

Código Delphi [-]
zconnection1.Database:='g:\leerdes\ventas.fdb';
  zconnection1.Connected:=true;
  qventas.SQL.Text:='select * from lineasventa';
   qventas.IndexFieldNames:='codigo';
  qventas.Active:=true;

Tengo un zconnection, un zquery(ventas) unido al zconnection, un datasource unido al query y un dbgrid unido al datasource.

En pantalla tengo un dbgrid con sus columnas respectivas, 2 introduccion de fechas y 2 de horas y un un checkbox.

Cuando arranco el programa me muestra todos los registros de la tabla.

si le meto las fechas y horas solo, el dbgrid me muestra los que cumplen el rango:

Código Delphi [-]
 if checkbox1.Checked=true then
  begin
  qventas.SQL.clear;
  qventas.Active:=False;
  qventas.Close;
qventas.Sql.Text:='SELECT * FROM lineasventa WHERE FECHA>=:FECHANAC1  AND FECHA<=:FECHANAC2 and hora>=:hora1 and hora<=:hora2';
qventas.ParamByName('FECHANAC1').AsDate:=dateedit1.Date;
qventas.ParamByName('FECHANAC2').AsDate:=dateedit2.Date;
qventas.ParamByName('hora1').Astime:=strtotime(maskedit1.Text);
qventas.ParamByName('hora2').Astime:=strtotime(maskedit2.text);
qventas.open;
qventas.Filtered:=true;
dateedit1.Enabled:=false;
dateedit2.Enabled:=false;
maskedit1.Enabled:=false;
maskedit2.enabled:=false;
 qventas.SQL.clear;
  qventas.close;
qventas.SQL.Text:='select sum(importe) as sumaa from lineasventa And FECHA  between :FECHANAC1  AND :FECHANAC2 and hora between :hora1 and :hora2';
qventas.ParamByName('FECHANAC1').AsDate:=dateedit1.Date
qventas.ParamByName('FECHANAC2').AsDate:=dateedit2.Date;
qventas.ParamByName('hora1').Astime:=strtotime(maskedit1.Text);
qventas.ParamByName('hora2').Astime:=strtotime(maskedit2.text);
qventas.Open;
end
  else
  begin
    qventas.Active:=False;
   qventas.SQL.clear;
   qventas.sql.text:='select * from lineasventa';
  qventas.Active:=true;
  dateedit1.Enabled:=true;
dateedit2.Enabled:=true;
maskedit1.Enabled:=true;
maskedit2.enabled:=true;
//calculos;
  end;
  end;

Al ejecutar el programa me da error en esta linea:
Código Delphi [-]
qventas.SQL.Text:='select sum(importe) as sumaa from lineasventa And  FECHA  between :FECHANAC1  AND :FECHANAC2 and hora between :hora1 and  :hora2'
donde pone :hora1 y etc, me salen interrogantes ademas dice invalid token.

Si no pongo el tema de la suma no hay problema, me aplica el filtro.

Que estoy haciendo mal?.

gracias nuevamente.

pd: por cierto marcoszorrilla, tambien soy de cantabria, de santander mas concretamente, pero estoy fuera del pais hace ya 4 años y si, tengo morrilla snif, snif snif.


La franja horaria es GMT +2. Ahora son las 11:29:24.

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