none
problema serio crystal reports... RRS feed

  • Pergunta

  • olá, fiz meus relatorios td beleza no VS05 C# COM ASP.NET.

    porem ao rodar no servidor o seguinte erro aparece:

    Logon failed. Details: 08004:unavailable database Error in File C:\WINDOWS\TEMP\Relatorio {7F2219EA-841C-4BF7-AED7-CA2D3F60A40F}.rpt: Unable to connect: incorrect log on parameters.

    eu setei a propriedade ENabledatabaselogonPrompt do crystalreportviewer para False, para aquela tela de login não aparecesse mais...
    eu já fiz um instalador que gera os Merge Modules, mas mesmo asim o erro é o mesmo
    eu já setei o Logon e o caminho:
               CrystalReportViewer2.ReportSource = "C:\\Relatorio.rpt";
                CrystalReportViewer2.LogOnInfo[0].ConnectionInfo.UserID = "SYSDBA";
                CrystalReportViewer2.LogOnInfo[0].ConnectionInfo.Password = "masterkey";
                CrystalReportViewer2.LogOnInfo[0].ConnectionInfo.ServerName = "192.168.0.103";
                CrystalReportViewer2.LogOnInfo[0].ConnectionInfo.DatabaseName = "BASE";
                CrystalReportViewer2.DataBind();
    mas sem sucesso.
    não sei mais o que fazer... se alguem já passou por isso por favor de uma ajuda

    sexta-feira, 9 de novembro de 2007 18:59

Respostas

  • Dataset1 é um dataset tipado que está dentro da sua pasta App_Code, certo?

     

    Se sim, então está correto, está errado apenas a chamada, veja:

    O seu Dataset1 que está dentro do App_Code, é como se fosse uma classe do seu projeto, e vc nao pode referenciar ele diretamente assim Classe.metodo, vc precisa criar uma instancia, e isso ocorre tb para o dataset tipado. Voce está passando ele direto, é preciso criar uma instancia dele e usar a instancia, assim: Dataset1 ds = new Dataset1(); aí o seu dataset tipado vai ser o objeto ds.

     

    Aí, nessa linha:

    rpt.SetDataSource("/App_Code/DataSet1");                       //<<<<<<<<<<<<<<<<

     

    ficaria assim:

    rpt.SetDataSource(ds);                       //<<<<<<<<<<<<<<<<

     

     

    Não esquece de popular o seu ds com os dados que vc deseja exibir no relatório, pois quando vc cria a instancia, o objeto ainda estará vazio.

     

    Obs: na pré visualização do relatório nao vai aparecer os dados do banco mesmo nao, pois o report nao está linkado no banco, e sim no dataset, como no momento da pre visualização o dataset está vazio, entao ele mostra uns dados imaginários só pra poder ter uma base.

    terça-feira, 13 de novembro de 2007 11:22

