Ajuda com uma Rotina verificar campos de uma tabela

Delphi

19/09/2012

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

Curtidas 0

Respostas

Alisson Santos

Alisson Santos

19/09/2012

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.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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.




GOSTEI 0
Alisson Santos

Alisson Santos

19/09/2012

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.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

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;
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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
GOSTEI 0
Romulo Contro

Romulo Contro

19/09/2012

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...
GOSTEI 0
Romulo Contro

Romulo Contro

19/09/2012

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))+')';
GOSTEI 0
Alisson Santos

Alisson Santos

19/09/2012

Gilvanio algum progresso no na duvida?
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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 ?
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

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.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

Qual BD mesmo que você usa? Não consegui achar no post.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

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



PARADOIDOX(Paradox) aplicativo muito pequeno por isto.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

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;
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

Gilvanio, eu digitei o código rapidinho e esqueci de colocar o "dados." antes de usar a QueryMensalidade.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

Fiz um exemplo com a estrutura dos dados que você informou e usando paradox.

[url]http://www.cdnweb.com.br/tutorial_paradox.rar[/url]

Se eu fosse você, por menor que o sistema seja não usaria esse tipo de banco de dados. Use o Firebird que é de instalação simples e é muito bom pra software de qualquer tamanho.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Fiz um exemplo com a estrutura dos dados que você informou e usando paradox.

[url]http://www.cdnweb.com.br/tutorial_paradox.rar[/url]

Se eu fosse você, por menor que o sistema seja não usaria esse tipo de banco de dados. Use o Firebird que é de instalação simples e é muito bom pra software de qualquer tamanho.


vou estudar o firebird se estavel beleza.

agora uma coisa o codigo quando no radiogroup é selecionnado pagas que seria para opção RadioPesq.ItemIndex = 0

só me retorna que não existe dados no periodo solicitado?
no codigo não se refere se adioPesq.ItemIndex = 0 then?

RadioPesq.ItemIndex = 1 then //aqui que é na opção A Pagar retorna certinho.

tem como corrigir, pois no seu exemplo também da o mesmo resultado? radioPesq.ItemIndex = 0 then // não existe dados no periodo solicitado?

GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

Gilvanio, a tabela de exemplo que eu te enviei tinha 3 registros. 2 com o campo MensalidadePaga = Pago e 1 = NPago, conforme eu entendi o funcionamento da estrutura que você passou. Os dois que estão Pago estão com data 21/09/2012 e o que está NPago está com data 22/09/2012. Coloque a data inicial 21/09/2012 e data final 22/09/2012. Quando estiver marcado Pago, irá mostrar 2 registros e quanto estiver marcado NPago, irá mostrar 1.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Gilvanio, a tabela de exemplo que eu te enviei tinha 3 registros. 2 com o campo MensalidadePaga = Pago e 1 = NPago, conforme eu entendi o funcionamento da estrutura que você passou. Os dois que estão Pago estão com data 21/09/2012 e o que está NPago está com data 22/09/2012. Coloque a data inicial 21/09/2012 e data final 22/09/2012. Quando estiver marcado Pago, irá mostrar 2 registros e quanto estiver marcado NPago, irá mostrar 1.




Claudia, no seu exemplo como disse deu certo, mas me responda algumas coisas para que eu possa entender, pois o seucodigo no meu licativo me dá o rsultado que que falei Nào há dados quando é pagas.

na isntrução do codigo vc cita tabela1? onde esta esta tabela?

na String da query , SELECT * FROM tabela1 que exibi dados que vc inseriu nela dados de claudia.

no form uma dbgrid, um botão filtrar e um edit tudo ok, tem um TQuery + querymensalidade e datasoyrce com dataset para querymensalidade.
o que eu entendi que a query esta ligada aos dados da tabela1, mas onde esta esta tabela1, e ela traz ddos d tabela mensalidade, como?

porque o codigo do seu exemplo ou codigo que postou no forum no meu aplicativo pagas só me dá mensagem = não ha dados no periodo.

gostaria de entender o exemplo para usar no meu aplicativo, principalmente tabela1?.

obrigado por enquanto.




GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

QueryMensalidade.SQL.Text := 'SELECT * ' +
                               '  FROM tabela1 ' +
                               ' WHERE (mensalidadepaga = :mensalidadepaga) ' +
                               '  AND (dataate >= :datainicial) ' +
                               '  AND (dataate <= :datafinal)';


