Fórum Ajuda com uma Rotina verificar campos de uma tabela #424106

19/09/2012

0

Pessoal este codigo eu havia postado aqui hoje, como ajuda com calculo,e os amigos me ajudaram para que o resultado do codigo fosse exebido, até ai tudo bém, porém precisei incrementar o seguinte, colocando um radioGroup, onde é selecionado umas das opções pagas e Á pagar,fiz a codificação usando case para o radiogroup, codigo do case esta ok.
mas dentro do case, antes de fazer a busca por periodo e me dar o resultado eu preciso que verique o campo da tabela se o campo da tabela (MensalidadePaga) que é type A (string)esta com o valor (pago), então executa o codigo que verifica o periodo e traz o resultado(soma)ao periodo( data inicial e data final) somente de todos os campos que contenham(pago).
mas caso no radiogroup foi selecionado Á pagar então executa o codigo que verifica o periodo e traz o resultado(soma)ao periodo( data inicial e data final) somente de todos os campos que contenham o valor(Npago).

criei as variaveis pg, npg : string; para serem compradas dentro do codigo, vejam o codigo e vejam no podem me ajudar?
o que sta acontecendo é o seguinte não importa o periodo que defino e opcão no radiogroup como pagas, tenho o resultado de tudo, pagas(pago) e não pagas(NPago) e assim também se seleciono Á pagar no Radio, acredito que meu codigo esta fora de logica ou com codigo de vericação dos campos errados, usei um if para isto, vejam se esta certo verificar com if ou ter que ser outro comando, ou se coloquei o if dentro do codigo no lugar errado.agradeço desde ja a força de vcs.

procedure TFormCaixa.BitBtn1Click(Sender: TObject);
var i, t: integer;
pg, npg : string;  // variaveis
Begin
   Case RadioPesq.ItemIndex of
   0: begin
   pg:= 'paga';// valor do campo na variavel para comparar
   dados.QueryMensalidade.Open;
   If final.Date < inicial.Date then
      begin
        Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
        inicial.SetFocus end else
       begin
         Dados.QueryMensalidade.Filter:='DataAte >='+QuotedStr(datetostr(Inicial.Date))+' and DataAte <='+QuotedStr(datetostr(Final.Date));
         Dados.QueryMensalidade.Filtered := True;
         if Dados.QueryMensalidade.RecordCount = 0 then
        begin
            Showmessage ('Não Existe Dados no Período Solicitado !');
            Inicial.SetFocus;
         end else
             pg:=Dados.QueryMensalidadeMensalidadePaga.AsString;

            Dados.QueryMensalidade.First;
             t := 0; { <-- variavel dando inicialização sendo zero! }
             if Dados.QueryMensalidadeMensalidadePaga.AsString = pg then // aqui faço o if pra comparar se dados do campo é igual a variavel.

             begin
             for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
             begin
             t := t + Dados.QueryMensalidadeValorInicial.AsInteger;
             Dados.QueryMensalidade.Next;
             Edit1.Text := FormatFloat('#,##0.00', t);
      end;
    end;
  end;
end;
1: begin
npg:= 'NPago'; valor do campo na variavel para comparar
   dados.QueryMensalidade.Open;
   If final.Date < inicial.Date then
      begin
        Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
        inicial.SetFocus end else
       begin
         Dados.QueryMensalidade.Filter:='DataAte >='+QuotedStr(datetostr(Inicial.Date))+' and DataAte <='+QuotedStr(datetostr(Final.Date));
         Dados.QueryMensalidade.Filtered := True;
         if Dados.QueryMensalidade.RecordCount = 0 then
        begin
           Showmessage ('Não Existe Dados no Período Solicitado !');
           Inicial.SetFocus;
         end else
             pg:=Dados.QueryMensalidadeMensalidadePaga.AsString;

            Dados.QueryMensalidade.First;
             t := 0; { <-- variavel dando inicialização sendo zero! }
             if Dados.QueryMensalidadeMensalidadePaga.AsString = npg then// aqui faço o if pra comparar se dados do campo é igual a variavel.
             begin
             for i := 0 to Dados.QueryMensalidade.RecordCount -1 do
             begin
             t := t + Dados.QueryMensalidadeValorInicial.AsInteger;
             Dados.QueryMensalidade.Next;
             Edit1.Text := FormatFloat('#,##0.00', t); 
      end;
    end;
  end;