Todas as Respostas

  • Olá Giovanni!

     

    Tente usar datasets tipados em seus relatórios, assim vc não terá esses problemas.

    Com datasets tipados, vc define um dataset em design-time, e seta esse dataset como fonte de dados do seu relatório no Crystal, e monta a estrutura do seu report com base nesse dataset, assim como desejar. Depois, em run-time vc popula esse dataset com dados, e simplesmente chama o report para exibir as informações.

     

    Eis aqui alguns exemplos: http://weblogs.pontonetpt.com/danielbraga/category/1331.aspx

    segunda-feira, 12 de novembro de 2007 10:14
  • ok Daniel, vou dar uma olhada ve se consigo
    ai te aviso aqui...
    segunda-feira, 12 de novembro de 2007 10:36
  • cara to fazendo meu site em c#
    e estou vendo esse artigo porem ta em vb.
    e tem u codigo que aqui nao da pra fazer
    em vb é esse:

     Dim rptPc As New rptProdutosCategorias

    rptProdutosCategorias é o arquivo .rpt adicionado ao projeto.
    mas em c# o codebehind nao reconhece este arquivo, apenas reconhece o .xsd
    alguma ideia?

    vlw
    segunda-feira, 12 de novembro de 2007 11:22
  • o arquivo.rpt, nao é reconhecido no code behind se é q vc me entende...
    é o unico problema
    segunda-feira, 12 de novembro de 2007 11:42
  • Tente referenciar informando o namespace, por exemplo:

    No meu projeto de interface (UI) eu coloquei os relatórios todos dentro de uma pasta (Reports), então na hora de referenciar, eu faço assim:

     

    UI.Reports.rptInventoryStatus rpt = new UI.Reports.rptInventoryStatus();

     

    Veja se funciona.

    segunda-feira, 12 de novembro de 2007 11:48
  • desculpe cara mas so novo nisso
    e nao sei como criar ou sei la esse (UI)
    mas entendi a logica.
    segunda-feira, 12 de novembro de 2007 15:17
  • UI(UserInterface) é simplesmente o nome do Projeto no caso, e Reports é o nome de uma pasta dentro do projeto, simplesmente para organizar todos os relatorios dentro dela.

     

    Por exemplo... se o nome do seu projeto for Project1 entao tente referenciar assim:

    Project1.nomeDoSeuReport rpt = new Project1.nomeDoSeuReport();

     

    Não sei se me fiz entender...

    segunda-feira, 12 de novembro de 2007 15:33
  • AH SIM SIM
    nossa q simples....
    porem, não aparece o nome do meu website no code behind
    Indifferent
    segunda-feira, 12 de novembro de 2007 16:15
  • Desculpa Giovanni, mancada minha cara... agora entendi seu problema.

     

    Depois de ter populado o dataset com os dados que vc deseja exibir no relatório, exiba-o assim:

     

    // Cria um objeto ReportDocument

    ReportDocument rpt = new ReportDocument();

     

    // Mapeia o caminho do arquivo.rpt no Server

    String reportPath = Server.MapPath("SeuRelatorio.rpt");

     

    // Vincula o arquivo.rpt ao objeto ReportDocument

    rpt.Load(reportPath);

    rpt.SetDataSource(dsSeuDatasetTipado);

     

    // Exibe o relatório

    CRViewer.ReportSource = rpt;

    segunda-feira, 12 de novembro de 2007 16:36
  • tranquilo Daniel...
    bom ali no meu Dataset tipado informo o nome do meu dataset, criado dinamicamente. atraves do add, new item.
    ou um data set por codigo como DataSet ds = new DatasET(); ??
    ??

    ABRAÇO
    segunda-feira, 12 de novembro de 2007 16:42
  • Voce deve informar um dataset tipado criado atravez do Add >> New Item, pq se vc criar via código (dim ds as new dataset) ele não será Tipado, e vc nao vai conseguir adicionar ele como fonte de dados no Crystal para poder criar seu relatório.

     

    Quando vc vai criar um relatório no Crysta vc precisa informar qual será a fonte de dados, que pode ser SQL Server, Access, Oracle, XML, Excel, Arquivos textos, e OS DATASETS TIPADOS DA SUA APLICAÇÃO. Nesse momento ele abre uma lista com todos os seus datasets (tipados) para vc escolher qual deles (ou quais deles) será a fonte de dados do relatório.

     

    Tá ficando claro?

     

    segunda-feira, 12 de novembro de 2007 16:49
  • ta ficando claro sim
    antes na criação do rpt não apareciam meus datasets. agora aparecem.

    porem na pré visualização do relatorio não aparecem os dados exatos do banco.
    aparecem dias da semana, ou nomes de flores em ingles, e na hora de rodar o site nao aparece nada no relatorio
    meu codigo é este:

    Code Block

    protected void Page_Load(object sender, EventArgs e)
        {
            // Cria um objeto ReportDocument
            ReportDocument rpt = new ReportDocument();
            // Mapeia o caminho do arquivo.rpt no Server
            String reportPath = Server.MapPath("Relat.rpt");
            // Vincula o arquivo.rpt ao objeto ReportDocument
            rpt.Load(reportPath);
            rpt.SetDataSource("DataSet1");
            // Exibe o relatório
            CrystalReportViewer1.ReportSource = rpt;
        }


    meu relatorio com o Dataset é p Relat.rpt.
    e o dataset tipado é o DataSet1. será que estou informando alguma coisa de forma incorreta?

    valeu!
    terça-feira, 13 de novembro de 2007 10:49
  • agora mudei o caminho parece q isto estava errado e ta dando esse erro:

    The report you requested requires further information.

    protected void Page_Load(object sender, EventArgs e)
        {
            // Cria um objeto ReportDocument
            ReportDocument rpt = new ReportDocument();
            // Mapeia o caminho do arquivo.rpt no Server
            String reportPath = Server.MapPath("Relat.rpt");
            // Vincula o arquivo.rpt ao objeto ReportDocument
            rpt.Load(reportPath);
            rpt.SetDataSource("/App_Code/DataSet1");                       //<<<<<<<<<<<<<<<<
            // Exibe o relatório
            CrystalReportViewer1.ReportSource = rpt;
        }

    terça-feira, 13 de novembro de 2007 10:54
  • Dataset1 é um dataset tipado que está dentro da sua pasta App_Code, certo?

     

    Se sim, então está correto, está errado apenas a chamada, veja:

    O seu Dataset1 que está dentro do App_Code, é como se fosse uma classe do seu projeto, e vc nao pode referenciar ele diretamente assim Classe.metodo, vc precisa criar uma instancia, e isso ocorre tb para o dataset tipado. Voce está passando ele direto, é preciso criar uma instancia dele e usar a instancia, assim: Dataset1 ds = new Dataset1(); aí o seu dataset tipado vai ser o objeto ds.

     

    Aí, nessa linha:

    rpt.SetDataSource("/App_Code/DataSet1");                       //<<<<<<<<<<<<<<<<

     

    ficaria assim:

    rpt.SetDataSource(ds);                       //<<<<<<<<<<<<<<<<

     

     

    Não esquece de popular o seu ds com os dados que vc deseja exibir no relatório, pois quando vc cria a instancia, o objeto ainda estará vazio.

     

    Obs: na pré visualização do relatório nao vai aparecer os dados do banco mesmo nao, pois o report nao está linkado no banco, e sim no dataset, como no momento da pre visualização o dataset está vazio, entao ele mostra uns dados imaginários só pra poder ter uma base.

    terça-feira, 13 de novembro de 2007 11:22
  • bah caara deu certissimo olhe ai:

    FbConnection conn = new FbConnection(@"Server=192.168.0.1;User=SYSDBA;Password=masterkey;Database=C:\\BASE.GDB");
        protected void Page_Load(object sender, EventArgs e)
        {
            // Cria um objeto ReportDocument
            DataSet1 ds = new DataSet1();
            FbDataAdapter da = new FbDataAdapter("SELECT * FROM CIDADE", conn);
            da.Fill(ds, "CIDADE");

            ReportDocument rpt = new ReportDocument();
            // Mapeia o caminho do arquivo.rpt no Server
            String reportPath = Server.MapPath("CrystalReport.rpt");
            // Vincula o arquivo.rpt ao objeto ReportDocument
            rpt.Load(reportPath);
            rpt.SetDataSource(ds);
            // Exibe o relatório
            CrystalReportViewer1.ReportSource = rpt;
        }

    estou pegando os dados da tabela Cidade, mas caso eu tenha que pegar de mais de uma tabela. ali o da.Fill(ds, "CIDADE"), vai mudar no que????

    outra coisa. no servidor os icones da barra de ferramentas do relatorio nao aparecem, o que posso fazer?

    Muito Obrigado até aqui por essa AULA de crystal reports e dataset Daniel
    SmileSmileSmileSmile
    terça-feira, 13 de novembro de 2007 17:03
  • Bom, para o primeiro caso, se tiver mais uma tabela, crie mais um datatable dentro do seu dataset, e faça esse processo novamente:

     

    FbDataAdapter da = new FbDataAdapter("SELECT * FROM NOVA_TABELA_NO_BANCO", conn);
    da.Fill(ds, "NOVO_DATATABLE");

     

    Em relação as imagens, elas ficam na pasta CrystalReportWebFormViewer no seu IIS, verifique se ele possui a pasta.

    terça-feira, 13 de novembro de 2007 17:59
  • bah cara já pus no diretorio virtual
    no wwwroot
    mas n sei se é ai onde deve ficar esta pasta
    ;/
    terça-feira, 13 de novembro de 2007 19:06
  • Não tenho certeza, mas acho que a esturtura de pastas deve ser essa:

    C:\Inetpub\wwwroot\aspnet_client\system_web\2_0_50727\CrystalReportWebFormViewer\images\toolbar

    e

    C:\Inetpub\wwwroot\aspnet_client\system_web\2_0_50727\CrystalReportWebFormViewer\images\tree

    terça-feira, 13 de novembro de 2007 19:20
  • eu verifiquei o diretorio, e la já tinha esta pasta "CrystalReportWebFormViewer", mas estava como CrystalReportWebFormViewer3. renomeei mas mesmo assim, só aparece o relatorio...
    quarta-feira, 14 de novembro de 2007 10:41
  • Quando abrir o relatório, e as imágens estiverem quebradas, clique com o botão direiro em cima do icone de uma delas e clique em Propriedades, vai aparecer algumas informações, aí vc poderá ver na opção "Endereço" de onde ele está tentando abrir essa imagem.

     

    quarta-feira, 14 de novembro de 2007 13:06
  • sim já achei o diretório certo
    olha era pra dar certo ;/, mas sem sucesso.
    talvez pq na maquina servidor a pasta windows, arquivos de programas, wwwroot, etc estejam instalados no D: ao inves
    de estar no c: .
    vou ver o que faço
    mas deve ser isso
    obrigadao pela ajuda Daniel
    vc me ajudou de mais
    abração e sucesso!!
    quarta-feira, 14 de novembro de 2007 16:58
  • olá Daniel
    cara nao consigo jogar dados de 2 ou mais tabelas no relatorio
    se no data set coloco uma apenas, os dados aparece
    mas se coloco duas ou mais, nao aparace nada no relatorio
    ...
    sexta-feira, 16 de novembro de 2007 15:34
  • consegui
    é q eu estava fazendo relacionamento errado na dataset
    DESCULPAS
    sexta-feira, 16 de novembro de 2007 15:53
  • Maravilha, o relacionamento influência mesmo.

    Parabéns por ter conseguido!

     

     

    Classifique o post por favor.

     

    sexta-feira, 16 de novembro de 2007 17:06
  •  

    Daniel boa tarde,

     

    Estou com um probleminha serio com CrystalReports, estou desenvolvendo um sistema em c# onde criei alguns relatórios no crystal XI. Estanciei um carinha que é de uma procedure que chama @codExame e atraves de um textbox passou o parametro mas não consigo fazer com que ao digitar esse parametro o sistema faça uma consulta no banco e me retorne o Certificado referente ao parametro.

     

    vou postar o seguinte codigo que estou usando, mas esta dando um erro. Gostaria de saber se é possivel me ajudar nesse caso, e se você conhece uma forma mais facil ou até mesmo que funcione para solucionar esse problema.

     

    Fico no aguardo de um contato seu.

     

    segue codigo:

     

     

    CrystalDecisions.CrystalReports.Engine.ReportDocument report = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

    report.Load(@"C:\Documents and Settings\william\Desktop\Relatorios Crystal\certif_Portugues.rpt"); //aqui é o caminho onde está o meu relatório já criado

    CrystalDecisions.Shared.ParameterField param; //crio variavel parametro

    param = report.ParameterFields["@codExame"]; // aqui no caso é o mesmo nome do parametro que vc criou no wisard do crystal

    param.CurrentValues.AddValue(textBox1.Text);//passando valor do text box para variavel param

    crystalReportViewer1.ReportSource = report; //indicando que o reportdocument criado e parametrizado é o meu source

     

     

    atenciosamente,

     

    William

    terça-feira, 11 de março de 2008 20:13