e tabela1 não esta visivel em tempo de projeto?

gostaria de enteder.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

QueryMensalidade.SQL.Text := 'SELECT * ' +
                               '  FROM tabela1 ' +
                               ' WHERE (mensalidadepaga = :mensalidadepaga) ' +
                               '  AND (dataate >= :datainicial) ' +
                               '  AND (dataate <= :datafinal)';


e tabela1 não esta visivel em tempo de projeto?

gostaria de enteder.



A tabela1 está fisicamente dentro da pasta do projeto (tabela1.db).
Eu criei com esse nome, mas a sua provavelmente pelo que eu entendi, chama "mensalidade", aí tem que trocar o FROM tabela1 por FROM mensalidade.
O componente dela é o QueryMensalidade que é uma TQuery.
Ou você usa uma TQuery ou um TTable.
Eu só uso TQuery por que trabalho muito com sentença SQL e o TTable teria que usar o filter, o que não é bom por ter que manter a tabela toda aberta. No TQuery você não tem a propriedade de ligar a uma tabela, pois isso se faz na sentença SQL (FROM tabela1). Esse FROM tabela1 no SQL da TQuery equivale a propriedade TableName que tem no TTable que no meu caso ligaria a tabela Tabela1 e no seu aí com a tabela Mensalidade.
Eu coloquei o SELECT no código fonte somente por que pra explicar pra você fica mais fácil, mas se quisesse poderia colocar na propriedade SQL do QueryMensalidade assim:
SELECT * 
  FROM tabela1
 WHERE (mensalidadepaga = :mensalidadepaga)
   AND (dataate >= :datainicial)
   AND (dataate <= :datafinal)

Se você colocar a sentença SQL direto no componente, aí no botão você só precisaria passar os parâmetros, assim:
QueryMensalidade.Close;
QueryMensalidade.ParamByName('mensalidadepaga').AsString := sSQLTipo;
QueryMensalidade.ParamByName('datainicial').AsDate := inicial.Date;
QueryMensalidade.ParamByName('datafinal').AsDate := final.Date;
QueryMensalidade.Open;

Sobre a não aparecer os dados com sua tabela, eu só poderia te falar o motivo se eu tivesse a tabela, pois pode ser por causa do período, ou pode ser por que no campo MensalidadePaga você grava outro tipo de informação, diferente de Pago e NPago.
Eu te passei somente um exemplo pra entender a questão do SQL.
Se quiser me mandar sua tabela para claudiadnh@gmail.com, aí posso te falar o motivo de não mostrar os dados.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

QueryMensalidade.SQL.Text := 'SELECT * ' +
                               '  FROM tabela1 ' +
                               ' WHERE (mensalidadepaga = :mensalidadepaga) ' +
                               '  AND (dataate >= :datainicial) ' +
                               '  AND (dataate <= :datafinal)';


e tabela1 não esta visivel em tempo de projeto?

gostaria de enteder.



A tabela1 está fisicamente dentro da pasta do projeto (tabela1.db).
Eu criei com esse nome, mas a sua provavelmente pelo que eu entendi, chama "mensalidade", aí tem que trocar o FROM tabela1 por FROM mensalidade.
O componente dela é o QueryMensalidade que é uma TQuery.
Ou você usa uma TQuery ou um TTable.
Eu só uso TQuery por que trabalho muito com sentença SQL e o TTable teria que usar o filter, o que não é bom por ter que manter a tabela toda aberta. No TQuery você não tem a propriedade de ligar a uma tabela, pois isso se faz na sentença SQL (FROM tabela1). Esse FROM tabela1 no SQL da TQuery equivale a propriedade TableName que tem no TTable que no meu caso ligaria a tabela Tabela1 e no seu aí com a tabela Mensalidade.
Eu coloquei o SELECT no código fonte somente por que pra explicar pra você fica mais fácil, mas se quisesse poderia colocar na propriedade SQL do QueryMensalidade assim:
SELECT * 
  FROM tabela1
 WHERE (mensalidadepaga = :mensalidadepaga)
   AND (dataate >= :datainicial)
   AND (dataate <= :datafinal)

