O que está errado neste código?

Delphi

29/11/2003

Eu quero filtrar do banco de dados todas as faturas de um unico cliente que foram baixadas os campos do banco de dados são: clientes (nome do cliente) e baixado (campo logico true e false, ou seja quando for falso a fatura não foi paga)

Código:

var cliente, baixado:string;
begin
cliente:=edit1.Text;
baixado:=´false´;
with form_principal.tb_receber do
begin
form_principal.Query1.SQL.Clear;
form_principal.Query1.SQL.Add(´select (cliente baixado) from receber where cliente= :pzonal and baixado= :pzonal2´);
form_principal.Query1.ParamByName(´pzonal´).AsString := (cliente);
form_principal.Query1.ParamByName (´pzonal2´).AsString := (baixado);
form_principal.Query1.Prepare;
form_principal.Query1.Open;
form_rel_clientes_receber.QuickRep1.Preview;


Machado

Machado

Curtidas 0

Respostas

Rfpsatin

Rfpsatin

29/11/2003

teu sql parece estar errado.

q erro esta dando?????????

form_principal.Query1.SQL.Add(´select (cliente baixado) from receber where cliente= :pzonal and

talvez teria q ser algo como

select c.baixado from receber r, cliente c
where c.cliente.......

entendeu?


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

29/11/2003

Machado,

Veja se isso resolve...

Código:

var cliente, baixado:string;
begin
cliente:=edit1.Text;
baixado:=´false´;
with form_principal.tb_receber do
begin
form_principal.Query1.SQL.Clear;
form_principal.Query1.SQL.Add(´select cliente, baixado from receber where cliente =:pzonal and baixado =:pzonal2´);
[b:86bdef24f4]
(*
tirei os parêntesis após o select e coloquei uma virgula entre os campos. Separei o sinal de igual na cláusula where dos campos e juntei ao sinal de dois pontos.
*)
[/b:86bdef24f4]
form_principal.Query1.ParamByName(´pzonal´).AsString := (cliente);
form_principal.Query1.ParamByName (´pzonal2´).AsString := (baixado); //remova esta linha caso use a dica abaixo
[b:86bdef24f4]
(*
pelo que entendi Baixado é = a pago, e vc quer os que não pagaram. Se vc vai definir em runtime quem fez o que aconselho a usar o campo baixado como tipo string, e usar flags (PG/NP - pago/não pago por exemplo) o que pode ser definido por um dbcombobox.
Agora se é vc quem vai definir isso, tente esta cláusula:
Where cliente =:pzonal and Baixado = false
*)
[/b:86bdef24f4]
form_principal.Query1.Prepare;
form_principal.Query1.Open;
form_rel_clientes_receber.QuickRep1.Preview;


Espero que ajude

informe se funcionar

Douglas.


GOSTEI 0
Machado

Machado

29/11/2003

Desta maneira o sistema não me retornou um erro, abril o quick report mas sem nada.

procedure TForm_Busca_receber_rel.SpeedButton1Click(Sender: TObject);
var cliente, baixado:string;
begin
cliente:=edit1.Text;
baixado:=´false´;
with form_principal.tb_receber do
begin
form_principal.Query1.SQL.Clear;
form_principal.Query1.SQL.Clear;
form_principal.Query1.SQL.Add(´select cliente, baixado from receber where cliente =:pzonal and baixado =:pzonal2´);
form_principal.Query1.ParamByName(´pzonal´).AsString := (cliente);
form_principal.Query1.ParamByName (´pzonal2´).AsString := (baixado);
form_principal.Query1.Prepare;
form_principal.Query1.Open;
form_rel_clientes_receber.QuickRep1.Preview;


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

29/11/2003

Machado

reparei mais no seu código, não sei se seria isso, mas veja o seguinte:

Na sua primeira mensagem vc escreveu:
...e baixado (campo logico true e false...

Na descrição de sua variável vc escreveu:

[b:e4edcc6694]var cliente, baixado:string; [/b:e4edcc6694]

[i:e4edcc6694]Repare que vc declarou sua variável como [b:e4edcc6694]string[/b:e4edcc6694] e está usando um campo do tipo [b:e4edcc6694]lógico[/b:e4edcc6694] em sua tabela.[/i:e4edcc6694]

[b:e4edcc6694]baixado:=´false´; [/b:e4edcc6694]

[i:e4edcc6694] E atribuiu a variável [b:e4edcc6694]baixado[/b:e4edcc6694] um valor do tipo [b:e4edcc6694]string[/b:e4edcc6694].[/i:e4edcc6694]

Tente declarar assim:

[b:e4edcc6694]
var
cliente : string;
baixado : boolean;
[/b:e4edcc6694]

E atribua o seguinte valor a sua variável:

[b:e4edcc6694]
begin
cliente := edit1.Text;
baixado := false; // sem aspas
[/b:e4edcc6694]

Ve se funciona agora.

avisa ae se funcionar.

[]s
Douglas.


GOSTEI 0
Machado

Machado

29/11/2003

Cara ainda não funcionou,não sei o que pode estar acontecendo mas preciso emitir este relatório urgentissimo, se alguem tiver mais uma sugestão eu ficaria muito grato.


GOSTEI 0
Douglas Bitencourt

Douglas Bitencourt

29/11/2003

Machado

tente este...

procedure TForm_Busca_receber_rel.SpeedButton1Click(Sender: TObject); var ___cliente : string; ___baixado : boolean; begin cliente := edit1.Text; baixado := tb_receberBAIXADO.value;[b[ //ATRIBUA O VALOR DO CAMPO DA TABELA À VARIÁVEL[/b] with form_principal.tb_receber do [b:c1ff1bb415]//quando se usa with não precisa colocar a origem do componente, pois, já está indicado dentro do with[/b:c1ff1bb415] begin ___SQL.Clear; ___SQL.Clear; ___SQL.Add(´select cliente, baixado from receber where cliente =:pzonal and baixado =:pzonal2´); ___ParamByName(´pzonal´).AsString := (cliente); ___ParamByName (´pzonal2´).AsString := (baixado); [b:c1ff1bb415]//esta linha ainda me gera dúvidas...[/b:c1ff1bb415] ___Prepare; ___Open; end;[b:c1ff1bb415] //FINALIZE AQUI A CONSULTA[/b:c1ff1bb415] form_rel_clientes_receber.QuickRep1.Preview;

Desconsidere o sublinhado, é só para indentar...

Em um problema que tive semana passada aconteceu coisa parecida. Após remover as origens e colocar parecido como acima, o código passou a funcionar.

boa sorte
[]s
Douglas.


GOSTEI 0
Dedi

Dedi

29/11/2003

Amigo,
tente assim ,testei aqui e funcionou Perfeitamente.
var cliente:string;
begin
 cliente:=edit1.Text; //faça uma verificação se o que esta passando esta igual ao que esta na tabela.
 with form_principal.Query1 do begin
  Close;
  SQL.Clear;
  SQL.Add(´select cliente,baixado from receber where (cliente =:pzonal) and (baixado =:pzonal2)´);//pzonal e pzonal2 deve estar junto ao (dois pontos).
  ParamByName(´pzonal´).AsString := cliente;
  ParamByName (´pzonal2´).Asboolean :=  FALSE;//se o conteudo será sempre false não precisa gastar uma variavel pra isso
  Prepare;
  Open;
 end;
 form_rel_clientes_receber.QuickRep1.Preview;
end;


Dedi


GOSTEI 0
Machado

Machado

29/11/2003

Mudei tudo de novo e era pra estar funcionando mas não aparece nada no quickreport to pra ficar louco.

Vejam o código que funciona em outro relatório.

var final:boolean; // vARIAVEL
begin
final:=(false); // COLOCANDO DENTRO DA VARIAVEL O VALOR QUE EU DESEJO BUSCA
with form_principal.tb_receber do // TABLE ONDE ESTA CONTIDO OS DADOS QUE QUERO PESQUISAR
begin
form_contas_receber.Query1.Close;
form_contas_receber.Query1.SQL.Clear;
form_contas_receber.Query1.SQL.Add(´select * from receber WHERE baixado= :pzonal´);// baixado é o campo onde quero proburar que de ser true ou fase
form_contas_receber.Query1.ParamByName(´pzonal´).AsBoolean := (final);
form_contas_receber.Query1.Prepare;
form_contas_receber.Query1.Open;
form_rel.QuickRep1.Preview;
end;
end;


GOSTEI 0
POSTAR