¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como usar um DSN de arquivo em tempo de execução com Crystal Reports

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 0 Vistas
0
Cargando...

Olá pessoal,

Meu problema é o seguinte.

Desenvolvi um programa em C# .NET para carregar e visualizar Crystal Reports.

Uma empresa possui alguns relatórios com informações do banco de dados armazenadas neles. No entanto, infelizmente, nem todos os relatórios têm todas as informações necessárias armazenadas, então não podem se conectar automaticamente a um banco de dados.

Portanto, meu programa oferece a opção de inserir informações odbc e se conectar durante a execução.

Isso se parece com isso:


crRep.DataSourceConnections[0].SetConnection(nomeorigendados, "", usuário, senha);

Isso funciona quando um usuário possui a conexão odbc com o nome de origem de dados especificado como um perfil odbc que pode ser acessado através do Painel de Controle do Windows -> Ferramentas Administrativas -> Fontes de Dados (ODBC).

No entanto, o problema é que a empresa possui usuários móveis que devem poder fazer login em qualquer lugar e usar o programa em qualquer lugar.

Para resolver esse problema, pensei em usar algum tipo de DSN de arquivo, colocá-lo no diretório com meu programa e de alguma forma chamá-lo dentro do meu programa.

Tentei:


crRep.DataSourceConnections[0].SetConnection("", localarquivodsn, false);

Isso só funcionou quando havia um perfil odbc com um nome de origem de dados igual ao especificado no DSN de arquivo.

O problema continua sendo:

Como posso usar um DSN de arquivo ou possivelmente uma cadeia de conexão em tempo de execução com Crystal Reports?

Atenciosamente,

Dave

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Dim msg As String

Dim Report As New ReportDocument

Report.Load(Application.StartupPath & "\CrystalReport2.rpt")

Dim ta As Table

Dim li As TableLogOnInfo

Dim ci As ConnectionInfo

Dim i As Integer

msg = ""

For Each ta In Report.Database.Tables

li = ta.LogOnInfo

ci = li.ConnectionInfo

For i = 0 To ci.Attributes.Collection.Count - 1

Dim j As Integer

Dim nvs2 As NameValuePairs2

nvs2 = CType(CType(ci.Attributes.Collection(i), NameValuePair2).Value, CrystalDecisions.Shared.DbConnectionAttributes).Collection

For j = 0 To nvs2.Count - 1

msg = msg & "DCA Attribute: " & CType(nvs2(j), CrystalDecisions.Shared.NameValuePair2).Name & " - "

msg = msg & CType(nvs2(j), CrystalDecisions.Shared.NameValuePair2).Value & Environment.NewLine

Next

msg = msg & Environment.NewLine

Else

msg = msg & CType(ci.Attributes.Collection(i), NameValuePair2).Name & " - "

msg = msg & CType(ci.Attributes.Collection(i), NameValuePair2).Value & Environment.NewLine

End If

Next

Next

MessageBox.Show(msg)

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

+øIsso significa que eu devo primeiro ler todo o banco de dados (ou pelo menos as tabelas usadas no relatório) no conjunto de dados e vincular esse conjunto de dados ao relatório? Não é um pouco intenso quando você tem tabelas com muitas linhas, como algumas empresas têm?+

- Pode ser. Isso depende da sua situação, embora os conjuntos de dados sejam uma opção popular, então pode não ser tão ruim quanto parece à primeira vista. (Faça uma pesquisa nos fóruns sobre conjuntos de dados e encontrará não menos de 49 consultas originais sobre conjuntos de dados nos últimos 90 dias. E isso não inclui consultas onde eu/nós sugerimos isso como uma opção)

Além disso, editar os relatórios não é uma opção. Eu só tenho que lidar com os relatórios como foram feitos pelos funcionários menos capacitados da empresa.

- Acho que há um mal-entendido aqui. Não quis dizer que você tem que refazer todos os seus relatórios. A sugestão foi feita para que você possa ver quais propriedades precisam ser configuradas em tempo de execução.

Uma vez que você tenha um relatório de teste, seja de um DSN do sistema de arquivos ou uma string de conexão, você pode usar o seguinte código para obter as propriedades de conexão associadas ao relatório:

Podemos obter as propriedades de conexão associadas ao relatório usando o seguinte código em .NET. O mesmo processo poderia ser usado para determinar as propriedades de conexão que precisam ser configuradas se você deseja usar uma string de conexão.

OK, ao colar o código nesta mensagem, todos os espaços são removidos, então tentarei colocar o código na próxima mensagem. Se isso também remover os espaços, você terá que analisar o código. Desculpe por isso.

Alternativamente, você pode usar RAS conforme descrito aqui:

https://wiki.sdn.sap.com/wiki/display/BOBJ/Report Aplicação Servidor Banco de dados Conectividade

Ludek

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Caro Ludek,

Isso significa que primeiro devo ler todo o banco de dados (ou pelo menos as tabelas utilizadas no relatório) no conjunto de dados e vincular esse conjunto de dados ao relatório?

Isso não é um pouco excessivo quando se tem tabelas com um número infinito de linhas, como algumas empresas têm?

Certamente, uma vez que os relatórios filtram os dados, deve haver uma maneira de fornecer isso.

Além disso, editar os relatórios não é uma opção. Eu simplesmente tenho que lidar com os relatórios conforme foram feitos pelos funcionários menos qualificados da empresa.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Acredito que a forma mais simples de resolver isso é criar um conjunto de dados e passá-lo para o relatório. Agora você não precisa se preocupar com o relatório vendo nenhum DSN de forma alguma. E presumivelmente, como você conhece o DSN, deveria ser capaz de criar o conjunto de dados a partir dele. Quanto ao Crystal Reports e passar o conjunto de dados para ele, você deve usar um código como este:

explicitamente

crReportDocument.Database.Tables(0).SetDataSource(dataSet.Tables("NOME_DA_TABELA"))

implicitamente

crReportDocument.SetDataSource(dataSet) ou crReportDocument.SetDataSource(dataSet.Tables(0))

Se preferir seguir a rota do DSN, crie um relatório simples usando o arquivo DSN. Em seguida, vá para o menu Banco de dados e selecione "Definir localização da fonte de dados". Expanda o nó Propriedades e verifique as propriedades definidas para este relatório. Essas mesmas propriedades devem ser definidas em tempo de execução.

Ludek

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?