Se você colocar a sentença SQL direto no componente, aí no botão você só precisaria passar os parâmetros, assim:
QueryMensalidade.Close;
QueryMensalidade.ParamByName('mensalidadepaga').AsString := sSQLTipo;
QueryMensalidade.ParamByName('datainicial').AsDate := inicial.Date;
QueryMensalidade.ParamByName('datafinal').AsDate := final.Date;
QueryMensalidade.Open;

Sobre a não aparecer os dados com sua tabela, eu só poderia te falar o motivo se eu tivesse a tabela, pois pode ser por causa do período, ou pode ser por que no campo MensalidadePaga você grava outro tipo de informação, diferente de Pago e NPago.
Eu te passei somente um exemplo pra entender a questão do SQL.
Se quiser me mandar sua tabela para claudiadnh@gmail.com, aí posso te falar o motivo de não mostrar os dados.



Entendi Claudia.

quero aprender a usar a query como vc usou, na pasta em levei a minha tabela mensalidade e deu nome de tabela1, sei que seria so mudr no codigo para mensalidade, fui fazer o teste e me avisei de mais campos que não estão dentro do fields da query, deletei os filds, e fiu fazer add e da erro dinzendo tabela tal não existe etc.

como faço pra popular uma query como vc fez?
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

QueryMensalidade.SQL.Text := 'SELECT * ' +
                               '  FROM tabela1 ' +
                               ' WHERE (mensalidadepaga = :mensalidadepaga) ' +
                               '  AND (dataate >= :datainicial) ' +
                               '  AND (dataate <= :datafinal)';


e tabela1 não esta visivel em tempo de projeto?

gostaria de enteder.



A tabela1 está fisicamente dentro da pasta do projeto (tabela1.db).
Eu criei com esse nome, mas a sua provavelmente pelo que eu entendi, chama "mensalidade", aí tem que trocar o FROM tabela1 por FROM mensalidade.
O componente dela é o QueryMensalidade que é uma TQuery.
Ou você usa uma TQuery ou um TTable.
Eu só uso TQuery por que trabalho muito com sentença SQL e o TTable teria que usar o filter, o que não é bom por ter que manter a tabela toda aberta. No TQuery você não tem a propriedade de ligar a uma tabela, pois isso se faz na sentença SQL (FROM tabela1). Esse FROM tabela1 no SQL da TQuery equivale a propriedade TableName que tem no TTable que no meu caso ligaria a tabela Tabela1 e no seu aí com a tabela Mensalidade.
Eu coloquei o SELECT no código fonte somente por que pra explicar pra você fica mais fácil, mas se quisesse poderia colocar na propriedade SQL do QueryMensalidade assim:
SELECT * 
  FROM tabela1
 WHERE (mensalidadepaga = :mensalidadepaga)
   AND (dataate >= :datainicial)
   AND (dataate <= :datafinal)

Se você colocar a sentença SQL direto no componente, aí no botão você só precisaria passar os parâmetros, assim:
QueryMensalidade.Close;
QueryMensalidade.ParamByName('mensalidadepaga').AsString := sSQLTipo;
QueryMensalidade.ParamByName('datainicial').AsDate := inicial.Date;
QueryMensalidade.ParamByName('datafinal').AsDate := final.Date;
QueryMensalidade.Open;

Sobre a não aparecer os dados com sua tabela, eu só poderia te falar o motivo se eu tivesse a tabela, pois pode ser por causa do período, ou pode ser por que no campo MensalidadePaga você grava outro tipo de informação, diferente de Pago e NPago.
Eu te passei somente um exemplo pra entender a questão do SQL.
Se quiser me mandar sua tabela para claudiadnh@gmail.com, aí posso te falar o motivo de não mostrar os dados.



Entendi Claudia.

quero aprender a usar a query como vc usou, na pasta em levei a minha tabela mensalidade e deu nome de tabela1, sei que seria so mudr no codigo para mensalidade, fui fazer o teste e me avisei de mais campos que não estão dentro do fields da query, deletei os filds, e fiu fazer add e da erro dinzendo tabela tal não existe etc.

como faço pra popular uma query como vc fez?


Cola na pasta a sua tabela com o nome mensalidade mesmo, depois vai na propriedade SQL do componente TQuery e coloca SELECT * FROM mensalidade. Vai nos fields, exclua todos e depois clica com o botão direito na parte branca dos fields e clica em Add all fields.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Claudia deu certinho, Muiiiito Obrigado, valeu por compartilhar comigo seus conhecimentos.

Agradeço a todos que também contribuiram expondo suas explicações e codigos,valeu pessoal do DevMedia.

