Ir para conteúdo
Fórum Script Brasil
  • 0

Respondam Qdo Puder (RESOLVIDO ENFIM)


Alessandro

Pergunta

Serei breve...

Tenho um Form chamado fmGerarRelAt :

Clique aqui para ver o Form Gerar Relatório

Preciso que somente os código selecionados apareçam no relatório, e para isso eu coloquei este código no evento OnCreate do Form do Relatório :

procedure TfmRelAt.FormCreate(Sender: TObject);
var Total : Integer;
begin
  Total := 0;
  modProjeto.tbCadAt.First;  
  while not modProjeto.tbCadAt.Eof do 
    begin
     query1.active := false;
     query1.sql.clear;
     query1.sql.add('SELECT Quantidade FROM dbCadAt.db WHERE CodPart = "'+fmGerarRelAt.Lista2.Items.Text+'"');
     query1.active:= true;
     Total := modProjeto.tbCadAtQuantidade.Value + Total;
     modProjeto.tbCadAt.Next;
    end;
     qrLabel5.Caption := inttostr(Total);
end;

fmGerarRelAt : é o nome do Form do Relatório

Lista2 : é o nome da minha ListBox

O problema é que mesmo com esse código, o sistema compila mas acaba trazendo todos os códigos como a vocês podem ver na figura abaixo :

Clique aqui para ver como sai o Relatório

Se alguém tiver alguma sugestão postaí para eu tentar....valeu smile.gif

Link para o comentário
Compartilhar em outros sites

  • Respostas 93
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0

Tenta assim:

query1.sql.add('SELECT Quantidade FROM dbCadAt.db WHERE CodPart = :codigo');

query1.parambyname('codigo') := fmGerarRelAt.Lista2.Items.Text

query1.active := true

query1.open

Link para o comentário
Compartilhar em outros sites

  • 0

query1.parambyname('codigo') := fmGerarRelAt.Lista2.Items.Text

dá erro nesta linha.....

Eu queria saber porque você está usando codigo ? Não é preciso declarar ?

query1.sql.add('SELECT Quantidade FROM dbCadAt.db WHERE CodPart = :codigo');

Link para o comentário
Compartilhar em outros sites

  • 0

Show de bola...estou progredindo...agora está compilando mas não está encontrando o Parametro codigo, quando eu seleciono e clico em gerar dá esse erro aí : wink.gif

Erro1

Erro2

No evento do botão Gerar te o seguinte código :

procedure TfmGerarRelAt.btnGerarClick(Sender: TObject);
begin
     fmRelAt := tfmRelAt.create(application);
     fmRelAt.QuickRep1.Preview;
     fmRelAt.Release; 
end;

O SELECT eu coloquei no oncreate do fmRelAt

Link para o comentário
Compartilhar em outros sites

  • 0

foi mal... esqueci do .AsString hehehe

assim oh:

sempre que tu quer colocar algo que seja variavel em uma sentença SQL é bom colocar como parametro (os :nome).

depois voce somente especifica o que esse parametro é: (ex: query.parambyname('nome').AsString := 'fernando')

Esse tipo de abordagem em SQL facilita bastante no tratamento de variaveis por deixa de obrigar a pessoa a usar as " aspas e fazer aquela zona... Além de ajudar tambem no tratamento de tipos diferentes de variaveis, tipo procurar por um numero em um campo string wink.gif

AHHH da um olhada aqui

http://scriptbrasil.com.br/forum/index.php...ndpost&p=150478

Link para o comentário
Compartilhar em outros sites

  • 0

Corposemalma e s3c, evoluímos....complilou, não dá mais erro quando eu gero o relatório, porém ainda estão me trazendo todos e não os selecionados..... o código por fim ficou assim :

procedure TfmRelAt.FormCreate(Sender: TObject);
var Total : Integer;
begin
  Total := 0;
  modProjeto.tbCadAt.First;
  while not modProjeto.tbCadAt.Eof do
    begin
     query1.active := false;
     query1.sql.clear;
     query1.sql.add('SELECT Quantidade FROM dbCadAt.db WHERE CodPart = :codigo');
     query1.parambyname('codigo').asString  := fmGerarRelAt.Lista2.Items.Text;
     query1.active:= true;
     query1.open;
     Total := modProjeto.tbCadAtQuantidade.Value + Total;
     modProjeto.tbCadAt.Next;
    end;
     qrLabel5.Caption := inttostr(Total);
end;

Ahh, eu ví seu post moderador, show de bola usar parametros.....

Link para o comentário
Compartilhar em outros sites

  • 0

Seu campo CodPart no banco é string?

Sim, no caso...é ALPHA...(PARADOX).

