DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 30/6/2010 5:20:03 PM

  olá pessoal, sou novo, no fórum,e com a ferramenta delphi, espero que me ajudem
meu seguinte problema é assim...

tenho 2 usuários que se logam(com login e senha)

preciso que meu sistema some a venda desse usuário por dia, e por mês...

sei muito pouco sobre o delphi...

então uma ajuda de preferencia bem explicada seria de uma enorme contribuição para meu conhecimento...
já estou a 2 semanas pesquisando sobre isso, tenho que entregar meu programa e eu sabendo como se faz isso, fica praticamente terminado o sistema...

obrigado pela atenção !!!
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 30/6/2010 6:48:16 PM
mas como você quer esse resultado? qual o bd utilizado? como essa informação está gravada?

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 30/6/2010 9:39:10 PM
db access...é gravada através da dbgrid..o que preciso é pegar a soma entre as datas (form 3) no form7 preciso pegar quanto cada cliente gastou,e no form 8 quanto cada numero de crachá vendeu...pelo óbvio apenas um exemplo do form7, já resolveria todos os meus problemas...valew ae...e muito obrigado pela atenção!!!!!!! espero que me ajudem...abração

 
CARLOS EDUARDO DOMINGUES MAZZI
 
 


País: Brasil
Estado: SP
Cidade: LINS
Mensagens: 591
 Postado em: 30/6/2010 9:51:54 PM

Use uma String SQL , num componente TQuery, ai depende dos componentes que vc estiver usando, se 'e ADO, ou outros...

 
mas seria basicamente, assim: SELECT sum(valor) FROM Tabela where DataXyz Between :PDtaInicial and :PDtaFinal and Usuario =:PUsuario
 
Onde PDtaInicial, eh a sua data Inicial
Onde PDtaFinal, eh a sua data Final
Onde PUsuario, eh o usuario(codigo provavelmente)
 
Mas passe pra n'os quais componentes que vc esta usando na sua tela para acesso e manipulacao dos dados. 
 

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 1/7/2010 10:34:04 AM
bom dia...
eu não uso data module,mas os componentes em cada form...
por form principal eu tenho adoconnection,adotable (que trabalha com a dbgrid ) e um data source,
ae no form que tenho q fazer a consulta ,tenho um adoquery(para manipular o sql) conectado ao adoconnection 
do form principal,e um data source...em cada form que vou fazer a consulta eu tenho o adoquery e datasource...
obrigado pela atenção amigo...vou tentar esse código que me passou na string do sql...
abraço

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 1/7/2010 10:54:47 AM


Citação:
bom dia...
eu não uso data module,mas os componentes em cada form...
por form principal eu tenho adoconnection,adotable (que trabalha com a dbgrid ) e um data source,
ae no form que tenho q fazer a consulta ,tenho um adoquery(para manipular o sql) conectado ao adoconnection 
do form principal,e um data source...em cada form que vou fazer a consulta eu tenho o adoquery e datasource...
obrigado pela atenção amigo...o código que tenho é parecido com o que me passou...olha ae


o código que eu tenho que não funciona,ele pega o valor total da tabela,e não entre datas, é assim...
SQL => SELECT SUM(VALOR)as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf

e no button
=>
#Código
procedure TForm3.BitBtn4Click(Sender: TObject);
begin

ADOQuery1.Parameters.ParamByName('datai').Value := DateTimePicker1.date;
ADOQuery1.Parameters.ParamByName('dataf').Value := DateTimePicker2.date;


Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);

end;

end.

abraço
 

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 1/7/2010 11:50:13 AM
todos os usuarios, agrupado por data, num determinado período:
SELECT data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf GROUP BY data

todos os usuarios, agrupado por usuario e data, num determinado período:
SELECT usuario, data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf GROUP BY usuario, data

somente 1 usuario, agrupado por data, num determinado período:
SELECT data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf and usuario = :usuario GROUP BY data


 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 1/7/2010 2:37:30 PM
não está dando certo...
coloquei o 1° código que me passou na string do sql, e chamei assim...

#Código
procedure TForm3.BitBtn4Click(Sender: TObject);
begin
adoquery1.Close ;
ADOQuery1.Parameters.ParamByName('datai').Value := DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('dataf').Value := DateTimePicker2.date;
adoquery1.Open ;

Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);

end;
deu erro,acusando que algo tinha errado nesta linha,(ADOQuery1.Parameters.ParamByName('datai').Value := DateTimePicker1.Date;)

então deixei só o (Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);)

e no sql fiz assim

#Código
SELECT data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai = :DateTimePicker1.Date AND :dataf = :DateTimePicker2.Date GROUP BY data

e começou a me retornar 0(zero)...

valew pela atenção, ta de parabens o fórum!!!

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 1/7/2010 4:22:19 PM

Citação:
deu erro,acusando que algo tinha errado nesta linha,(ADOQuery1.Parameters.ParamByName('datai').Value := DateTimePicker1.Date;)


qual foi o erro apresentado?


 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 1/7/2010 4:54:12 PM
assim ó...hehe
'tipo de dados imcompatível na expressão de critério'

dae chamei direto no sql do adoquery...assim
#Código
SELECT data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai = :DateTimePicker1.Date AND :dataf = :DateTimePicker2.Date GROUP BY data

e me retorna apenas 0(zero)

muito obrigado pela atenção meu amigo!!




 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 1/7/2010 8:44:37 PM
toque o .Value por .AsDate ou .AsDateTime.

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 2/7/2010 10:20:13 AM
não dá...
ele da erro nos "asdate" ou asdatetime...deve ser por causa do BD access...
valew..
espero novas dicas...obrigado pela atenção...
abraço

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 2/7/2010 3:00:24 PM
tente:

ADOQuery1.Parameters.ParamByName('xxx').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('xxx').Value := DateTimePicker1.Date;



 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 2/7/2010 3:33:48 PM
ficou assim, e segue retornando 0(zero)
#Código
procedure TForm3.BitBtn4Click(Sender: TObject);
begin
adoquery1.Open ;
ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
adoquery1.Close ;


Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);

end;

bárbaro que to apanhando pra isso...tbm a hora que der certo nunca mais vo esquecer hehehe...

valew pela ajuda meu amigo...

abraço


 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 2/7/2010 3:45:32 PM
você está conseguindo pegar o valor de um campo de um dataset que encontra-se fechado ???

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 2/7/2010 3:51:39 PM
como assim?
o valor total da tabela eu consigo somar normal...só entre datas que não...
o porque eu não sei...
o que tu acha que pode ser?
abrço

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 2/7/2010 4:58:32 PM

Citação:
ficou assim, e segue retornando 0(zero)
#Código

procedure TForm3.BitBtn4Click(Sender: TObject);
begin
adoquery1.Open ;
ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
adoquery1.Close ;


Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);

end;


bárbaro que to apanhando pra isso...tbm a hora que der certo nunca mais vo esquecer hehehe...

valew pela ajuda meu amigo...

abraço



a sua última linha de comando para o dataset é um Close. isso fecha o dataset. depois você atribui o valor do campo desse dataset fechado ao seu Edit. muito estranho....

o correto seria:
procedure TForm3.BitBtn4Click(Sender: TObject);
begin
  adoquery1.Close; // fecha o dataset
  ADOQuery1.SQL.Text := 'SELECT data, SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf GROUP BY data';
  ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
  ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
  adoquery1.Open; // abre o dataset

  Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);
end;


 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 2/7/2010 5:30:52 PM
botei igual ao seu código...
e me retorna apenas 10...
hehehe

qualquer data de coloque me retorna o 10...hehehe

valew amigo!

 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 5/7/2010 10:29:16 AM
bom dia pessoal..
depois do descanso do final de semana...
espero novamente ajuda para terminar esse meu sistema...

abração ae! 

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 5/7/2010 10:36:39 AM

Citação:
botei igual ao seu código...
e me retorna apenas 10...
hehehe

qualquer data de coloque me retorna o 10...hehehe

valew amigo!


no que você está se baseando para achar que esse valor está errado?

exiba o conteúdo de ADOQuery1 numa grade e você poderá visualizar todos os registros retornados.


 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 5/7/2010 10:54:22 AM
coloquei um dbgrid e liguei ao datasource do adoquery...e me retorna tudo certinho da tabela...

