este erro deve estar ocorrendo pelo tipo de instancia do rave. a melhor forma de resolver isso é criar um servidor de relatório com datasnap. alem de sua aplicação ficar mais rápida..sera melhor de dar manutencao, mais segura, mais facil de distribuir e evluir/reutilizar
From: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] On Behalf Of Fábio Thomaz Sent: terça-feira, 16 de junho de 2009 15:15 To: delphi-br@yahoogrupos.com.br Subject: [delphi-br] Problemas: Intraweb + Rave + pdf Olá amigos, estou desenvolvendo um módulo de matrículas OnLine no intraweb, depois de tudo feito, funcionando certinho, passei para os testes finais e verifiquei que o arquivo pdf gerado no rave (Ficha de Matrícula, Boleto, etc ...) saem com os dados de uma outra pessoa quando este processo de inscrição é feito simultaneamente, alguém teria uma dica para que isto não acontece-se? A classe TIWUserSessionBase é única para cada usuário não é? Veja um exemplo: //Função que rega o arquivo pdf e retorna o link do mesmo function TUserSession.ImprimeFichaMatricula(Matricula, Curso, Ano: Integer): string; var Arquivo : string; vcdsIMat: TClientDataSet; rvProject: TRvProject; rvPDF: TRvRenderPDF; rvSystem: TRvSystem; begin rvProject := TRvProject.Create(Self); rvProject.Name := 'rvFichaMatricula'; rvPDF := TRvRenderPDF.Create(Self); rvSystem := TRvSystem.Create(Self); try rvProject.Engine := rvSystem; rvProject.Close; cdsFichaMatricula.Close; cdsFichaMatricula.Params[0].Value := Matricula; cdsFichaMatricula.Open; if cdsFichaMatricula.RecordCount = 1 then begin Arquivo := 'FichaMatricula' + WebApplication.AppID + '.pdf'; rvProject.ProjectFile := gsAppPath + 'Files\FichaMatricula.rav'; rvProject.Open; vcdsIMat := TClientDataSet.Create(Self); vcdsIMat.Name := 'vcdsIMat'; try vcdsIMat.Data := Consulta('SELECT C.CSI_NOMCUR, P.CSI_DATA, P.CSI_INSCRICAO '+ 'FROM TSI_PREMATRICULA P '+ 'INNER JOIN TSI_CADCUR C ON (C.CSI_CODCUR = P.CSI_CODCUR) '+ 'WHERE P.CSI_CODESC = '+vgCodEscola+ 'AND P.CSI_ANOLET = '+IntToStr(Ano)+ 'AND P.CSI_MATALU = '+IntToStr(Matricula)+ 'AND P.CSI_CODCUR = '+IntToStr(Curso)); with rvProject do begin SetParam('Curso',vcdsIMat.Fields[0].AsString); SetParam('Inscricao',vcdsIMat.Fields[2].AsString); SetParam('DataMat',vcdsIMat.Fields[1].AsString); end; with rvSystem do begin SystemSetups := []; DefaultDest := rdFile; DoNativeOutput:= False; RenderObject:= rvPDF; OutputFileName:= gsAppPath + 'Files\'+ Arquivo; end; rvProject.Execute; finally rvProject.Close; vcdsIMat.Free; end; Result := 'window.open("'+WebApplication.Request.URL+'/files/'+Arquivo+'", "","");'; end else begin Result := 'window.open("Files/FichaNaoEncontrada.html", "","");'; end; finally rvProject.Free; rvPDF.Free; rvSystem.Free; end; end; //Procedimento que mostra a ficha procedure TF0InfPreMatricula.iwlnkFichaMatriculaClick(Sender: TObject); var Matricula, Curso: Integer; begin with UserSession do begin Matricula := StrToInt(Parametros[0]); Curso := StrToInt(Parametros[2]); AddToInitProc(ImprimeFichaMatricula(Matricula,Curso,vgAnoLetivo)); end; end; Aparentemente, pelos testes que fiz, parece que as informações ficam armazenadas no servidor, quando outro usuário chama o mesmo procedimento ele apenas cria outro arquivo com as mesmas informações obtidas antes, estranho é que eu crio e destruo os componentes em tempo de execução e mesmo assim o problema persiste. Qualquer ajuda é bem vinda! Desde já agradeço. Fábio Thomaz. [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]