Relatório
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 :?: :?: :?:
:)
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
Curtidas 0
Respostas
Tnaires
20/12/2003
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
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
GOSTEI 0
Franck.c
20/12/2003
não consegui, seja mais explicativo! Vlw!´
GOSTEI 0
Tnaires
20/12/2003
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
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
GOSTEI 0
Franck.c
20/12/2003
mas que código eu coloco para funcionar?
GOSTEI 0
Tnaires
20/12/2003
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:
Não esquecer tb d colocar, no evento OnClose do FRelEsquemaMod, essa linha:
Tomara q dessa vez dê certo! Até logo.
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.
GOSTEI 0