o que pode ser?





 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 5/7/2010 11:11:02 AM
ele não me retorna soma...só o 10...
mas na dbgrid aparece os registros que ele pega... der repente tem que formatar data...alguem sabe formar?
não sei o que pode ser...

abraço
valew pela atenção!

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 5/7/2010 5:13:40 PM
você precisa ver se a instrução SQL utilizada é aquela que dará o retorno que você espera.

a instrução que eu utilizei trará a soma de vendas por dia, independente do usuario. então o retorno pode ser algo como:

data          total
02/06/2009      10
03/06/2009      13.8
04/06/2009      45
05/06/2009      63.2

portanto, se você utilizar:

Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);

o retorno será sempre 10, pois esse é o conteúdo do campo total do primeiro registro.

agora se você precisa do total geral de um período, altere o código para:

procedure TForm3.BitBtn4Click(Sender: TObject);
begin
  adoquery1.Close; // fecha o dataset
  ADOQuery1.SQL.Text := 'SELECT SUM(VALOR) as total FROM tbreceitas WHERE data BETWEEN :datai AND :dataf';
  ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
  ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
 
ADOQuery1. Open; // abre o dataset

  Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);
end;


o select irá trazer o que você mandou, não o que você pensou.


 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 5/7/2010 5:40:39 PM
valew meu amigo...deu certinho...desculpa qualquer coisa...é que estou aprendendo...e com certeza aprendi muito graças a ti...

só uma duvidazinha...hehe
no caso se eu fosse fazer a soma entre data,só que por usuário...como ficaria ?
botaria o usuário antes do sum? 
exemplo:
colocaria o usuário em um edit,botaria 2 datetimepicker,e outro edit para aparecer o total que o usuário vendeu...

abração!

 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 6/7/2010 9:11:35 AM
é simples: basta adicionar o usuário na cláusula condicional.

procedure TForm3.BitBtn4Click(Sender: TObject);
begin
  ADOQuery1.Close; // fecha o dataset
  ADOQuery1.SQL.Text :=
    'SELECT SUM(VALOR) as total FROM tbreceitas '+
    'WHERE data BETWEEN :datai AND :dataf and usuario = :nome ';
  ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
  ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
  ADOQuery1.Parameters.ParamByName('dataf').DataType := ftString;//supondo que seja string...
  ADOQuery1.Parameters.ParamByName('dataf').value := Edit1.Text;
  ADOQuery1. Open; // abre o dataset

  Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);
end;




 
Emerson
 
 


País: Brasil
Estado: SP
Cidade: São Paulo
Mensagens: 938
 Postado em: 6/7/2010 9:14:53 AM
corrigindo, ja que o fórum não está mais permitindo edição....

é simples: basta adicionar o usuário na cláusula condicional.

procedure TForm3.BitBtn4Click(Sender: TObject);
begin
  ADOQuery1.Close; // fecha o dataset
  ADOQuery1.SQL.Text :=
    'SELECT SUM(VALOR) as total FROM tbreceitas '+
    'WHERE data BETWEEN :datai AND :dataf and usuario = :nome ';
  ADOQuery1.Parameters.ParamByName('datai').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('datai').value := DateTimePicker1.Date;
  ADOQuery1.Parameters.ParamByName('dataf').DataType := ftDate;
  ADOQuery1.Parameters.ParamByName('dataf').value := DateTimePicker2.date;
  ADOQuery1.Parameters.ParamByName('nome').DataType := ftString;
  ADOQuery1.Parameters.ParamByName('nome').value := Edit1.Text;
  ADOQuery1. Open; // abre o dataset

  Edit3.text := FloatToStr(adoquery1.FieldByName('total').asFloat);
end;




 
jean carlo faria mugica
 

País: Brasil
Estado: RS
Cidade: pelotas
Mensagens: 26
 Postado em: 6/7/2010 10:54:49 AM
PERFEITO MEU AMIGO!!!

MEUS PARABÉNS ME AJUDARAM MUITO...ESPERO CONTRIBUIR PARA O SITE TAMBÉM ...

ABRAÇÃO E VALEU PELA AJUDA...

FICOU TUDO ÓTIMO!
TENHA UM BOM DIA!!!! 

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03