end;
end;
end;




Conto com vcs garrei nisto e não estou dando conta.



Gilvanio Gonçalves

Gilvanio Gonçalves

Responder

Posts

20/09/2012

Alisson Santos

Amigo para eu puder fazer uns testes aqui e auxiliar na duvida, poderia postar só a estrutura da tabela de mensalidade paga, pois eu gero aqui em um banco essa tabela e verifico o que tem que ser feito.

Ou você pode ir debugando o seu programa linha a linha e verificando a sql que está retornando para você e verificar no programa que adminsitra seu banco de dados como o ibexpert e ver o que ele retorna corretamente.
Responder

Gostei + 0

20/09/2012

Gilvanio Gonçalves

campos d tabela.
-----------------------------------

Codcliente I *
CodPagamento I *
DataDe D
dataAte D
MensalilidadePaga A 20
NomeCliente A 30
Valordesconto N
ValoInicial $
ValorFinal $
SomaTotal A 20
StatusAtivo A 20


Index indcod = CodCliente

tabela sem ligação com outra.
campos com dados preenchidos

campo MensalilidadePaga esta preencido nos valores Pago e NPago

campos preenchidos

ValorInicial ValorFinal SomaTotal



10/09/2012 20,00 10/09/2012 40,00 10/09/2012 40,00
10/09/2012 30,00 10/09/2012 30,00 10/09/2012 40,00
25/09/2012 20,00 25/09/2012 40,00 25/09/2012 40,00
12/12/2012 30,00 12/12/2012 30,00 12/12/2012 40,00
10/10/2010 40,00 10/10/2010 40,00 10/10/2010 40,00

veja se é possivel me ajudar.




Responder

Gostei + 0

20/09/2012

Alisson Santos

Caro colega Gilviano

Eu não faço como você fez, primeiro queria entender o pq utiliza a datade e a dataate, valorinicial e valorfinal no seu banco.

Estou questionando para poder entender isso o funcionamento da tabela.
Responder

Gostei + 0

20/09/2012

Gilvanio Gonçalves

A questão das datas não precisa se preocupar, datade é data de cadastro, dataate é vencimento
como pode ver no codigo eu faço filtro por periodo usando o campo dataAte.
o campo ValorFinal é pra outro tipo de informação, não esta nesta rotina, neste rotina
eu uso o campo ValorInicial,OK.

na minha rotina usa os campo DataAte, ValorInicial e MensalidadePaga onde grava pago,porque pagou
e Npago porque não pagou.

a rotina é verificar pelo periodo determinado pelo usuario de 01/12/2012 até 20/12/2012 ou um periodo qualquer,
e se dentro deste periodo tendo a opÇão no radio selicionado pagas verifica neste peirodo então
todos os registros na tabela qe contenham o valor pago e me traz o resultado em valor de todos pagos,
no periodo determinado entendeu?
e o mesmo para não pagos, que o radioGroup no caso estará selecionado A Pagar, deu pra entender?
o que acontece na minha rotina é que não importa o periodo e o que esta seleciondo no radiogroup
o resultado é de todos os campos da tabela seja pago ou não pago,ou seja não esta verificando
o valor do campo MensalidadePaga. Não esta varrendo a Tabela corrtamente como eu te expliquei a rotina

espero que eu tenha conseguido explicar para que possa me ajudar, se for o caso se quizer te mando a rotina
de modulo com a tabela pelo seu e-mail e vc dá uma olhada no codigo e na tabela?
dai vc precisa me passar seu email por mensagem particular.
fica a seu critério, agradeço desde já a força.
Responder

Gostei + 0

21/09/2012

Claudia Nogueira

Não entendei muito bem o que você precisa e nem o porque de o campo ValorInicial ser do tipo Integer e estar sendo formatado no Edit1 como valor monetário, mas de qualquer forma eu faria tudo diferente.


