none
Conexão RRS feed

  • Pergunta

  • Se eu criar uma conexão usando o wizard do VS.Net 2005 para me conectar com um Banco Access o caminho para acessar o Banco focará fixo se eu mudar de maquina terie que refazer a conexão e depois qdo o sistema estiver pronto e eu instalar nas maquinas dos clientes o caminho não será o mesmo ... como faço para configurar isso há uma maneira ou não

    Outro caso eu crio um DataSet via wizard e uso uma conexão tbm seria o mesmo caso de reconfiguração de caminho

    Valeuuu

    quinta-feira, 1 de março de 2007 00:19

Respostas

  • Quando você cria a conexão pelo Wizard, o Wizard já cria o código de leitura do arquivo de configuração. No arquivo designer do DataSet haverá uma linha mais ou menos assim para fazer a leitura:

    this._connection.ConnectionString = global::WindowsApplication1.Properties.Settings.Default.MeuBancoConnectionString;

    No caso do Access, na segunda tela do Wizard você é perguntado se quer copiar o banco para o diretório do aplicativo etc., e responde *não*. Na tela seguinte você é perguntado qual é o nome do atributo para sua string de conexão a ser armazenado no arquivo de configuração, no exemplo acima "MeuBancoConnectionString" (o atributo completo é "WindowsApplication1.Properties.Settings.Default.MeuBancoConnectionString").

    No arquivo de configuração haverá a entrada para a string. O conteúdo do arquivo será algo assim:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="WindowsApplication1.Properties.Settings.MeuBancoConnectionString"
                connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MeuBanco.mdb"
                providerName="System.Data.OleDb" />
        </connectionStrings>
    </configuration>

    O caminho do arquivo está no atributo "Data Source" da string de conexão, no exemplo "C:\MeuBanco.mdb". É esse valor que você deve alterar para conter a localização real do banco na máquina.

    quinta-feira, 1 de março de 2007 13:25
  • Você deve passar uma fonte de dados para o relatório.

    Por exemplo, suponha que você tenha criado um relatório, e para exemplo suponha que tenha sido criado usando a tabela Clientes do banco de exemplo Northwind que vem com o Access (tabela Customers na versão em inglês), assim você pode reproduzir aí se quiser. No form em que você tem  o ReportView modifique o construtor para receber um DataSet ou DataTable para os dados e uma uma variável string para receber o caminho em disco do arquivo do relatório; também declare duas variáveis no escopo do form para referenciar os objetos que você recebeu no construtor. Algo assim:

    private DataSet m_ds;
    private string m_arquivo;
    public SeuForm(DataSet ds, string arquivo)
    {
        InitializeComponent();

        m_ds = ds;
        m_arquivo = arquivo;
    }

    No evento Load do form, carregue o relatório passando a fonte de dados e o caminho para o relatório. Algo assim:

    Microsoft.Reporting.WinForms.ReportDataSource datasource = new Microsoft.Reporting.WinForms.ReportDataSource("NorthwindDataSet_Clientes", m_ds.Tables["Clientes"]);
    reportViewer1.LocalReport.DataSources.Add(datasource);
    reportViewer1.LocalReport.ReportPath = m_arquivo; 
    reportViewer1.RefreshReport();

    "NorthwindDataSet_Clientes" é o nome do DataSet que o Visual Studio cria quando se inclui a tabela Clientes do banco Northwind usando a janela "Data Sources". Se o nome da tabela fosse "Customers" (como na versão em inglês) o nome seria "NorthwindDataSet_Customers" e assim por diante. Você precisa dizer que o DataTable que você está usando como fonte de dados é para esse DataSet, como demonstarado acima, já que pode haver diversos DataSets por relatório. Esse dado também deve ser passado por parâmetro, só o incluí diretamente aqui para clareza no exemplo.

    No form de onde você chama o form de exibição de relatório, você preencheria o DataSet e instanciaria o form de exibição passando os parâmetros. Algo assim:

    OleDbConnection cnn = new OleDbConnection(<string de conexão>);

    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Clientes", cnn);

    DataSet ds = new DataSet();

    da.Fill(ds, "Clientes");
    // Form de exibição.
    Form2 f = new Form2(ds, <arquivo>);
    f.Show();

    Claro, se voce já tem uma tabela no seu aplicativo daquelas que são geradas pelo wizard, você pode passá-la também ao invés de fazer uma query como acima.



     

    quinta-feira, 1 de março de 2007 23:52
  •  Junior Martins wrote:

    Mais uma vez valeu ... agora ja estou com bem menos problemas rsss valeu mesmo

    Só mais uma coisa qdo se gera o DataSet para o relatorio com mais que uma tabela eu somente aponto as tabelas para o DataSet e na hora de criar o relatorio eu adiciono os campos do DataSource arrasto e solto mas os campos com valores numericos tipo SINGLE aparecem assim no relatorio
    =Sum(Fields!Jan.Value, "DsRelContagemTempo_ContagemTempo") e qdo eu rodo o relatorio na hora de visualizar ele mostra um simbolo de erro no lugar do campo #ERRO vc teria ideia do que da isso e para as tabelas do relatorio eu criar alguma query especifica por estar usando duas tabelas ou nem precisa ...

    Angus valeu mesmo pela ajuda pois to apanhando um monte com esses relatórios mas devagar vai saindo valeu mesmo

    O objeto Table tem que se referir a uma tabela específica já que não teria sentido exibir duas tabelas diferentes, que além do mais poderiam ter um número diferente de registros, no campo details. A tabela a que um determinado Table se refere é setada na propriedade DataSetName. Qualquer campo que venha de fora daquela tabela tem que ser agregado e no caso de um campo numérico a função SUM() é usada. Se fosse um campo string seria a função FIRST() etc. Selecione a tabela correta para o objeto Table.

     

    sexta-feira, 2 de março de 2007 20:06
  • Para trabalhar com grupos no ReportViewer basta inserir o componente Table. Na propriedade do mesmo (botão direito>properties), vai até a aba Groups e botão Add... .
    segunda-feira, 25 de fevereiro de 2008 01:17