O seu StringList Lista2 só tem um código na propriedade Text?

Neste caso, eu passo da Lista1 para a Lista2.

No Lista2 não.....Tem uma porrada de código no Lista1, mas eu passo para o Lista2, assim querendo que gere um relatório somente para os que foram escolhidos...Vê aí.....

Quando eu chamo o Form, só tem códigos na Lista1, e clicando no botão eu passo para lista2... wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, na propriedade Text você tem 5 códigos e não pode colocá-los como um valor no parâmetro codigo.

Tente assim:

var i,Total:Integer;
begin
Total := 0;
Query1.Close;
Query1.SQL.Text := 'Select Quantidade From dbCadAt.db Where CodPart = :cod';
for i := 0 to fmGerarRelAt.Lista2.Items.Count-1 do
begin
Query1.ParamByName('cod').asString := fmGerarRelAt.Lista2.Items[i];
Query1.Open;
Total := Total + Query1.FieldByName('Quantidade').asInteger;
Query1.Close;
end;
qrLabel5.Caption := IntToStr(Total);
end;

Faça esse For somente uma vez. Ele soma todos os códigos da Lista2.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, estamos quase lá....eu entendi a sua lógica, ele vai contar a qtde individualmente para cada selecionado.....

Muito bem, isto o código está fazendo,ou seja, se eu seleciono 2 códigos :

BR01AC 2 Ligações

BR01AL 1 Ligação

No relatório sai o total somente dos selecionados...

Evoluímos muito até aqui, por favor não desista.....sei que é na boa vontade, por isso peço mais um help.....o código ainda continua trazendo todos os códigos no relatótrio.....

Conclusão, quando eu seleciono...o total de ligações é referente aos selecionados, mas no relatório ainda estão aparecendo todos os código e não somente os cadastrados..... huh.gif

Será que é o SELECT ?

Link para o comentário
Compartilhar em outros sites

  • 0

Se você amarrou o dataset ao relatório e quer que apareça somente os selecionados, você deve colocá-los na cláusula Where do Select de seu Dataset.

Utilize esse mesmo For de Lista2.Items.Count p/ criar a cláusula Where dinamicamente no seu Dataset amarrado ao relatório.

Link para o comentário
Compartilhar em outros sites

  • 0

você tem uma Lista com todos os códigos, daí você seleciona alguns e joga na Lista2 e num certo momento, quer imprimir somente os da Lista2 certo?

Se for isso, você tem que fazer um Select com a cláusula Where dos códigos existentes na Lista2 para depois poder imprimir.

Link para o comentário
Compartilhar em outros sites

  • 0

É isso mesmo....

a dúvida ficou em :

...você tem que fazer um Select com a cláusula Where dos códigos existentes na Lista2...

Como assim ? Onde ? tem como dar um exemplo?!?!?!;)

quando você postou dizendo :

Utilize esse mesmo For de Lista2.Items.Count p/ criar a cláusula Where dinamicamente no seu Dataset amarrado ao relatório.

Onde eu utilizo exatamente.... wink.gif

Agora só se você tiver paciência einh.....valeu...

Link para o comentário
Compartilhar em outros sites

  • 0

Monte um Where dinâmico:

var i:Integer; sWhe:String;
begin
// aqui você só monta o Select dos campos que precisar
Query1.Close;
Query1.SQL.Text := 'Select * From Tabela ';
// aqui você monta os parâmetros
for i := 0 to Lista2.Items.Count-1 do
if i = 0 then
  sWhe := 'Where CodPart = :P' + IntToStr(i)
else
  sWhe := sWhe + ' or CodPart = :P' + IntToStr(i);
// depois você adiciona na sua SQL que já contem o Select
Query1.SQL.Add(sWhe);
// aqui você coloca os valores dos parâmetros
for i := 0 to Lista2.Items.Count-1 do
  Query1.ParamByName('P'+IntToStr(i)).asString := Lista2.Items[i];
// depois você executa
Query1.Open;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Então Corposemalma, eu estou tentando exatamente isso que você sugeriu, criar um relatório baseado na lista2, que é a dos códigos selecionados...

Onde eu coloco este código do s3c ? wink.gif

Tentei fazer de tudo quanto é jeto mas continua aparecendo todos códigos e não só os que eu seleciono....

s3c Obrigado pelo empenho até aqui, você me ajudou muito cara.....valeu pelo código..... biggrin.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é, pensei que só fosse aquilo e mais uma coisinha.

Agora vocês continuam mais um pouco e sintam-se a vontade para criticar e modificar aquilo que fiz; afinal estamos num fórum de discussão.

Vou ficar observando. ph34r.gif

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...