Fórum Ajuda com uma Rotina verificar campos de uma tabela #424106
19/09/2012
0
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
Curtir tópico
+ 0Posts
20/09/2012
Alisson Santos
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.
Gostei + 0
20/09/2012
Gilvanio Gonçalves
-----------------------------------
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.
Gostei + 0
20/09/2012
Alisson Santos
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.
Gostei + 0
20/09/2012
Gilvanio Gonçalves
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.
Gostei + 0
21/09/2012
Claudia Nogueira
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;
Gostei + 0
21/09/2012
Gilvanio Gonçalves
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
Gostei + 0
21/09/2012
Romulo Contro
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...
Gostei + 0
21/09/2012
Romulo Contro
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))+')';
Gostei + 0
21/09/2012
Alisson Santos
Gostei + 0
21/09/2012
Gilvanio Gonçalves
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 ?
Gostei + 0
21/09/2012
Claudia Nogueira
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.
Gostei + 0
21/09/2012
Gilvanio Gonçalves
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.
Gostei + 0
21/09/2012
Claudia Nogueira
Gostei + 0
21/09/2012
Gilvanio Gonçalves
PARADOIDOX(Paradox) aplicativo muito pequeno por isto.
Gostei + 0
21/09/2012
Claudia Nogueira
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;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)