Autor
Mensagem
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 !!!
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 !!!
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

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.
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
Citação:
bom dia...
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
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
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
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!!!
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!!
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
Citação:
ficou assim, e segue retornando 0(zero)
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
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;
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.
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.
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!
é 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;
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;
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;
é 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;







