Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Problema Ao Consultar No Periodo


Guest gentec

Pergunta

Olá, por ser novo em delphi ainda estou utilizando o paradox e

estou tentando fazer uma consulta via query e sql que me forneça ao

final de um periodo de consulta entre datas, os valores somados de uma

coluna em um dbgrid.

Exemplo:

grid.gif

no final desta consulta, os valores totalizados da coluna credito, seriam enviados para um label.caption ou um edit.text.

agradeço desde já por m ajudarem, abaixo segue a rotina que estou fazendo para está consulta.

begin

dmDados.qMovimento.Close;

dmDados.qMovimento.SQL.Clear;

dmDados.qMovimento.SQL.Add('select datas,produto,peso,per,preço,credito,debito from Movimento');

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas >= :D1 and Datas <= :D2 order by datas');

dmDados.qMovimento.ParamByName('d1').Asdate := dt1.date;

dmDados.qMovimento.ParamByName('d2').Asdate := dt2.date;

dmDados.qMovimento.ParamByName('nome').AsString := ednome.text;

dmDados.qMovimento.Open;

end;

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Tenta Assim:

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between Dt1 and dt2 ');
dmDados.qMovimento.ParamByName('d1').Value:= dt1.dateTime;
dmDados.qMovimento.ParamByName('d2').Value:= dt2.dateTime;
você Cria um variavel antes do primerio "begin" Assim
proced...
Var
VCred:double;
Begin
para o label faz assim:
VCred:=0;
dmDados.qMovimento.first;
while not dmDados.qMovimento.eof do
begin
Vcred:= Vcred+ dmDados.qMovimento.fieldByname('Credido').value;
dmDados.qMovimento.next;
end;

Label1.caption := FloatToStrF(Vcred,FFCurrency,10,2);

Tenta isso!

Link para o comentário
Compartilhar em outros sites

  • 0

Só um adendo ao que o Pirambú! colocou...

Para evitar que a linha selecionada no DBGrid se movimente (gerando até um scroll) enquanto você contabiliza o valor total, antes de abrir a consulta (.Open) chame o método DisableControls do seu dataset (a query). Siga com o While para a totalização e, ao término, chame o método First para reposicionar novamente no início da sua consulta e chame o método EnableControls para que seu DBGrid seja atualizado e os controles ligados ao dataset tenham sua funcionalidade restabelecida.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Pirambú e Micheus, tá dando um erro:

"qMovimento: parameter 'd1' not Found"

pelo que sei está mesagem se refere a uma variavel não encontrada, como deverei resolver isto?

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

Acho que foi erro de digitação repare

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between Dt1 and Dt2 ');

dmDados.qMovimento.ParamByName('d1').Value:= dt1.dateTime;

dmDados.qMovimento.ParamByName('d2').Value:= dt2.dateTime;

Troque d1 e d2 por Dt1 e Dt2

abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Opa

Acho que foi erro de digitação repare

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between Dt1 and Dt2 ');

dmDados.qMovimento.ParamByName('d1').Value:= dt1.dateTime;

dmDados.qMovimento.ParamByName('d2').Value:= dt2.dateTime;

Troque d1 e d2 por Dt1 e Dt2

Churc, acho que esse poderia ser o próximo erro. :rolleyes:

Eu explico.

Com certeza motivo da mensagem é a não existência de um parâmetro com o nome d1 e d2, é verdade. Mas, mesmo que fosse corrigido o nome dos parâmetros em ParamByName, ainda teríamos a mesma mensagem (com os novos nomes, é claro). Isto ocorreria pelo fato de a consulta não estar devidamente preparada para receber as datas como parâmetro (a utilização do ":"). ;)

Então, Pirambú!, além do que o Churc mencionou, acrescente os ":" conforme segue:

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between :Dt1 and :Dt2 ');

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Opa

Acho que foi erro de digitação repare

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between Dt1 and Dt2 ');

dmDados.qMovimento.ParamByName('d1').Value:= dt1.dateTime;

dmDados.qMovimento.ParamByName('d2').Value:= dt2.dateTime;

Troque d1 e d2 por Dt1 e Dt2

Churc, acho que esse poderia ser o próximo erro. :rolleyes:

Eu explico.

Com certeza motivo da mensagem é a não existência de um parâmetro com o nome d1 e d2, é verdade. Mas, mesmo que fosse corrigido o nome dos parâmetros em ParamByName, ainda teríamos a mesma mensagem (com os novos nomes, é claro). Isto ocorreria pelo fato de a consulta não estar devidamente preparada para receber as datas como parâmetro (a utilização do ":"). ;)

Então, Pirambú!, além do que o Churc mencionou, acrescente os ":" conforme segue:

dmDados.qMovimento.SQL.Add('where nomefor = :nome and Datas between :Dt1 and :Dt2 ');

Abraços

:D Resolvido o problema, valeu Pirambu!, Micheus e Churc ajudando nesta empreitada.

Fica a mensagem: " Ajudando aos outros hoje, estaremos nos ajudando no amanhã"

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...