none
Dúvida CrYSTAL VS Report Viewer. RRS feed

  • Pergunta

  • olá

     

    uso Crystal Reports nos meus relatórios e gostaria de saber se tem alguma opção do crystal, para visuazlizar o relatório diretamente em pdf. assim como no Report Viewer tem a opção... sem carregar a barra de menus, ou seja, ir direto para a visulização em pdf.

     

    desde já agradeço...

    quinta-feira, 18 de setembro de 2008 14:33

Respostas

  • Opa! E ai Giovanni tudo bem?

     

    Sim, nestes exemplos que eu passei eu uso um dataset (sem dados, ou seja somente a estrutura com os campos) para fazer o designer dos relatórios.

     

    Faça o downloads dos meus vídeos que eu disponibilizei para a comunidade MSDN sobre a construção de relatórios com Crystal Reports e ReportView e no primeiro vídeo eu mostro como fazer a exportação dos dados sem usar o printpreview (com o Crystal Reports e o ReportView).

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos com vários exemplos de como construir relatórios com os componentes):

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    ** Já estou vendo a sua segunda dúvida para resolver o problema do gráfico (depois posta um feedback se resolveu o problema assistindo aos vídeos).

     

     

    Valeu!

     

     

     

    sexta-feira, 19 de setembro de 2008 12:32
    Moderador
  • Giovanni,

     

    creio que não tenha como setar 2 datatables...

     

    Um exemplo para resolver esse problema (exemplo com 2 datatables no dataset utilizando um relatório no Crystal Reports):

     

     

    Code Snippet

    Private Sub ExportarPDF_v2()

    '

    'exportar o relatório para PDF sem print preview

    '

    Dim crReportDocument As New ReportDocument

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataset As New DataSet

    Try

     

    '1 passo: carregar o relatório

    Dim strPathreport As String = Server.MapPath("~\CrystalReports\rptProdutos_v2.rpt")

    crReportDocument.Load(strPathreport)

     

    '2 passo: passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    '

    'carregando os dados do PRIMEIRO Datatable do Dataset

    '

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID; ")

    Dim oDAProduct As New SqlDataAdapter(strSQL.ToString, oConn)

    oDAProduct.Fill(oDataset, "Product")

     

    '

    'carregando os dados do SEGUNDO Datatable do Dataset

    '

    strSQL = New StringBuilder

    strSQL.Append(" SELECT ")

    strSQL.Append(" ProductID, ")

    strSQL.Append(" StartDate, ")

    strSQL.Append(" EndDate, ")

    strSQL.Append(" ListPrice")

    strSQL.Append(" FROM Production.ProductListPriceHistory")

    Dim oDAProductPriceHistory As New SqlDataAdapter(strSQL.ToString, oConn)

    oDAProduct.Fill(oDataset, "ProductListPriceHistory")

     

    'definindo o DataSource do relatório

    crReportDocument.SetDataSource(oDataset)

     

    'exportando o arquivo para pdf

    Dim crExportOptions As ExportOptions

    Dim crDiskFileDestinationOptions As DiskFileDestinationOptions

    Dim strPDFTmp As String = Server.MapPath("~\tmp") & "\" & Session.SessionID.ToString & ".pdf"

    crDiskFileDestinationOptions = New DiskFileDestinationOptions()

    crDiskFileDestinationOptions.DiskFileName = strPDFTmp

    crExportOptions = crReportDocument.ExportOptions

    With crExportOptions

    .DestinationOptions = crDiskFileDestinationOptions

    .ExportDestinationType = ExportDestinationType.DiskFile

    .ExportFormatType = ExportFormatType.PortableDocFormat

    End With

    crReportDocument.Export()

    'escrevendo o pdf para o browser do cliente

    Response.ClearContent()

    Response.ClearHeaders()

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf")

    Response.WriteFile(strPDFTmp)

    Response.Flush()

    Response.Close()

    'removendo o pdf do servidor

    System.IO.File.Delete(strPDFTmp)

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oDataset.Dispose()

    oConn = Nothing

    oDataset = Nothing

    End Try

    End Sub

     

     

    Observações:

          - Adicione um diretório tmp no projeto (diretório temporário utilizado para exportar o relatório para PDF)

     

          - No Dataset (utilizado para fazer o designer do relatório, eu tenho 2 DataTables  (Product e  ProductListPriceHistory) e por isso na hora de definir os dados do relatório (datasource), informei os mesmos nomes (esse detalhe é importante)

     

    Espero ter ajudado!

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quarta-feira, 24 de setembro de 2008 13:33
    Moderador

Todas as Respostas

  • Giovanni,

     

    Um exemplo completo em VB.NET

    Code Snippet

     

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

    'referências do crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

     

    Code Snippet

    Private Sub ExportarPDF()

    '

    'exportar o relatório para PDF sem print preview

    '

    Dim crReportDocument As New ReportDocument

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oTable As New DataTable()

    Try

    '1 passo: carregar o relatório

    Dim strPathreport As String = Server.MapPath("~\CrystalReports\rptProdutos.rpt")

    crReportDocument.Load(strPathreport)

    '2 passo: passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    'carregando os dados

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oTable)

    'definindo o DataSource do relatório

    crReportDocument.SetDataSource(oTable)

    'exportando o arquivo para pdf

    Dim crExportOptions As ExportOptions

    Dim crDiskFileDestinationOptions As DiskFileDestinationOptions

    Dim strPDFTmp As String = Server.MapPath("~\tmp") & "\" & Session.SessionID.ToString & ".pdf"

    crDiskFileDestinationOptions = New DiskFileDestinationOptions()

    crDiskFileDestinationOptions.DiskFileName = strPDFTmp

    crExportOptions = crReportDocument.ExportOptions

    With crExportOptions

    .DestinationOptions = crDiskFileDestinationOptions

    .ExportDestinationType = ExportDestinationType.DiskFile

    .ExportFormatType = ExportFormatType.PortableDocFormat

    End With

    crReportDocument.Export()

    'escrevendo o pdf para o browser do cliente

    Response.ClearContent()

    Response.ClearHeaders()

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf")

    Response.WriteFile(strPDFTmp)

    Response.Flush()

    Response.Close()

    'removendo o pdf do servidor

    System.IO.File.Delete(strPDFTmp)

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oTable.Dispose()

    oConn = Nothing

    oTable = Nothing

    End Try

    End Sub

     

     

    uma outra dica:

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos sobre como construir relatórios com vários exemplos (inclusive com um exemplo completo de como exportar direto para PDF )):

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    quinta-feira, 18 de setembro de 2008 15:05
    Moderador
  • olá

     

    cara como uso C# tive que converter tudo e retornou um erro:

     

    Logon failed.
    Details: crdb_adoplus : Referência de objeto não definida para uma instância de um objeto

     

    nessa linha acontece o erro:

     

    crReportDocument.Export();

     

    Code Snippet

    private void ExportarPDF()

    {

    //

    //exportar o relat¢rio para PDF sem print preview

    //

    ReportDocument crReportDocument = new ReportDocument();

    StringBuilder strSQL = new StringBuilder();

    DataTable oTable = new DataTable();

    try

    {

    //1 passo: carregar o relat¢rio

    string strPathreport = Server.MapPath("RelatPermissao2.rpt");

    crReportDocument.Load(strPathreport);

    //2 passo: passar os dados para o relat¢rio (datatable)

    //abrindo conexÆo com o banco de dados

    conn.Open();

    //carregando os dados

     

    strSQL.Append(" SELECT CODIPERMICAO, ");

    strSQL.Append(" NOMEPERMICAO FROM PERMICAO ");

    strSQL.Append(" WHERE TIPOPERMICAO = 4 ORDER BY NOMEPERMICAO ");

    FbDataAdapter oDA = new FbDataAdapter(strSQL.ToString(), conn);

    oDA.Fill(oTable);

    //definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable);

    //exportando o arquivo para pdf

    ExportOptions crExportOptions;

    DiskFileDestinationOptions crDiskFileDestinationOptions;

    string strPDFTmp = Server.MapPath(Session.SessionID.ToString() + ".pdf");

    crDiskFileDestinationOptions = new DiskFileDestinationOptions();

    crDiskFileDestinationOptions.DiskFileName = strPDFTmp;

    crExportOptions = crReportDocument.ExportOptions;

    {

    crExportOptions.DestinationOptions = crDiskFileDestinationOptions;

    crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;

    crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

    }

    crReportDocument.Export();

    //escrevendo o pdf para o browser do cliente

    Response.ClearContent();

    Response.ClearHeaders();

    Response.ContentType = "application/pdf";

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf");

    Response.WriteFile(strPDFTmp);

    Response.Flush();

    Response.Close();

    //removendo o pdf do servidor

    System.IO.File.Delete(strPDFTmp);

    }

    catch (Exception ex)

    {

    System.Diagnostics.Debug.WriteLine(ex.Message);

    }

    finally

    {

    //liberando os objetos

    conn.Dispose();

    oTable.Dispose();

    conn = null;

    oTable = null;

    }

    }

     

     

    quinta-feira, 18 de setembro de 2008 16:57
  • Giovanni,

     

    Neste caso, tenho um link com um exemplo completo em C# (exportar para PDF, DOC, HTML, etc)

    http://www.codeproject.com/KB/cs/letaonarticle2.aspx?display=Print

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quinta-feira, 18 de setembro de 2008 18:30
    Moderador
  • mas este link mostra como exportar direto pra pdf?

    quinta-feira, 18 de setembro de 2008 18:57
  • Giovanni,

     

    Fiz um exemplo em C# (com banco de dados SQL Server) para resolver o problema.

     

    Observações:

    Adicione um diretório com o nome tmp dentro da aplicação.

    Adicione as referencias ao projeto (Add References)

    System.Configuration

    System.Data

     

     

    Code Snippet

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    //referˆncias do banco de dados

    using System.Data.SqlClient;

    using System.Data;

    //referˆncias do crystal reports

    using CrystalDecisions.CrystalReports.Engine;

    using CrystalDecisions.Shared;

    //referˆncia ConnectionStrings web.config

    using System.Web.Configuration;

    //referˆncia StringBuilder

    using System.Text;

     

     

    Code Snippet

    private void ExportarPDF()

    {

    //

    //exportar o relat¢rio para PDF sem print preview

    //

    ReportDocument crReportDocument = new ReportDocument();

    string strConexao = WebConfigurationManager.ConnectionStrings["AWorks"].ToString();

    SqlConnection oConn = new SqlConnection();

    StringBuilder strSQL = new StringBuilder();

    DataTable oTable = new DataTable();

    try {

    //1 passo: carregar o relat¢rio

    string strPathreport = Server.MapPath("~\\rptProdutos.rpt");

    crReportDocument.Load(strPathreport);

    //2 passo: passar os dados para o relat¢rio (datatable)

    //abrindo conexÆo com o banco de dados

    oConn.ConnectionString = strConexao;

    oConn.Open();

    //carregando os dados

    strSQL.Append(" SELECT ");

    strSQL.Append(" Production.Product.ProductID, ");

    strSQL.Append(" Production.Product.Name, ");

    strSQL.Append(" Production.Product.Color, ");

    strSQL.Append(" Production.Product.ListPrice, ");

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ");

    strSQL.Append(" FROM ");

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ");

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ");

    SqlDataAdapter oDA = new SqlDataAdapter(strSQL.ToString(), oConn);

    oDA.Fill(oTable);

    //definindo o DataSource do relat¢rio

    crReportDocument.SetDataSource(oTable);

    //exportando o arquivo para pdf

    ExportOptions crExportOptions;

    DiskFileDestinationOptions crDiskFileDestinationOptions;

    string strPDFTmp = Server.MapPath("~\\tmp") + "\\" + Session.SessionID.ToString() + ".pdf";

    crDiskFileDestinationOptions = new DiskFileDestinationOptions();

    crDiskFileDestinationOptions.DiskFileName = strPDFTmp;

    crExportOptions = crReportDocument.ExportOptions;

    {

    crExportOptions.DestinationOptions = crDiskFileDestinationOptions;

    crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;

    crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

    }

    crReportDocument.Export();

    //escrevendo o pdf para o browser do cliente

    Response.ClearContent();

    Response.ClearHeaders();

    Response.ContentType = "application/pdf";

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf");

    Response.WriteFile(strPDFTmp);

    Response.Flush();

    Response.Close();

    //removendo o pdf do servidor

    System.IO.File.Delete(strPDFTmp);

    }

    catch (Exception ex) {

    System.Diagnostics.Debug.WriteLine(ex.Message);

    }

    finally {

    //liberando os objetos

    oConn.Dispose();

    oTable.Dispose();

    oConn = null;

    oTable = null;

    }

    }

     

     

    Code Snippet

     

    protected void Page_Load(object sender, EventArgs e)

    {

    ExportarPDF();

    }

     

     

    quinta-feira, 18 de setembro de 2008 19:40
    Moderador
  • da o mesmo erro de antes...

     

    e essa maneira aí de exportar só precisa destes códigos e do .rpt? não precisa de dataset?

    sexta-feira, 19 de setembro de 2008 11:42
  • Opa! E ai Giovanni tudo bem?

     

    Sim, nestes exemplos que eu passei eu uso um dataset (sem dados, ou seja somente a estrutura com os campos) para fazer o designer dos relatórios.

     

    Faça o downloads dos meus vídeos que eu disponibilizei para a comunidade MSDN sobre a construção de relatórios com Crystal Reports e ReportView e no primeiro vídeo eu mostro como fazer a exportação dos dados sem usar o printpreview (com o Crystal Reports e o ReportView).

     

    Criei um tópico fixo no fórum MSDN com algumas dicas  sobre a construção de relatórios com Crystal Reports e ReportView (incluindo 2 vídeos com vários exemplos de como construir relatórios com os componentes):

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3761576&SiteID=21

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    ** Já estou vendo a sua segunda dúvida para resolver o problema do gráfico (depois posta um feedback se resolveu o problema assistindo aos vídeos).

     

     

    Valeu!

     

     

     

    sexta-feira, 19 de setembro de 2008 12:32
    Moderador
  • DEU CERTO! Big Smile

     

    1 - anteriomente creio que não dava certo, pois eu estava usando meus datasets já criados e eles tinham métodos do dataset, fill a datatable e return a datatable.

     

    1.1 - esse métodos do dataset não precisa então??

    1.2 - sem eles vou ter visualização mais rápida né!?

     

    2 - depois então criei um novo dataset, acompanhando o video e deu certo.

     

    3 - e agora posso desabilitar os métodos dos meus datasets sem problemas?

     

    Valeu até aqui!!!

    sexta-feira, 19 de setembro de 2008 14:03
  • opa, cara pelo que testei, nao da certo com meus datasets.

    sempre tenho que deletar meu TableAdapter e Readiciona-lo...

     

    outra coisa..

    o seu exemplo é com uma tabela do banco de dados, (com apenas UM select), caso eu queria fazer com duas ou mais tabelas(mais de UM select) como faço??

    sexta-feira, 19 de setembro de 2008 14:29
  • help?

     

    é meio urgente Wink

    segunda-feira, 22 de setembro de 2008 11:26
  • E ai Giovanni tudo bem?

     

    Vamos lá!

     


    Pq vc "sempre" precisa deletar os TableAdapter para fazer o designer dos relatórios?

    Eu tenho sempre 1 dataset para cada relatório, ou seja, faço o designer do relatório de forma desconectada com um dataset (com apenas 1 datatable) e tenho uma rotina para "passar" os dados para o relatório.

     

    Pergunta: pq preciso de apenas 1(um) datatable para fazer o designer do relatório?
    Resposta: Qual é o resultado de um SQL "Query" executada no banco de dados? um conjunto de 1(uma) ou mais colunas (ou seja, um datatable).


    Exemplo:

    Code Snippet
    SELECT
        s.[SalesPersonID]
        ,c.[Title]
        ,c.[FirstName]
        ,c.[MiddleName]
        ,c.[LastName]
        ,c.[Suffix]
        ,[JobTitle] = e.[Title]
        ,c.[Phone]
        ,c.[EmailAddress]
        ,c.[EmailPromotion]
        ,a.[AddressLine1]
        ,a.[AddressLine2]
        ,a.[City]
        ,[StateProvinceName] = sp.[Name]
        ,a.[PostalCode]
        ,[CountryRegionName] = cr.[Name]
        ,[TerritoryName] = st.[Name]
        ,[TerritoryGroup] = st.[Group]
        ,s.[SalesQuota]
        ,s.[SalesYTD]
        ,s.[SalesLastYear]
    FROM [Sales].[SalesPerson] s
        INNER JOIN [HumanResources].[Employee] e
        ON e.[EmployeeID] = s.[SalesPersonID]
        LEFT OUTER JOIN [Sales].[SalesTerritory] st
        ON st.[TerritoryID] = s.[TerritoryID]
        INNER JOIN [Person].[Contact] c
        ON c.[ContactID] = e.[ContactID]
        INNER JOIN [HumanResources].[EmployeeAddress] ea
        ON e.[EmployeeID] = ea.[EmployeeID]
        INNER JOIN [Person].[Address] a
        ON ea.[AddressID] = a.[AddressID]
        INNER JOIN [Person].[StateProvince] sp
        ON sp.[StateProvinceID] = a.[StateProvinceID]
        INNER JOIN [Person].[CountryRegion] cr
        ON cr.[CountryRegionCode] = sp.[CountryRegionCode];

     

     

    Qual é o resultado desse SQL? Preciso criar um DataSet com todos esses tables (e os relacionamentos) para fazer o "designer de 1(um) relatório"?

    O que eu preciso ter no meu DataTable (dentro do Dataset) para fazer um relatório com base nesse SQL? 
       
         Resposta (apenas a lista de campos com os tipo de dados): 

    Code Snippet

        SalesPersonID
        ,Title
        ,FirstName
        ,MiddleName
        ,LastName
        ,Suffix
        ,JobTitle
        ,Phone
        ,EmailAddress
        ,EmailPromotion
        ,AddressLine1
        ,AddressLine2
        ,City
        ,StateProvinceName
        ,PostalCode
        ,CountryRegionName
        ,TerritoryName
        ,TerritoryGroup
        ,SalesQuota
        ,SalesYTD
        ,SalesLastYear

     

     

        Não é regra, mais no geral tenho apenas 1 datatable por dataset para fazer o designer de cada relatório. E tenho uma rotina (sub ou function) que carrega um DataTable (ai sim, com base no meu SQL com todos os join), para preecher o datasource do report.

     

       Posso usar o mesmo dataset para fazer o designer de vários relatórios?

    Eu tenho um dataset por relatório pq caso ocorra um problema em um determinado relatório, vou "parar" apenas 1 relatório no meu ambiente de produção. Já imaginou se tenho apenas 1 dataset para fazer o designer de todos os relatórios e faço algo errado?

     


     Espero ter ajudado!

     

    segunda-feira, 22 de setembro de 2008 14:50
    Moderador
  • olá, entendi cara, só que as 2 tabelas que vou retornar os dados, não tem ligação nenhuma...

    olha como eu faço meus relatórios:

     

    Code Snippet

    MeuDataSet ds = new MeuDataSet();

    protected void Page_Load(object sender, EventArgs e)

    {

    ds.EnforceConstraints = false;

    FbDataAdapter da = new FbDataAdapter("SELECT CAMPO1, CAMPO2 FROM TABELA1", conn);

    da.Fill(ds, "TABELA1");

    da.Dispose();

    FbDataAdapter da4 = new FbDataAdapter("SELECT CAMPO1, CAMPO2 FROM TABELA2", conn);

    da4.Fill(ds, "TABELA2");

    da4.Dispose();

    ReportDocument rpt = new ReportDocument();

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

    rpt.Load(reportPath);

    rpt.SetDataSource(ds);

    CrystalReportViewer2.ReportSource = rpt;

    }

     

     

    da certinho, pois jogo cada select num datatable dentro do dataset.

     

     

    E SE AS TABELAS NÃO TEM LIGAÇÃO NENHUMA, COMO POSSO SELECIONAR AS DUAS NO MESMO SELECT!!?

    ;/

    segunda-feira, 22 de setembro de 2008 17:18
  • Neste caso não é possível fazer um Union?

     

    Vc está usando o banco de dados Firebird? Não dá para fazer uma view com esses 2 Selects?

     

    Code Snippet

    create view v_lista_campos

    as

    SELECT CAMPO1,

        CAMPO2

        FROM TABELA1

    UNION

    SELECT CAMPO1,

        CAMPO2

        FROM TABELA2

     

     

     

    Code Snippet

    FbDataAdapter da = new FbDataAdapter("SELECT CAMPO1, CAMPO2 FROM v_lista_campos", conn);

    da.Fill(ds, "v_lista_campos");

    da.Dispose();

     

     

    segunda-feira, 22 de setembro de 2008 17:28
    Moderador
  • Union não dá pq são campos diferentes.

    e view eu vou ter que criar uma pra cada relatório

    tenho quase 100 relatórios.

    heheeh

     

    mas seria a melhor alternativa....

    ;/

     

    segunda-feira, 22 de setembro de 2008 17:58
  • giovanni,

     

    Tenho uma curiosidade:

    Code Snippet

    FbDataAdapter da = new FbDataAdapter("SELECT CAMPO1, CAMPO2 FROM TABELA1", conn);

    da.Fill(ds, "TABELA1");

    da.Dispose();

    FbDataAdapter da4 = new FbDataAdapter("SELECT CAMPO1, CAMPO2 FROM TABELA2", conn);

    da4.Fill(ds, "TABELA2");

    da4.Dispose();

    ReportDocument rpt = new ReportDocument();

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

    rpt.Load(reportPath);

    rpt.SetDataSource(ds);

     

     

    O que será exibido nesse relatório? uma listagem ?

     

    Neste caso, vc consegue passar esse dataset sem nenhum problema para o Crystal Reports (2 datatables sem relacionamento, inclusive um dos meus exemplos que eu mostro nos vídeos é dessa forma, agora, faço isso somente para mostrar um único item no cabeçalho do relatório), só não consigo visualizar o que será mostrado em um relatório que não tem relacionamento entre as tabelas (cada tabela com um número de registros).

     

     

    segunda-feira, 22 de setembro de 2008 20:00
    Moderador
  • Olá Laercio...

     

    A TABELA1 sao campos que vao no cabeçalho e rodapé do relatório.

     

    e a TABELA2 seria as listagem de funcionários, por exemplo, que vai na seção Details...

     

    desse meu jeito consigo facilmente sim usar o relatório, mas como eu quero imprimir direto pra PDF ai não sei...

     

    até mais!

    terça-feira, 23 de setembro de 2008 16:36
  • Opa!,

     

    Então neste caso vc não vai ter problemas em utilizar 2 Datatables para fazer o relatório no Crystal Reports (também funcionada para o ReportView .NET 2008).

     

    Inclusive um dos exemplos que eu mostro nos vídeos é como exibir uma imagem no cabeçalho do relatório do crystal reports (utilizo 2 datatables sem nenhum relacionamento).

     

    Como vc está utilizando um datatable apenas para exibir os dados de cabeçalho (também funciona para o rodapé), apenas o PRIMEIRO REGISTRO será exibido nesses itens.

     

    E para exportar para PDF também funciona 100%, basta utilizar o meu exemplo que eu disponibilizei nos vídeos.

     

    Caso ainda tenha alguma dúvida é só postar.

     

    Valeu!

     

     

    quarta-feira, 24 de setembro de 2008 12:04
    Moderador
  • mas aí é que ta a zica, no seu exemplo para exportar direto pra PDF vc usa apenas um select, obviamente será apenas 1 datatable..e quando devemos setar o datasource do ReportDocument:

     

    crReportDocument.SetDataSource(oTable);

     

    creio que não tenha como setar 2 datatables...

     

    no geral, estou conseguindo utilizar normalmente os relatórios, usando de 1 a 10 datatables...

    só que usando o printview, ou seja, a barrinha de itens do Crystal(Exportar, Imprimir, ETC)...

     

    o problema está mesmo em imprimir direto pra PDF...

     

     

    Obrigado até aqui amigo...

     

     

    quarta-feira, 24 de setembro de 2008 12:41
  • Giovanni,

     

    creio que não tenha como setar 2 datatables...

     

    Um exemplo para resolver esse problema (exemplo com 2 datatables no dataset utilizando um relatório no Crystal Reports):

     

     

    Code Snippet

    Private Sub ExportarPDF_v2()

    '

    'exportar o relatório para PDF sem print preview

    '

    Dim crReportDocument As New ReportDocument

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataset As New DataSet

    Try

     

    '1 passo: carregar o relatório

    Dim strPathreport As String = Server.MapPath("~\CrystalReports\rptProdutos_v2.rpt")

    crReportDocument.Load(strPathreport)

     

    '2 passo: passar os dados para o relatório (datatable)

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    '

    'carregando os dados do PRIMEIRO Datatable do Dataset

    '

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID; ")

    Dim oDAProduct As New SqlDataAdapter(strSQL.ToString, oConn)

    oDAProduct.Fill(oDataset, "Product")

     

    '

    'carregando os dados do SEGUNDO Datatable do Dataset

    '

    strSQL = New StringBuilder

    strSQL.Append(" SELECT ")

    strSQL.Append(" ProductID, ")

    strSQL.Append(" StartDate, ")

    strSQL.Append(" EndDate, ")

    strSQL.Append(" ListPrice")

    strSQL.Append(" FROM Production.ProductListPriceHistory")

    Dim oDAProductPriceHistory As New SqlDataAdapter(strSQL.ToString, oConn)

    oDAProduct.Fill(oDataset, "ProductListPriceHistory")

     

    'definindo o DataSource do relatório

    crReportDocument.SetDataSource(oDataset)

     

    'exportando o arquivo para pdf

    Dim crExportOptions As ExportOptions

    Dim crDiskFileDestinationOptions As DiskFileDestinationOptions

    Dim strPDFTmp As String = Server.MapPath("~\tmp") & "\" & Session.SessionID.ToString & ".pdf"

    crDiskFileDestinationOptions = New DiskFileDestinationOptions()

    crDiskFileDestinationOptions.DiskFileName = strPDFTmp

    crExportOptions = crReportDocument.ExportOptions

    With crExportOptions

    .DestinationOptions = crDiskFileDestinationOptions

    .ExportDestinationType = ExportDestinationType.DiskFile

    .ExportFormatType = ExportFormatType.PortableDocFormat

    End With

    crReportDocument.Export()

    'escrevendo o pdf para o browser do cliente

    Response.ClearContent()

    Response.ClearHeaders()

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf")

    Response.WriteFile(strPDFTmp)

    Response.Flush()

    Response.Close()

    'removendo o pdf do servidor

    System.IO.File.Delete(strPDFTmp)

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oDataset.Dispose()

    oConn = Nothing

    oDataset = Nothing

    End Try

    End Sub

     

     

    Observações:

          - Adicione um diretório tmp no projeto (diretório temporário utilizado para exportar o relatório para PDF)

     

          - No Dataset (utilizado para fazer o designer do relatório, eu tenho 2 DataTables  (Product e  ProductListPriceHistory) e por isso na hora de definir os dados do relatório (datasource), informei os mesmos nomes (esse detalhe é importante)

     

    Espero ter ajudado!

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quarta-feira, 24 de setembro de 2008 13:33
    Moderador
  • Até que enfiiiimmm!!!!!!!!!!!!!!!

     

    era exatamente isso que eu precisava.

    valeu mesmo cara, nossa, agora está perfeito...

     

    muito mais fácil essa maneira..

     

    Parabéns pelo conhecimento que vc tem sobre relatórios e mais uma vez Obrigado!!

     

    até mais

    Smile

     

    quarta-feira, 24 de setembro de 2008 14:05
  • Ufa! :-)

     

    Conseguimos ! Fico feliz por ter ajudado!  Agora com um Fórum exclusivo para relatórios vai ficar mais fácil ajudar a comunidade MSDN Brasil

     

    Precisando é só postar!

     

    Além disso, ainda precisa ajuda no gráfico?

     

    neste post:

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3894732&SiteID=21

     

    Caso ainda precise, poste no próprio link que vamos para a próxima missão!

     

    Valeu!

    quarta-feira, 24 de setembro de 2008 14:29
    Moderador
  • É, aleluia, hehehe...

     

    blza pode deixar qualquer coisa comunico Smile

     

    em relação ao gráfico, por enquanto não precisa, achei um componente, tal de Dundas Chart. e até aqui estou me dando bem com ele, mas caso não der certo, eu posto nesse topico que eu criei sobre o gráfico...

     

    Valeu meu brother.

     

    abraços!!!

     

    quarta-feira, 24 de setembro de 2008 16:47
  • olá. pus o site no servidor com as novas mudanças dos relatórios e retorno esse erro:

     

    Could not find a part of the path 'diretorio do site\.PDF'

     

     

    alguma ideia?

     

    vlw

    segunda-feira, 29 de setembro de 2008 11:41
  • giovanni,

     

    Já respondi no link abaixo:

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3930123&SiteID=21

     

    Se ainda precisar de ajuda poste no link informado.

    Valeu.

     

     

    segunda-feira, 29 de setembro de 2008 12:06
    Moderador
  • putz foi mal.

    esqueci do topico que criei

    hehe

     

    desculpa ai..

     

     

    segunda-feira, 29 de setembro de 2008 13:32
  • só outra dúvida...

    nessa maneira que consegui exportar direto pra pdf, nao consigo voltar à página anterior.. quando estou com o pdf aberto...

     

    ;/

     

    segunda-feira, 29 de setembro de 2008 14:03