Relatório

20/12/2003

0

Olá, estou fazendo um relatório um pouco diferente. antes de abrir o relatório tenho uma janela com um DBLookupComboBox, que seleciona a ´Marca´ para eu fazer um relatório con todos os registros com aquela marca.
No botão ok, coloquei o seguinte:

procedure TFRelEsquemaTipo.SpeedButton1Click(Sender: TObject);
begin
FRelEsquemaTipo.close;
query1.filter:=´marca=´+quotedstr(DBLookupComboBox1.text);
query1.filtered:=true;
application.createform(tFRelEsquemaMod,FRelEsquemaMod);
FRelEsquemaMod.QuickRep1.preview;
end;

Mas só funciona com o primeiro que eu selecionar, ou seja, se eu selecionar a marca Panasonic aparece todos os registros. Se eu selecionar a marca Sony, aparece o relatório da Panasonic, e é assim com todas as marcas. Como eu posso arrumar isto :?: :?: :?:

:)


Franck.c

Franck.c

Responder

Posts

20/12/2003

Tnaires

Olá Frank

Acho que seu código não está dando certo pq vc não tá liberando seu formulário da memória qdo dá um close. Acrescente a linha Action := caFree; no OnClose, e não esqueça de criá-lo antes de filtrar a query.
Sucesso


Responder

20/12/2003

Franck.c

não consegui, seja mais explicativo! Vlw!´


Responder

20/12/2003

Tnaires

Olá Franck. Realmente fui pouco claro. Vamos lá:
O usuário escolheu a marca Panasonic. Vc filtra legal, e aí vc cria outro formulário (dois forms do mesmo tipo existentes: um filtrado e o outro não), mas o Sender (quem disparou o evento) foi o q já existia. Então, o filtro anterior prevalece.
Depois, escolheu a marca Sony. Filtrou legal, mas um terceiro formulário é criado (o primeiro sem filtro, o segundo filtrado com Panasonic e o terceiro com Sony). Como quem disparou o evento foi o Panasonic, esse relatório é mostrado. E assim sucessivamente...
No final, sua memória fica cheia d forms. Cuidado com overflow.
Bom, é isso, qq coisa poste pra nós.
Sucesso


Responder

20/12/2003

Franck.c

mas que código eu coloco para funcionar?


Responder

21/12/2003

Tnaires

Bom, primeiro vc tem q criar seu formulário antes de filtrar a query. Mas seria bom também verificar se o formulário já está aberto. Depois vc dá um preview no relatório. Ficaria assim:
function FormularioExistente(F: TForm): boolean;
  var i: integer;
begin
  Result := false;
  for i := 0 to Application.ComponentCount - 1 do
    if Application.Components[i] = F then
      Result := true;
end;

procedure TFRelEsquemaTipo.SpeedButton1Click(Sender: TObject); 
begin 
FRelEsquemaTipo.close; 
if not FormularioExistente(FRelEsquemaMod) then
  Application.CreateForm(TFRelEsquemaMod, FRelEsquemaMod); 
query1.filter:=´marca=´+quotedstr(DBLookupComboBox1.text); 
query1.filtered:=true; 
FRelEsquemaMod.QuickRep1.preview; 
end; 

Não esquecer tb d colocar, no evento OnClose do FRelEsquemaMod, essa linha:
Action := caFree;

Tomara q dessa vez dê certo! Até logo.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar