Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   sumatoria de una tabla mientras se cumpla una condicion (https://www.clubdelphi.com/foros/showthread.php?t=49739)

douglas 29-10-2007 04:53:46

sumatoria de una tabla mientras se cumpla una condicion
 
buenas chicos del foro, aqui miren como siempre molestandolos, necesito la ayuda a realizar lo siguiente:

1) quiero sumar todas las cantidades que tengo en un campo monto que concuerden con la fecha que el usuario desee saber, por favor chicos, loes agradecere mucho toda la ayuda que sea posible.

utilizo una tabla plana, con la cual conecto con un table de la pestaña BDE y un data source, intente conectar un query pero no me dejo, la tabla esta hecha en el database desktop en paradox 7, segun las indicaciones del programa que utilice.

de antemano muchas gracias.

marcoszorrilla 29-10-2007 07:02:15

Código SQL [-]
Sum(Monto)
From MiTabla
Where Fecha Between FechaIni and Fechafin

Un Saludo.

enecumene 29-10-2007 14:50:16

Cita:

Empezado por marcoszorrilla (Mensaje 241874)
Código SQL [-]Sum(Monto)
From MiTabla
Where Fecha Between FechaIni and Fechafin


Un Saludo.

Mejor respuesta que esta no puede haber.:p

douglas 29-10-2007 15:18:27

[IMG]file:///C:/DOCUME%7E1/douglas/CONFIG%7E1/Temp/moz-screenshot.jpg[/IMG]hey utilice el siguiente codigo:

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
query1.Active:=false;
query1.SQL.Text:='sum(monto)';
query1.SQL.Text:='from control del internet';
query1.SQL.Text:='where fecha betwen dbedit1.Text and dbedit1.Text';
query1.Active:=true;
end;
pero me tira este error

project cibereador.exe rised exception class edbengineerror with message 'invalid use for keyword token: where.

chicos es como la segunda ves que utilizo sql, perdon pero no se mucho sobre esto, asi que los molesto de nuevo con ayuda, de antemano les agradesco un monton.

enecumene 29-10-2007 15:24:52

Hola Douglas, intenta:

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
query1.Close;
query1.SQL.Text:='select sum(monto)';
query1.SQL.Text:='from Tabla';
query1.SQL.Text:='where fecha between :FechaIn and :FechaFin';
query1.parambyname('FechaIn').Value:=edit1.text;
query1.parambyname('FechaFin').Value:=edit2.text;
query1.Open;
end;

me imagino que "Control del internet" es el nombre de la tabla:confused::confused:.

Saludos

douglas 29-10-2007 16:04:26

oye perdon tanta molestadera pero me devuelve otro error es el mismo emnsaje que el anterio solo que ahora dice
query1: parameter fecha in not found;

eduarcol 29-10-2007 16:08:26

Tienes un error que es el nombre de la tabla, esta no deberia tener espacios, pero como esto sucede debes entonces encerrarla entre las comillas simples.

El error del parametro es porq no es lo mismo FechaIn a Fecha In, trata de n outilizar los espacios en nombre de tablas ni de variables.

douglas 29-10-2007 16:10:47

perdon lo escribi mal aqui en el foro, pero fechain lo tengo junto, mmm ahora probare con lo de la tabla, y lo comento por aqui, gracias eduardo col

eduarcol 29-10-2007 16:14:15

Cita:

Empezado por douglas (Mensaje 241952)
perdon lo escribi mal aqui en el foro, pero fechain lo tengo junto, mmm ahora probare con lo de la tabla, y lo comento por aqui, gracias eduardo col

Si lo tienes junto verifica que este escrito tal como lo escribio Enecumene

douglas 29-10-2007 16:18:00

sip asi lo tengo, y me tira erro en el where, sabes realmente lo que debo de hacer es, introducir una fecha, y luego que me tire el total de los montos en esa fecha, peron que te molete tanto, pero te agradezco mucho que me puedas ayudar

eduarcol 29-10-2007 16:20:19

copia el codigo que estas utilizando y pegalo aqui, estoy muy seguro que hay un error en la sentencia vamos a ver cual es

enecumene 29-10-2007 16:21:55

Hola Douglas, fijate me he dado cuenta que en el Where falta un espacio delante, asi:

Código Delphi [-]
query1.SQL.Text:=' where fecha between :FechaIn and :FechaFin';

porque sin el espacio la consulta queda junta asi:

Código SQL [-]
select sum(monto) from Tablawhere fecha between :FechaIn and :FechaFin

en vez de:

Código SQL [-]
select sum(monto) from Tabla where fecha between :FechaIn and :FechaFin

espero que te ayude.

Saludos

douglas 29-10-2007 16:26:01

ya lo aplique y me sigue tirando el erro te priject cibereador .exe y token where,

el codigo que estoy trabajando es este:
Código Delphi [-]
 
procedure TForm3.Button1Click(Sender: TObject);
var
FechaIn,FechaFin:string;
begin
query1.Close;
query1.SQL.Text:='select sum(monto)';
query1.SQL.Text:='from control del internet';
query1.SQL.Text:='where fecha between :FechaIn and :FechaFin';
query1.parambyname('FechaIn').Value:=edit1.text;
query1.parambyname('FechaFin').Value:=edit2.text;
query1.Open;
end;

enecumene 29-10-2007 16:30:27

Hombre eso no es necesario, debes quitarlo:

Código Delphi [-]
var
FechaIn,FechaFin:string;

y segundo no le veo el espacio por delante del where como te propuse, aparte de eso no le veo el problema.

intenta quitar los variables y poner el espacio delante del where.

SAludos.

douglas 29-10-2007 16:32:53

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
query1.Close;
query1.SQL.Text:='select sum(monto)';
query1.SQL.Text:='from control del internet ';
query1.SQL.Text:=' where fecha between :FechaIn and :FechaFin';
query1.parambyname('FechaIn').Value:=edit1.text;
query1.parambyname('FechaFin').Value:=edit2.text;
query1.Open;
end;

aqui esta manix perdon por lo de las variables, pero ya probe y sigue dandome el mismo error, perdomn que te ponga tantas molestias

eduarcol 29-10-2007 16:33:19

jeje. el error esta que si tu modificas la propiedad TEXT modificas toda la sentencia, lo que tu quieres se logra con ADD

prueba esto

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
   query1.Close;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
end;

lo de las variables tienes que quitarlo

enecumene 29-10-2007 16:36:56

