PDA

Ver la Versión Completa : sumatoria de una tabla mientras se cumpla una condicion


douglas
29-10-2007, 04:53:46
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
Sum(Monto)
From MiTabla
Where Fecha Between FechaIni and Fechafin


Un Saludo.

enecumene
29-10-2007, 14:50:16
Código SQL [-] (http://www.clubdelphi.com/foros/#)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
file:///C:/DOCUME%7E1/douglas/CONFIG%7E1/Temp/moz-screenshot.jpghey utilice el siguiente codigo:

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:

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
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:

query1.SQL.Text:=' where fecha between :FechaIn and :FechaFin';

porque sin el espacio la consulta queda junta asi:

select sum(monto) from Tablawhere fecha between :FechaIn and :FechaFin

en vez de:

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:

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:

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
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

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

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


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


function GetLocalD: String;
var
stSystemTime : TSystemTime;
begin
Windows.GetLocalTime(stSystemTime);
Result := DateToStr( SystemTimeToDateTime( stSystemTime ) );
end;


y luego el resultado lo coloco en un edit

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??

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.

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
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.

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:


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
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

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
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

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.

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;