procedure TForm1.BitBtn1Click(Sender: TObject);
Var
sSQLTipo : String;
iValorInicial : Integer;
begin
if final.Date < inicial.Date then
begin
Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
inicial.SetFocus;
Exit;
end;
sSQLTipo := 'Pago';
if RadioPesq.ItemIndex = 1 then
sSQLTipo := 'NPago';
dados.QueryMensalidade.Close;
dados.QueryMensalidade.SQL.Text := 'SELECT * FROM tabela WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(inicial.Text)+') AND (dataate <= '+QuotedStr(final.Text)+')';
dados.QueryMensalidade.Open;
if dados.QueryMensalidade.IsEmpty then
begin
Showmessage ('Não Existe Dados no Período Solicitado !');
Inicial.SetFocus;
Exit;
end;
iValorInicial := 0;
dados.QueryMensalidade.First;
while not dados.QueryMensalidade.Eof do
begin
iValorInicial := iValorInicial + dados.QueryMensalidadeValorInicial.AsInteger;
dados.QueryMensalidade.Next;
end;
Edit1.Text := FormatFloat('#,##0.00',iValorInicial);
end;
Responder

Gostei + 0

21/09/2012

Gilvanio Gonçalves

Não entendei muito bem o que você precisa e nem o porque de o campo ValorInicial ser do tipo Integer e estar sendo formatado no Edit1 como valor monetário, mas de qualquer forma eu faria tudo diferente.


procedure TForm1.BitBtn1Click(Sender: TObject);
Var
sSQLTipo : String;
iValorInicial : Integer;
begin
if final.Date < inicial.Date then
begin
Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
inicial.SetFocus;
Exit;
end;
sSQLTipo := 'Pago';
if RadioPesq.ItemIndex = 1 then
sSQLTipo := 'NPago';
dados.QueryMensalidade.Close;
dados.QueryMensalidade.SQL.Text := 'SELECT * FROM tabela WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(inicial.Text)+') AND (dataate <= '+QuotedStr(final.Text)+')';
dados.QueryMensalidade.Open;
if dados.QueryMensalidade.IsEmpty then
begin
Showmessage ('Não Existe Dados no Período Solicitado !');
Inicial.SetFocus;
Exit;
end;
iValorInicial := 0;
dados.QueryMensalidade.First;
while not dados.QueryMensalidade.Eof do
begin
iValorInicial := iValorInicial + dados.QueryMensalidadeValorInicial.AsInteger;
dados.QueryMensalidade.Next;
end;
Edit1.Text := FormatFloat('#,##0.00',iValorInicial);
end;


ERROS:

Undeclared identifier 'text' este erro se refere a linha do codigo abaixo:

dados.QueryMensalidade.SQL.Text := 'SELECT * FROM Mensalidade WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(inicial.Text)+') AND (dataate <= '+QuotedStr(final.Text)+')';


inicial e final é nome dos componentes DateTimePicker


expected but',' found //se refere ao end;

text after finl 'END.'ignored by compiler// não sei
Responder

Gostei + 0

21/09/2012

Romulo Contro

tenta mudar assim:

dados.QueryMensalidade.SQL.Text := 'SELECT * FROM Mensalidade WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(FormatDateTime('yyyymmdd'inicial.date))+') AND (dataate <= '+QuotedStr(FormatDateTime('yyyymmdd',final.date))+')';

referente a esse "text after finl 'END.'ignored by compiler", é porque tem alguma coisa depois do "END." e ele está avisando que vai ignorar qualquer coisa depois dele...
Responder

Gostei + 0

21/09/2012

Romulo Contro

tenta mudar assim:

dados.QueryMensalidade.SQL.Text := 'SELECT * FROM Mensalidade WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(FormatDateTime('yyyymmdd'inicial.date))+') AND (dataate <= '+QuotedStr(FormatDateTime('yyyymmdd',final.date))+')';

referente a esse "text after finl 'END.'ignored by compiler", é porque tem alguma coisa depois do "END." e ele está avisando que vai ignorar qualquer coisa depois dele...



corrigindo, faltou uma virgula ali...

dados.QueryMensalidade.SQL.Text := 'SELECT * FROM Mensalidade WHERE (mensalidadepaga = '+QuotedStr(sSQLTipo)+') AND (dataate >= '+QuotedStr(FormatDateTime('yyyymmdd',inicial.date))+') AND (dataate <= '+QuotedStr(FormatDateTime('yyyymmdd',final.date))+')';
Responder

Gostei + 0

21/09/2012

Alisson Santos

Gilvanio algum progresso no na duvida?
Responder

Gostei + 0

21/09/2012

Gilvanio Gonçalves

Gilvanio algum progresso no na duvida?



