Crystal Reports x Delphi (Travamento)

Delphi

31/08/2006

Olá pessoal!

Estou com um tremendo problema, tenho meus relatórios feitos em crystal reports todos eles rodam perfeitamente pela IDE do crystal, mas quando eu uso os relatórios chamados pela minha aplicação ele as vezes trava e levando o processamento da cpu a 100¬, eu estou usando a vcl do crystal XI e os relatórios feitos no crystal XI, o que acontece de engraçado é que tenho um form onde chamo o relatório onde o mesmo é executado inumeras vezes e não trava, quando vou para outro form que contem outros relatórios o mesmo é executado inumeras vezes e tambem não trava, mas se eu voltar logo após um dos forms que eu ja utilizei para ver os relatórios novamente , na primeira chamda da execução do relatório , ai o sistema trava levando a cpu a 100¬ de processamento. Já troquei de vcl da 10 para 11, já criei outros formulários e mudei os componentes de um form para outro, já fiz liberação de memória quando executo os relatórios, já liberei o form da memória também e até agoa não consegui achar uma solução, caso alguem ja teve esse problema por favor, deixe aqui a sua sugestão.

Idivaldo

MSN idivaldomb@hotmail.com


Idivaldo.mb

Idivaldo.mb

Curtidas 0

Respostas

Marcelo Littig

Marcelo Littig

31/08/2006

Boa tarde.

Eu já desenvolvi muitos relatórios crystal com Delphi. Não sei que tipo de conexão está utilizando para chamar os relatórios, mas eu usava TTX e nunca tive problemas. TTX, caso vc não conheça, vc especifica a estrutura dos campos que irão para o relatório em um arquivo de extenção TTX e manda o Delphi alimentar este arquivo. Assim, seus relatórios ficam completamente independente. Não é ligado a nada, ele pega os dados alimentados no TTX e exibe na tela. É muito bom, acho que vale a pena vc da uma olhada. Também já fiz alguns relatórios com conexão ODBC e Delphi, mas nunca tive nenhum problema parecido. Eu utilizo crystal 9.

Que time de conexão que utiliza? Se puder envie um código de exemplo, mostrando a maneira que vc faz para abrir os relatórios.


GOSTEI 0
Idivaldo.mb

Idivaldo.mb

31/08/2006

O codigo abaixo mostra como eu chamo os relatórios, nesse codigo eu tanto posso ver ou enviar o pdf do relatório.


case RadioGroup1.ItemIndex of
0: begin
Crpe1.ReportName:=ExtractFilePath(Application.ExeName)+´RPT\Rel00001.rpt´;
Crpe1.ReportTitle := ´[REL00001] Relatório de Usuários Ativos´;
crpe1.Connect.ServerName:=servidor;
Crpe1.Connect.UserID:=login_sql;
Crpe1.Connect.Password:=password_sql;
Crpe1.Connect.DatabaseName:=database_sql;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´OPERADORA´)].Formula.Text :=´´´+DM.QCRPARAMNOME_FANTASIA.AsString+´´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´TITULO_RELATORIO´)].Formula.Text :=´´ Relatório de Usuários Ativos ´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´SUBTITULO_RELATORIO´)].Formula.Text :=´´´+ ´Do Período de ´+JvDateEdit1.Text+´ ao ´+JvDateEdit2.Text+´´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´DATA_CAD_INI´)].Formula.Text :=´DATE(´+COPY(JvDateEdit1.Text,7,4)+´,´+ COPY(JvDateEdit1.Text,4,2)+´,´+COPY(JvDateEdit1.Text,1,2)+´)´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´DATA_CAD_FIM´)].Formula.Text :=´DATE(´+COPY(JvDateEdit2.Text,7,4)+´,´+ COPY(JvDateEdit2.Text,4,2)+´,´+COPY(JvDateEdit2.Text,1,2)+´)´;
Crpe1.WindowState:=wsMaximized;
//FormIndex.Crpe1.WindowButtonBar.AllowDrillDown := True;
Crpe1.WindowButtonBar.SearchBtn := True;
Crpe1.Output := toWindow;
Crpe1.DiscardSavedData;
Crpe1.Refresh;
Crpe1.show;
end;
1:begin
if Application.MessageBox(´Deseja enviar esse relatório por email?´,pchar(NOME_Programa),MB_YESNO)=id_yes then
begin
Crpe1.ReportName:=ExtractFilePath(Application.ExeName)+´RPT\Rel00001.rpt´;
Crpe1.ReportTitle := ´[REL00001] Relatório de Usuários Ativos´;
crpe1.Connect.ServerName:=servidor;
Crpe1.Connect.UserID:=login_sql;
Crpe1.Connect.Password:=password_sql;
Crpe1.Connect.DatabaseName:=database_sql;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´OPERADORA´)].Formula.Text :=´´´+DM.QCRPARAMNOME_FANTASIA.AsString+´´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´TITULO_RELATORIO´)].Formula.Text :=´´ Relatório de Usuários Ativos ´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´SUBTITULO_RELATORIO´)].Formula.Text :=´´´+ ´Do Período de ´+JvDateEdit1.Text+´ ao ´+JvDateEdit2.Text+´´´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´DATA_CAD_INI´)].Formula.Text :=´DATE(´+COPY(JvDateEdit1.Text,7,4)+´,´+ COPY(JvDateEdit1.Text,4,2)+´,´+COPY(JvDateEdit1.Text,1,2)+´)´;
Crpe1.Formulas[Crpe1.Formulas.IndexOf(´DATA_CAD_FIM´)].Formula.Text :=´DATE(´+COPY(JvDateEdit2.Text,7,4)+´,´+ COPY(JvDateEdit2.Text,4,2)+´,´+COPY(JvDateEdit2.Text,1,2)+´)´;
with Crpe1.ExportOptions do
begin
Destination := toFile;
FileType := AdobeAcrobatPDF;
if FileExists(ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´) then
begin
DeleteFile(ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´);
end;
FileName := ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´;
PDF.UsePageRange := True;
end;
Crpe1.Export;
Panel1.Visible:=true;
Animate1.FileName:=ExtractFilePath(Application.ExeName)+´Animacoes\processando.avi´;
Animate1.Active:=true;
Panel1.Align:=alClient;
Panel1.Update;
if Edit2.Text<>´´ then
begin
IF FormMyFunc.Envia_Email(Edit2.Text,´[´+dm.QCRPARAMNOME_FANTASIA.AsString+´]-[Rel00001]-[Relatorio de Usuarios Ativos]´
,´Segue em anexo Relatório de Usuários Ativos - [Rel00001]´+#13+13+13+´Mensagem Gerada Automaticamente pelo Sistema Gestor ´+ DM.QCRPARAMNOME_FANTASIA.AsString +13+13+´Não Responder esse e-mail.´
,ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´) = FALSE THEN
BEGIN
Animate1.Active:=false;
Panel1.Visible:=false;
END;
end
else
begin
Application.MessageBox(´Selecione o(s) Destinatário(s) para envio do e-mail!´,pchar(NOME_Programa),MB_OK);
end;
Panel1.Visible:=false;
Animate1.Active:=false;
end;
end;
end;
if FileExists(ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´) then
begin
DeleteFile(ExtractFilePath(Application.ExeName)+´PDFRel00001.pdf´);
end;






Idivaldo
MSN idivaldomb@hotmail.com


GOSTEI 0
Marcelo Littig

Marcelo Littig

31/08/2006

Olha, aparentemente, ta certinho seu código.
Só uma coisa que eu não uso igual a vc, eu uso o método EXECUTE ao invés de SHOW.

Ao invés de ficar usando esta opção via código: Crpe1.DiscardSavedData,
apenas a desabilite no relatório.

Faz o teste com o execute pra ver o que acontece!


GOSTEI 0
Idivaldo.mb

Idivaldo.mb

31/08/2006

Olá Marcelo Littig !


Já tinha feito o teste com o ´execute´ ao invés de ´show´ e deu o mesmo problema.



Idivaldo
MSN Idivadomb@hotmail.com


GOSTEI 0
Marcelo Littig

Marcelo Littig

31/08/2006

Seguite, aqui uso a versão 9, tente com ela.


GOSTEI 0
POSTAR