Guest gentec Postado Maio 28, 2007 Denunciar Share Postado Maio 28, 2007 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: 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Maio 28, 2007 Denunciar Share Postado Maio 28, 2007 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! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 29, 2007 Denunciar Share Postado Maio 29, 2007 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 Valeu Micheus, desse recurso eu não conhecia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Gentec Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 OpaAcho que foi erro de digitação reparedmDados.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 Dt2abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 31, 2007 Denunciar Share Postado Maio 31, 2007 OpaAcho que foi erro de digitação reparedmDados.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 Dt2Churc, 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Gentec Postado Junho 2, 2007 Denunciar Share Postado Junho 2, 2007 OpaAcho que foi erro de digitação reparedmDados.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 Dt2Churc, 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ã" Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest gentec
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:
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
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.