Todas as Respostas

  • A string de conexão estará no arquivo de configuração do aplicativo, é só vc alterar lá para o caminho do banco nas máquinas dos seu clientes.
    quinta-feira, 1 de março de 2007 00:36
  • Então deixa eu ver se eu entendi ... eu tenho um arquivo app.config mas neste eu tenho que ter minha string de conexão completa nele ou somente o caminho do Banco de Dados ??? exemplo Provider .....

    Mas qdo eu crio uma conexão via wizard eu não tenho como pegar o caminho do arquivo de configuração eu pego o caminho por exemplo c:\meu_projeto\Db\banco.mdb por exemplo e vc me disse que qdo eu instalar em outra maquina eu mudo a conexão no arquivo e o programa ja busca a base sem problemas ...

    desculpa a pergunta novamente mas é que eu não entendi direito ... agradeço desde ja sua atenção

    quinta-feira, 1 de março de 2007 12:07
  • Quando você cria a conexão pelo Wizard, o Wizard já cria o código de leitura do arquivo de configuração. No arquivo designer do DataSet haverá uma linha mais ou menos assim para fazer a leitura:

    this._connection.ConnectionString = global::WindowsApplication1.Properties.Settings.Default.MeuBancoConnectionString;

    No caso do Access, na segunda tela do Wizard você é perguntado se quer copiar o banco para o diretório do aplicativo etc., e responde *não*. Na tela seguinte você é perguntado qual é o nome do atributo para sua string de conexão a ser armazenado no arquivo de configuração, no exemplo acima "MeuBancoConnectionString" (o atributo completo é "WindowsApplication1.Properties.Settings.Default.MeuBancoConnectionString").

    No arquivo de configuração haverá a entrada para a string. O conteúdo do arquivo será algo assim:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="WindowsApplication1.Properties.Settings.MeuBancoConnectionString"
                connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MeuBanco.mdb"
                providerName="System.Data.OleDb" />
        </connectionStrings>
    </configuration>

    O caminho do arquivo está no atributo "Data Source" da string de conexão, no exemplo "C:\MeuBanco.mdb". É esse valor que você deve alterar para conter a localização real do banco na máquina.

    quinta-feira, 1 de março de 2007 13:25
  • Opa valeu mesmo viu ... me ajudou bem agora eu entendi certinho valeu mesmo

    Só mais uma coisa vc manja de ReportViewer ??? eu to com problemas com esse carinha rss eu tenho um form com um compeonente ReportViewer e os meus relatorios.rdlc eu quero abrir todos eles nesse form de qualquer form que eu chamar um relatorio eu vou chamar esse form que tem o reportviewer e abrir o relatorio dentro vc teria alguma dica sobre como fazer isso ... ja tentei de tudo e não consegui sempre da u erro de que o DataSet não foi encontrado e aparentemente esta tudo certo

    Valeu mais uma vez

    quinta-feira, 1 de março de 2007 15:49
  • Você deve passar uma fonte de dados para o relatório.

    Por exemplo, suponha que você tenha criado um relatório, e para exemplo suponha que tenha sido criado usando a tabela Clientes do banco de exemplo Northwind que vem com o Access (tabela Customers na versão em inglês), assim você pode reproduzir aí se quiser. No form em que você tem  o ReportView modifique o construtor para receber um DataSet ou DataTable para os dados e uma uma variável string para receber o caminho em disco do arquivo do relatório; também declare duas variáveis no escopo do form para referenciar os objetos que você recebeu no construtor. Algo assim:

    private DataSet m_ds;
    private string m_arquivo;
    public SeuForm(DataSet ds, string arquivo)
    {
        InitializeComponent();

        m_ds = ds;
        m_arquivo = arquivo;
    }

    No evento Load do form, carregue o relatório passando a fonte de dados e o caminho para o relatório. Algo assim:

    Microsoft.Reporting.WinForms.ReportDataSource datasource = new Microsoft.Reporting.WinForms.ReportDataSource("NorthwindDataSet_Clientes", m_ds.Tables["Clientes"]);
    reportViewer1.LocalReport.DataSources.Add(datasource);
    reportViewer1.LocalReport.ReportPath = m_arquivo; 
    reportViewer1.RefreshReport();

    "NorthwindDataSet_Clientes" é o nome do DataSet que o Visual Studio cria quando se inclui a tabela Clientes do banco Northwind usando a janela "Data Sources". Se o nome da tabela fosse "Customers" (como na versão em inglês) o nome seria "NorthwindDataSet_Customers" e assim por diante. Você precisa dizer que o DataTable que você está usando como fonte de dados é para esse DataSet, como demonstarado acima, já que pode haver diversos DataSets por relatório. Esse dado também deve ser passado por parâmetro, só o incluí diretamente aqui para clareza no exemplo.

    No form de onde você chama o form de exibição de relatório, você preencheria o DataSet e instanciaria o form de exibição passando os parâmetros. Algo assim:

    OleDbConnection cnn = new OleDbConnection(<string de conexão>);

    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Clientes", cnn);

    DataSet ds = new DataSet();

    da.Fill(ds, "Clientes");
    // Form de exibição.
    Form2 f = new Form2(ds, <arquivo>);
    f.Show();

    Claro, se voce já tem uma tabela no seu aplicativo daquelas que são geradas pelo wizard, você pode passá-la também ao invés de fazer uma query como acima.



     

    quinta-feira, 1 de março de 2007 23:52
  • Angus ... valeu mesmo pela resposta me ajudou muito ... por isso utilizo esse forum é excelente valeu mesmo pela ajuda se precisar de algo ... esamos ai tbm
    sexta-feira, 2 de março de 2007 12:34
  • Sem querer abusar rsssss mas é o seguinte meus dados a serem exibidos no relatorio tem que obedecer um filtro um Select <campos> From Tabela Inner Join .... Where CodSubs = And Ano = e no report há uma opção de parametros vc tem algum exemplo ou dica sobre como passar esses parametros para o relatorio pois qdo chamo o relatorio do meu form o relatorio teria que vir com os dados com esse filtro ...

    Valeu novamente .... abraços

    sexta-feira, 2 de março de 2007 13:15
  • Os parâmetros são setados pelo método SetParameters() que passa um array de objetos ReportParameter.

    Você pode passar esse array no construtor, junto com os parâmteros do exemplo anterior, ou criar uma propriedade no form de exibição para recebê-los.

    Um exemplo criando-se uma propriedade. No form em que você exibe o relatório, declare esta propriedade:

    private Microsoft.Reporting.WinForms.ReportParameter[] m_parameters;
    public Microsoft.Reporting.WinForms.ReportParameter[] Parameters
    {
        get { return m_parameters; }
        set { m_parameters = value; }
    }

    No form em que você chama o form de exibição você passsaria os parâmetros à propriedade Parameters do form de exibição, assim:

    SeuForm f = new SeuForm(ds, <arquivo de relatório>);
    // Parâmetros.
    Microsoft.Reporting.WinForms.ReportParameter[] param = new Microsoft.Reporting.WinForms.ReportParameter[2];
    param[0] = new Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_0", "UmValorQualquer", false);
    param[1] = new Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_1", DateTime.Now.ToString(), false);
    // Passa parâmetros.
    f.Parameters = param;
    // Exibe form.
    f.Show();

    O exemplo acima passa dois parâmetros. Os nomes dos parâmetros são os criados por padrão pelo designer do relatório. Você evidentemente deve trocar pelos nomes reais.

    Finalmente, no form de exibição, onde você seta os valores para o relatório (evento Load no exemplo anterior), você criaria uma condição para verificar se a variável da propriedade que recebe os parâmetros é nula ou contém algum valor; se contiver algum valor, você passa os parãmetros ao relatório, do contrário, ignora:

    Microsoft.Reporting.WinForms.ReportDataSource datasource = new Microsoft.Reporting.WinForms.ReportDataSource("NorthwindDataSet_Clientes", m_ds.Tables["Clientes"]);
    reportViewer1.LocalReport.DataSources.Add(datasource);
    reportViewer1.LocalReport.ReportPath = m_arquivo;
    // Parâmetros
    if (m_parameters != null)
        reportViewer1.LocalReport.SetParameters(m_parameters);
    reportViewer1.RefreshReport();

    É isso.

    sexta-feira, 2 de março de 2007 16:02
  • Mais uma vez valeu ... agora ja estou com bem menos problemas rsss valeu mesmo

    Só mais uma coisa qdo se gera o DataSet para o relatorio com mais que uma tabela eu somente aponto as tabelas para o DataSet e na hora de criar o relatorio eu adiciono os campos do DataSource arrasto e solto mas os campos com valores numericos tipo SINGLE aparecem assim no relatorio
    =Sum(Fields!Jan.Value, "DsRelContagemTempo_ContagemTempo") e qdo eu rodo o relatorio na hora de visualizar ele mostra um simbolo de erro no lugar do campo #ERRO vc teria ideia do que da isso e para as tabelas do relatorio eu criar alguma query especifica por estar usando duas tabelas ou nem precisa ...

    Angus valeu mesmo pela ajuda pois to apanhando um monte com esses relatórios mas devagar vai saindo valeu mesmo

    sexta-feira, 2 de março de 2007 17:05
  •  Junior Martins wrote:

    Mais uma vez valeu ... agora ja estou com bem menos problemas rsss valeu mesmo

    Só mais uma coisa qdo se gera o DataSet para o relatorio com mais que uma tabela eu somente aponto as tabelas para o DataSet e na hora de criar o relatorio eu adiciono os campos do DataSource arrasto e solto mas os campos com valores numericos tipo SINGLE aparecem assim no relatorio
    =Sum(Fields!Jan.Value, "DsRelContagemTempo_ContagemTempo") e qdo eu rodo o relatorio na hora de visualizar ele mostra um simbolo de erro no lugar do campo #ERRO vc teria ideia do que da isso e para as tabelas do relatorio eu criar alguma query especifica por estar usando duas tabelas ou nem precisa ...

    Angus valeu mesmo pela ajuda pois to apanhando um monte com esses relatórios mas devagar vai saindo valeu mesmo

    O objeto Table tem que se referir a uma tabela específica já que não teria sentido exibir duas tabelas diferentes, que além do mais poderiam ter um número diferente de registros, no campo details. A tabela a que um determinado Table se refere é setada na propriedade DataSetName. Qualquer campo que venha de fora daquela tabela tem que ser agregado e no caso de um campo numérico a função SUM() é usada. Se fosse um campo string seria a função FIRST() etc. Selecione a tabela correta para o objeto Table.

     

    sexta-feira, 2 de março de 2007 20:06
  • Valeu mais uma vez agora ja estou me acertando com os reports rssss valeu mesmo
    sexta-feira, 2 de março de 2007 20:13
  • Bom dia amigos,

    Acompanhei as respostas dessa thread e achei sensacional.
    Uma dúvida.
    Qual a diferença de se passar os parâmetros para o select ou para os parâmetros do relatório?
    Ex.:
    1º Seguir os passos acima e inserir reportViewer1.LocalReport.SetParameters(m_parameters); no relatório.
    2º Ou inserir no select WHERE campo1 = 10 and campo2 = 5.

    Penso que no segundo exemplo eu vou economizar evitando dados desnecessários. Por exemplo, se a minha tabela "Clientes" possuir milhares de registros, o 1º exemplo carregará todos os dados antes da execução do relatório enquanto o 2º trará apenas o que vou usar (Não sei se os dados são lidos na hora do
    da.Fill(ds, "Clientes");).



    domingo, 24 de fevereiro de 2008 10:58
  • Ola, então esse post realmente ficou interessante ale'm do mais me ajudou muito na epoca com a conexão e geração dos relatórios ... agora se se bem entendi é o seguinte

     

    Quanto ao reportViewer1.LocalReport.SetParameters(m_parameters); essa linnha de comando eu a utilizo para passar valores para o relatório por exemplo valores que são passados do Form para um determinado campo dentro do relatório e este campo esta ligado a um parametro.

     

    Agora para carregar os registros no relatório eu crio um DataTable via wizard do VS.Net com as colunas que eu utilizarei no relatorio e no meu form eu carrego esse DataTable com os dados que ja tenho em um DataSet carregado com o resultado de uma query ja devidamente construida somente com os dados necessários ou seja, seleciono somente os registros que preciso mesmo ... dai carrego esse DataTable com os dados e quando "chamo" meu relatório este é carregado com os dados do DataTable.

     

    Espero ter respondido ...

     

    Qualquer coisa estamos ai ... abraços

     

    domingo, 24 de fevereiro de 2008 15:57
  • Deixa ver se eu entendi... os parâmetros não filtram dados (são como as fórmulas no Crystal Reports). São simplesmente uma forma de comunicação entre a aplicação e o relatório.
    É isso mesmo?
    domingo, 24 de fevereiro de 2008 17:28
  • Isso mesmo os parametros são como no crystal reports ... bom pode até ser que tenham alguma outra funcionalidade mas pelo vi até hoje e usei sempre foi para passar valores da aplicação para o relatório

     

    Agora aproveitando o amigo saberia me dizer se da para fazer relatorios com grupos no ReportViewer ....

     

    Abraço

    domingo, 24 de fevereiro de 2008 21:15
  • Para trabalhar com grupos no ReportViewer basta inserir o componente Table. Na propriedade do mesmo (botão direito>properties), vai até a aba Groups e botão Add... .
    segunda-feira, 25 de fevereiro de 2008 01:17
  • Blza ... valeu vou dar uma olhada nisso.

    segunda-feira, 25 de fevereiro de 2008 11:46
  • Esse post foi ótimo.....

     

    aprendi RS aqui, até então não tinha trabalhado ainda....

     

    se alguém precisar de ajuda....

     

    estou a disposiçao

    quarta-feira, 19 de março de 2008 15:36
  • Cara até aqui foi tudo OK, mas agora num está mais funcionando olha o que acontece:

     

    Microsoft.Reporting.WinForms.LocalProcessingException was unhandled
      Message="An error occurred during local report processing."

     

    // Recebe os Parametros

    if (Parametros != null)

    DuplicatareportViewer.LocalReport.SetParameters(Parametros);

     

    Nessa linha da o erro...

     

    E como faço para recuperar CADA parâmetro DENTRO do RDCL

     

    tenho um txt Por exemplo dentro do relatório e quero que o "Report_Parameter_0" seja setado nesse text para ser exibido impresso etc...

     

     

    obrigado


    segunda-feira, 24 de março de 2008 18:55
  • Bom se vc ja criou seu parametro dentro do Report por exemplo um parametro chamado Titulo_Relatorio que este receberá o titulo do relatorio por um TextBox da tela faça o seguinte:

     

    // Cria a variavel para passagem de parametros

    List<ReportParameter> parameters = new List<ReportParameter>();

    // Primeiro parametro

    parameters.Add(new ReportParameter("pNomeDiretora", vNomeDiretora));

    // Segundo parametro

    parameters.Add(new ReportParameter("pCorpo", vCorpo));

    // Terceiro parametro

    parameters.Add(new ReportParameter("pImagem", vImagem));

    // Passagem dos parametros para o Report

    fReport.rptViewer.LocalReport.SetParameters(parameters);

    // Essa variavel fReort foi criada para chamar o Form com o ReportViewer e nesse momento passo o Titulo do Form pela //varaivel

    fReport.Text = "Declaração";

     

    Qualquer coisa estamos ai ... espero ter ajudado

     

    Abraço

     

    segunda-feira, 24 de março de 2008 23:23
  • Não consegui..... posso estar sendo burro mas rsrs seguinte tenho o seguinte código

     

    Tenho um form com um grid que carrego todas Notas que ainda não foram impressas....

    Futuramente os parâmetros serão os dados corretos mas por enquanto quero testar e ver funcionar....

     

    Botão de Imprimir

    private void Imprimirbutton_Click(object sender, EventArgs e)

    {

    //Chamo o meu FORM que tem o ReportView, passando o Path do .rdlc e o DataSet Preenchido já!

     

    DuplicataImprimir frmImpressaoDuplicata = new DuplicataImprimir(dsDuplicatas, @"C:\Documents and Settings\Cassio\Meus documentos\Visual Studio 2005\Projects\Corporativo\Logmark Corporativo\Financeiro Relatórios\Duplicatas.rdlc");

     

    // Parâmetros.

    List<ReportParameter> arParametros = new List<ReportParameter>();

    arParametros.Add(new ReportParameter("Teste", "BANANA"));

     

    // Passa os parâmetros.

    frmImpressaoDuplicata.Parametros = arParametros;

     

    // Exibe form do Relatório.

    frmImpressaoDuplicata.Show();

    }

     

    //Form com o REPORTVIEW

    Propriedade do Tipo lista para receber os parâmetros

    private List<ReportParameter> prParametros;

    public List<ReportParameter> Parametros

    {

    get { return prParametros; }

    set { prParametros = value; }

    }

    //Load do Form com o ReportView

    private void DuplicataImprimir_Load(object sender, EventArgs e)

    {

    ReportDataSource DataSource = new ReportDataSource("dsDuplicata", this.dsDuplicata.Tables["TB_DUPLICATA"]);

    this.DuplicatareportViewer.LocalReport.DataSources.Add(DataSource);

    this.DuplicatareportViewer.LocalReport.ReportPath = this.strPathRelatorio;

     

    // Recebe os Parâmetros

    if (Parametros != null)

    DuplicatareportViewer.LocalReport.SetParameters(this.Parametros); //Linha que dá o erro

     

    this.DuplicatareportViewer.RefreshReport();

    }

    terça-feira, 25 de março de 2008 12:36
  • E ai blza ... sofrendo um pouco rsss ... nossa eu tbm sofri ate com o ReportViewer rsss bom e creio que vou sofrer mais ainda rssss pois fiz coisas basicas ele só ...

     

    Bom é um pouco complicado assim saber ao certo o que pode estar dando erro mas no Form que tenho o ReportViewer que eu mando carregar meus .rdlc eu tenho o seguinte codigo

     

    // Qdo fecho o Form

    private void FrmReport_FormClosed(object sender, FormClosedEventArgs e)

    {

    this.Dispose();

    }

     

    // Evento Load

    private void FrmReport_Load(object sender, EventArgs e)

    {

    rptViewer.RefreshReport();

    }

     

    Bom eu uso somente este codigo no Form que tem o ReportViewer nada mais, eu vi que no seu tem um codigo com datasource e tudo mais mas esperimente inserir somente este codigo e ver no que da ... se vc inseriu nos parametros do relatorio os parametros e esta enviando via codigo os valores creio que dessa maneira não tenha problemas ...

     

    Qualquer coisa estamos ai pode ir postando

    Flwww

    Abraço

    quinta-feira, 27 de março de 2008 01:19
  • OK, vou tentar verificar aki e te falo.... obrigado cara valew mesmoo!!!

    quinta-feira, 27 de março de 2008 12:04