Conchole, yo sabia que algo raro era, no me habia fijado que decia text en vez de Add, debo leer un poco mas o es que mi vista ya esta dando vestigios de vejez a mis 28 añitos?:(

Saludos.

douglas 29-10-2007 16:41:02

perdon chicos, pero ahora me da error en el select, les escribo el error, y perdon ya hasta verguenza me da molestarlo, es que deplano si los estoy molestando muchisimo, perdon, pero este es el error:

invalid use of keyword. token:select

como ven ahora es en el select
perdon les envio como tengo mi codigo ahora

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
   query1.Close;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
end;

eduarcol 29-10-2007 16:48:09

debes limpiar la lista


Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
begin
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
end;

Caral 29-10-2007 17:30:46

Hola
Con que estableces la fecha?, (datetimepicker o Edit)?
Donde la seleccionas de uno o de dos?
En la tabla existe el campo fecha o es texto?
Paradox permite el parambyname solo?
Por que no hacer la suma por separado?
Bueno, yo tengo esas dudas
Saludos

douglas 29-10-2007 18:51:37

pues para conseguir la fecha utilizo esta funcion

Código Delphi [-]
 
function GetLocalD: String;
 var
    stSystemTime : TSystemTime;
 begin
    Windows.GetLocalTime(stSystemTime);
    Result := DateToStr( SystemTimeToDateTime( stSystemTime ) );
 end;

y luego el resultado lo coloco en un edit

Código Delphi [-]
procedure TForm3.FormCreate(Sender: TObject);
begin
edit1.Text:=getlocald;
end;

y luego del edit hago todo lo que ya vimos anteriormente, la verdad no se que hacer, perdon por tantas molestias

eduarcol 29-10-2007 20:27:14

porq la fecha no bastaria??

Código Delphi [-]
DatetoStr(Date);

y ahora que error te da???, no sirvio mi ultima sugerencia???

douglas 29-10-2007 21:57:47

perdon eduardocol, ya funciono, pero ahora el resultado que me da es cero, perdon tanta molestia e ignorancia de mi parte realize el siguiente codigo, y me muestra cero.

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var
a:integer;
b:string;
begin
    a:=0;
    query1.Close;
   query1.SQL.Clear;
   a:=a+query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
   showmessage(inttostr(a));
end;

egostar 29-10-2007 22:12:16

Cita:

Empezado por douglas (Mensaje 242104)
perdon eduardocol, ya funciono, pero ahora el resultado que me da es cero, perdon tanta molestia e ignorancia de mi parte realize el siguiente codigo, y me muestra cero.

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var
a:integer;
b:string;
begin
    a:=0;
    query1.Close;
   query1.SQL.Clear;
   a:=a+query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
   showmessage(inttostr(a));
end;

A ver, porque no haces esto:

Código Delphi [-]
   a:=0;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
   a := query1.fields[0].AsInteger;   
   query1.Close;
   showmessage(inttostr(a));

Salud OS

douglas 29-10-2007 22:27:56

gracias señor le agradezco mucho todas sus finas atenciones, a todos los que me ayudaron en este foro, les agradezco todo todo, y cuando necesiten cualquier cosa y esta en mis posibilidades ayudarlos no duden en acudir a mi persona

marcoszorrilla 29-10-2007 22:30:33

Código Delphi [-]
 a:=0;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.Open;
   a := query1.fields[0].AsInteger;   
   query1.Close;
   showmessage(inttostr(a));

Ejecuta solamente esta parte y dinos que resulta.

Porque si falla es posible que el nombre de la tabla no sea el adecuado y tengas que encerrarlo entre corchetes []

Un Saludo.

Caral 29-10-2007 22:36:06

Hola
La verdad no entiendo todavia el problema, pon dos datetimepicker en el form y hazlo asi, pruebalo a ver que pasa
Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var 
b:string;
begin     
query1.Close;
query1.SQL.Text:= 'select sum(monto)' +
                          ' from ' + QuotedStr('control del internet') '+
                          ' where fecha between :FechaIn and :FechaFin' ;
   query1.parambyname('FechaIn').Value:=Datetimepicker1.dateTime;
   query1.parambyname('FechaFin').Value:=Datetimepicker2.dateTime;
   query1.Open;
   showmessage(inttostr(a));
end;
Cuando usas text, no se necesita limpiar la sentencia, para mi es mas claro.
Saludos

douglas 29-10-2007 22:36:20

con el codigo de aqui a bajo me suma un numero mas que el anterior
Código Delphi [-]
 a:=0;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.Open;
   a := query1.fields[0].AsInteger;   
   query1.Close;
   showmessage(inttostr(a));

pero con este otro codigo me suma lo que deberia de ser
Código Delphi [-]
  a:=0;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.SQL.Add(' where fecha between :FechaIn and :FechaFin');
   query1.parambyname('FechaIn').Value:=edit1.text;
   query1.parambyname('FechaFin').Value:=edit2.text;
   query1.Open;
   a := query1.fields[0].AsInteger;   
   query1.Close;
showmessage(inttostr(a));

douglas 29-10-2007 22:40:57

en realidad señores del foro les agradezco tanto por su ayuda, a todos, pues de un poco de informacion de todos logramos hacer un boton, enserio a todas las personas que me ayudaron no duden en molestarme cuando necesiten cualquier cosa menos dinero que apenas y tengo para pagar lo del ciber jajajajaja, no enserio muchas gracias todos y aqui dejo el codigo final que me funciono a las mil maravillas, a todos muchas gracias y un gran abrazo.
Código Delphi [-]
procedure TForm3.Button2Click(Sender: TObject);
var
a:integer;
begin
 a:=0;
   query1.Close;
   query1.SQL.Clear;
   query1.SQL.Add('select sum(monto)');
   query1.SQL.Add(' from ' + QuotedStr('control del internet'));
   query1.Open;
   a := query1.fields[0].AsInteger;
   query1.Close;
   showmessage(inttostr(a));
end;


La franja horaria es GMT +2. Ahora son las 22:03:21.

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