sou novato neste forum e não sei como colocar este topico como resolvido, ou seja duvida solucionada.

os moderadores a duvida teve exito com ajuda dos membros que partiparam desta postagem e totalmente solucionda pela pessoa de CLAUDIA,(creditos para Claudia.


Obrigado Gilvanio.

GOSTEI 0
Alisson Santos

Alisson Santos

19/09/2012

Desculpe amigo não ter auxiliado mais, pois estava em treinamento, fico feliz que conseguiram auxiliar no seu problema.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Alissson, onde eu disse agradeço a todos que também contribuiram expondo suas explicaçãos e coidgos, Valeu pessoal do DevMedia.

e digo aos Moderados a duvida teve exito, com ajuda dos memnbros que participaram desta postagem.

no entando eu estou gradecendo a vc também amigo atraves de sua pergunta, que a duvida foi
tomando rumo para ser resolvida,ok.

Obrigado também a vc, como disse a todos que neste post de uma forma ou de outra me auxiliou.
sendo que que quem a finalizou, foi a pessoa de Claudiadnh, Valeu?.
Gostei muito do Forum e de vcs, a pergunta não fica ao léu aqui, sempre a resposta vem rapido,

parabens a vcs membros colaboradores.

só uma coisa chata!.

aos moderadores:

quando respondo uma pergunta do amigos que estão me auxiliando em um post, eu recebo no e-mail
que minha duvida foi respondida, sendo que foi apenas uma respota minha?.
mesmo Asssim, parabens pelo forum.
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Bém estou aqui de novo, com problema ainda neste post.

no meu aplicativo, uso o datamodule = nome de Dados.

meu aplicativo fica em uma pasta chamada sistema e dentro dela subpasta a pasta do projeto arquivos fontes e uma pasta das tabelas.

usei o codigo de exemplo aqui do forum citado pela Claudia.

codigo Abaixo:

procedure TFormCaixa.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 RadioGroup1.ItemIndex = 1 then
    sSQLTipo := 'NPago';
  Edit1.Clear;
   Dados.QueryMensalidade.Close;
  Dados.QueryMensalidade.SQL.Text := 'SELECT * ' +
                               '  FROM Mensalidade ' +
                               ' WHERE (mensalidadepaga = :mensalidadepaga) ' +
                               '  AND (dataate >= :datainicial) ' +
                               '  AND (dataate <= :datafinal)';

  Dados.QueryMensalidade.ParamByName('mensalidadepaga').AsString := sSQLTipo;
 Dados.QueryMensalidade.ParamByName('datainicial').AsDate := inicial.Date;
 Dados.QueryMensalidade.ParamByName('datafinal').AsDate := final.Date;
   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;


quando rodo o aplicativo e clico em qualquer opção do RadioGroup1, recebo esta mensagem:

EdatabaseError with message 'QueryMensalidade: field 'CodCliente'not found'.

sendo que no fields da query o campo existe e também na tabela no banco , mesmo se eu usar um table com o campo dentro da table junto query, o mesmo erro. já apaguei os fields e fiz novo add , mesmo erro, como resolver?
GOSTEI 0
Alisson Santos

Alisson Santos

19/09/2012

Gostaria de saber se foi sanado a duvida, pois em outro post o joel informou que o problema estaria no click do botão.
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

19/09/2012

Que estranho isso. Daria esse erro somente se o campo não existisse na sentença SQL do TQuery, ou se o nome do campo estivesse digitado errado, ou se na tabela o campo estivesse com outro nome. Se quiser me mandar o .db sem dados mesmo, só pra eu dar uma olhadinha, aí posso te ajudar. claudiadnh@gmail.com
GOSTEI 0
Gilvanio Gonçalves

Gilvanio Gonçalves

19/09/2012

Que estranho isso. Daria esse erro somente se o campo não existisse na sentença SQL do TQuery, ou se o nome do campo estivesse digitado errado, ou se na tabela o campo estivesse com outro nome. Se quiser me mandar o .db sem dados mesmo, só pra eu dar uma olhadinha, aí posso te ajudar. claudiadnh@gmail.com




Resolvi Cláudia, o erro era no evento onclick no radio, tinha um codiga lá que eu tinha colocado fazendo um teste e havia esquecido, Obrigado de Novo, por responder ao meu topico.
GOSTEI 0
POSTAR