none
Quando informo um parâmetro via programação fica carregando eternamente RRS feed

  • Pergunta

  • Boenas!!!

    Pessoal o negócio é o seguinte eu to passando via programação um parâmetro para o ReportViewer, porque a intenção é não deixar o usuário informar um parâmetro. Quando faço isso o relatório fica com a caixinha de carregando e não sai disso. Se eu permito que o usuário informe o parâmetro funciona muito bem e fica bem rápido.

    Relatorio.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote
    
    Relatorio.ServerReport.ReportServerUrl = New Uri("http://localhost/ReportServer")
    
    Relatorio.ServerReport.ReportPath = "/Sistema/NomeRelatório"
    
    Dim pInfo As ReportParameterInfoCollection
    
     Dim paramList As New Generic.List(Of ReportParameter)
    
    paramList.Add(New ReportParameter("Cod", "1", False))
    Relatorio.ServerReport.SetParameters(paramList)
    
    pInfo = RelatorioRomaneio.ServerReport.GetParameters()
    
    Relatorio.ServerReport.Refresh()

    Alguém já passou por esse problema e sabe como resolver? Já tentei abrir em vários navegadores diferentes e sempre acontece o mesmo.

    Obrigado!

    segunda-feira, 1 de abril de 2013 12:36

Todas as Respostas

  • Marcus, veja se o valor que o parâmetro espera receber está correto. No parâmetro é possível parametrizar o "Value Field" que é o valor que ele passa para o dataset para executar a query e o "Label Field" que é o valor apenas para visualização no prompt.

    Exemplo: Eu posso ter no Parametro @produto com o "Value Field" = idProduto e o "Label Field"=ds_Produto. Quando referencio o parâmetro no dataset principal que trará os dados, eu preciso utilizar o campo que corresponda ao ID do produto, no caso o idProduto.

    select dados from tb_produtos where idProduto in (@produto)

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 1 de abril de 2013 21:42
  • O parâmetro esta correto, seguindo o seu exemplo do produto o nome do parâmetro é Cod e ali eu setei = 1. 

    Tanto que se eu deixar para o usuário informar e for informado o 1 ele funciona. 

    Fiz um teste que foi o seguinte mandei o parâmetro e ele fico com a tela de load nesse meio tempo alterei o código tirando o parâmetro e o relatório foi aberto como deveria ou seja aquela tela de load fica recarregando a página e ele já tinha recebido o parâmetro e o valor então ele atualizou manteve na tela o valor e então o relatorio foi montado. Mas isso só funciona se eu altero o código fonte enquanto ele esta com aquele balão de load.

    Como vc usa isso? Eu não posso deixar o usuário informar o parâmetro ele já tem que montar o relatório e só mostrar para o cliente dando a ele apenas a opção de imprimir. Isso e um documento não posso deixar que ele puxe outro documento a seu gosto.

    Valeu

    terça-feira, 2 de abril de 2013 12:23
  • Alguém usa o componente ReportViewer? Eu peguei os próprios códigos da biblioteca da MSDN ( http://msdn.microsoft.com/en-us/library/aa337091.aspx ) e fica na tela de load e não sai disso..... Pelo que eu vi não tem outro jeito de mostrar o relatório que não seja pelo ReportViewer! 

    Alguem me ajuda por favor.

    terça-feira, 2 de abril de 2013 14:59
  • Os parametros são originados da sua aplicação?

    De qualquer forma deveria funcionar, passando o parametro via código.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    terça-feira, 2 de abril de 2013 15:00
  • Como assim original da minha aplicação? Local ou remoto vc quer dizer? Se for isso é remoto, o relatório ta no servidor de relatório.

            'Set the processing mode for the ReportViewer to Remote
            ReportViewer1.ProcessingMode = ProcessingMode.Remote
    
            Dim serverReport As ServerReport
            serverReport = ReportViewer1.ServerReport
    
            'Set the report server URL and report path
            serverReport.ReportServerUrl = _
                New Uri("http://marcus-pc/ReportServer")
            serverReport.ReportPath = _
                "/Sistema/Relatorio"
    
            'Create the sales order number report parameter
            Dim salesOrderNumber As New ReportParameter()
            salesOrderNumber.Name = "Cod"
            salesOrderNumber.Values.Add("1")
    
            'Set the report parameters for the report
            Dim parameters() As ReportParameter = {salesOrderNumber}
            serverReport.SetParameters(parameters)

    terça-feira, 2 de abril de 2013 16:47
  • Marcus,

    Este processamento eterno que esta ocorrendo no Reporting Services não ocorre se você processar a mesma query diretamente no Management Studio?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 2 de abril de 2013 16:52
  • Não não, nem no prórprio relatorio não acontece isso se eu não informo o parametro.

    O que eu relatei só acontece quando informo o parâmetro via programação. 

    Se eu só comentar a linha que adiciona o parametro o relatorio pede o paramentro e eu informo e ele gera tranquilo.
    terça-feira, 2 de abril de 2013 18:11
  • Marcus,

    Então o problema esta ocorrendo somente quando os parâmetros estão sendo passados através do seu aplicativo?

    Talvez seja o caso de tentar utilizar a Query Hint Optimizer, para tentarmos otimizar o processamento do SQL Server por parte do uso de variáveis durante o tempo de execução da query.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 2 de abril de 2013 18:40
  • Te aseguro que não é problema de peformace de SQL.

    Como vc usa pra mostrar um relatório? Pra eu fazer igual aqui ver se funciona.

    terça-feira, 2 de abril de 2013 18:48
  • Marcus,

    Não estou falando que é performance!!!! Estou somente pensando em eliminar uma possibilidade com o Optimizer.

    Em relação a relatórios, acredito que o problema esta ocorrendo no conjunto de dados que estão sendo passados para o seu componente de visualização.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    terça-feira, 2 de abril de 2013 18:50
  • Não consigo postar nem imagem nem link.... deixa pra lá to fudido mesmo.
    terça-feira, 2 de abril de 2013 19:15
  • Marcus, baseado na proposta do Junior, tenta o seguinte

    Quando o relatório começar a renderizar, vá no SQL manamagent Studio e digite no banco master o seguinte comando: sp_who2 active

    Vai aparecer os processo ativos. Veja se existe um outro processo bloqueando o select do seu relatório. Para identificar a sua query pegue o número SPID e digite DBCC INPUTBUFFER(SPID)

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    terça-feira, 2 de abril de 2013 19:26
  • Saquei! 

    Mas nem chego a executar o SQL do relatório.... o problema da antes disso.

    terça-feira, 2 de abril de 2013 19:55
  • Nao entendi...o relatório ja esta rederizando? Nao aparece a tela "carregando"? Me adiciona no msn. Se aparece esta tela é sinal de que o sql esta sendo executado. Edugp_sp@hotmail.com

    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    terça-feira, 2 de abril de 2013 20:24
  • já adicionei o meu é marcuscostabraga@hotmail.com
    terça-feira, 2 de abril de 2013 20:41
  • Marcus,

    Posso estar errado, mais já passei por algo do tipo com um programador, porém era C# que estavamos usando e quando ele executava o ReportViewer dentro do C# ficava igual ao seu exemplo, ai descobrimos que no código ele tava passando metódo  parecido com "Relatorio.ServerReport.Refresh()" , porém se não me falha a memória ele passou no inicio do código e com isso fez com que o refresh exibisse os dados, pois pelo que entendi ele busca corretamente os dados mais não consegue dar o refresh na tela para exibir os mesmos.

    Assim que possivel posto os código usado aqui para exemplo.

    Att.:

    Chilipi_10

    sábado, 6 de abril de 2013 17:36