não, mesmo com o a nova linha de codigo.

periodo definido e opção no radio selecionada

tenho este erro ao clicar no botão:

raised exception class EDBEmgineError with message 'type mismatch in expression.'.


ou seja: incompatibilidade de tipo na expressão ?

como resolver este erro ?
Responder

Gostei + 0

21/09/2012

Claudia Nogueira

Gilvanio algum progresso no na duvida?



não, mesmo com o a nova linha de codigo.

periodo definido e opção no radio selecionada

tenho este erro ao clicar no botão:

raised exception class EDBEmgineError with message 'type mismatch in expression.'.


ou seja: incompatibilidade de tipo na expressão ?

como resolver este erro ?


Se você usa o firebird, ali na passagem das datas na sentença SQL tem que formatar a data.
Então onde está QuotedStr(inicial.Text) ficaria QuotedStr(FormatDateTime('mm/dd/yyyy',inicial.Date)) e onde está QuotedStr(final.Text) ficaria QuotedStr(FormatDateTime('mm/dd/yyyy',final.Date)).
Se ainda ocorrer algum erro, pode ir postando que vamos respondendo até solucionar o seu problema.
Responder

Gostei + 0

21/09/2012

Gilvanio Gonçalves

Gilvanio algum progresso no na duvida?



não, mesmo com o a nova linha de codigo.

periodo definido e opção no radio selecionada

tenho este erro ao clicar no botão:

raised exception class EDBEmgineError with message 'type mismatch in expression.'.


ou seja: incompatibilidade de tipo na expressão ?

como resolver este erro ?


Se você usa o firebird, ali na passagem das datas na sentença SQL tem que formatar a data.
Então onde está QuotedStr(inicial.Text) ficaria QuotedStr(FormatDateTime('mm/dd/yyyy',inicial.Date)) e onde está QuotedStr(final.Text) ficaria QuotedStr(FormatDateTime('mm/dd/yyyy',final.Date)).
Se ainda ocorrer algum erro, pode ir postando que vamos respondendo até solucionar o seu problema.


Olá eu Não uso Firebird.
Responder

Gostei + 0

21/09/2012

Claudia Nogueira

Qual BD mesmo que você usa? Não consegui achar no post.
Responder

Gostei + 0

21/09/2012

Gilvanio Gonçalves

Qual BD mesmo que você usa? Não consegui achar no post.



PARADOIDOX(Paradox) aplicativo muito pequeno por isto.
Responder

Gostei + 0

21/09/2012

Claudia Nogueira

Qual BD mesmo que você usa? Não consegui achar no post.



PARADOIDOX(Paradox) aplicativo muito pequeno por isto.


A sim, no paradox não funciona dessa maneira mesmo. Aí você teria que fazer mais ou menos assim:


procedure TForm1.BtnFiltrarClick(Sender: TObject);
Var
sSQLTipo : String;
iValorInicial : Integer;
begin
if final.Date < inicial.Date then
begin
Showmessage ('Data Final não Pode Ser Menor que a Data Inicial !');
inicial.SetFocus;
Exit;
end;
sSQLTipo := 'Pago';
if RadioPesq.ItemIndex = 1 then
sSQLTipo := 'NPago';
Edit1.Clear;
QueryMensalidade.Close;
QueryMensalidade.SQL.Text := 'SELECT * ' +
' FROM tabela1 ' +
' WHERE (mensalidadepaga = :mensalidadepaga) ' +
' AND (dataate >= :datainicial) ' +
' AND (dataate <= :datafinal)';

QueryMensalidade.ParamByName('mensalidadepaga').AsString := sSQLTipo;
QueryMensalidade.ParamByName('datainicial').AsDate := inicial.Date;
QueryMensalidade.ParamByName('datafinal').AsDate := final.Date;
QueryMensalidade.Open;
if QueryMensalidade.IsEmpty then
begin
Showmessage ('Não Existe Dados no Período Solicitado !');
Inicial.SetFocus;
Exit;
end;
iValorInicial := 0;
QueryMensalidade.First;
while not QueryMensalidade.Eof do
begin
iValorInicial := iValorInicial + QueryMensalidadeValorInicial.AsInteger;
QueryMensalidade.Next;
end;
Edit1.Text := FormatFloat('#,##0.00',iValorInicial);
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar