¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo usar un DSN de archivo en tiempo de ejecución con Crystal Reports

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

Hola chicos,

Mi problema es el siguiente.

He desarrollado un programa en C# .NET para cargar y ver Crystal Reports.

Una empresa tiene algunos informes con información de la base de datos almacenada en ellos. Pero lamentablemente, no todos los informes tienen toda la información requerida almacenada, por lo que no pueden conectarse automáticamente a una base de datos.

Por lo tanto, mi programa ofrece la opción de ingresar información odbc y conectarse durante el tiempo de ejecución.

Esto se ve así:


crRep.DataSourceConnections[0].SetConnection(nombreorigendatos, "", usuario, contraseña);

Esto funciona cuando un usuario tiene la conexión odbc con el nombre de origen de datos especificado como un perfil odbc que se puede acceder a través de Panel de control de Windows -> Herramientas administrativas -> Orígenes de datos (ODBC).

Sin embargo, el problema es que la empresa tiene usuarios itinerantes que deberían poder iniciar sesión en cualquier lugar y usar el programa en cualquier lugar.

Para solucionar este problema, pensé en usar algún tipo de DSN de archivo, ponerlo en el directorio con mi programa y de alguna manera llamarlo dentro de mi programa.

Intenté:


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

Esto solo funcionó cuando había un perfil odbc con un nombre de origen de datos igual al especificado en el DSN de archivo.

El problema sigue siendo:

¿Cómo puedo usar un DSN de archivo o posiblemente una cadena de conexión en tiempo de ejecución con Crystal Reports?

Saludos cordiales,

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...

+¿Esto significa que primero debo leer toda la base de datos (o al menos las tablas que utiliza el informe) en el conjunto de datos y vincular ese conjunto de datos al informe? ¿No es esto un poco demasiado intensivo cuando tienes tablas con un montón de filas como algunas de las empresas tienen?+

- Podría ser. Esto depende de tu situación, aunque los conjuntos de datos son una opción popular, por lo que puede que no sea tan malo como parece a primera vista. (Haz una búsqueda en los foros sobre conjuntos de datos y encontrarás no menos de 49 consultas originales sobre conjuntos de datos en los últimos 90 días. Y esto no incluye consultas donde yo / nosotros sugerimos esto como una opción)

Además, editar los informes no es una opción. Solo tengo que lidiar con los informes tal como los han hecho los empleados menos capacitados de la empresa.

- Creo que hay un malentendido aquí. No quise dar a entender que tienes que rehacer todos tus informes. La sugerencia se hizo para que puedas ver qué propiedades necesitan configurarse en tiempo de ejecución.

Una vez que tengas un informe de prueba, ya sea de un DSN del sistema de archivos o una cadena de conexión, puedes usar el siguiente código para obtener las propiedades de conexión asociadas con el informe:

Podemos obtener las propiedades de conexión asociadas con el informe usando el siguiente código en .NET. El mismo proceso podría usarse para determinar las propiedades de conexión que deben configurarse si deseas usar una cadena de conexión.

OK, al pegar el código en este mensaje se eliminan todos los espacios, así que intentaré poner el código en el próximo mensaje. Si eso también elimina los espacios, tendrás que analizar el código. Mis disculpas por eso.

Alternativamente, podrías usar RAS como se describe aquí:

https://wiki.sdn.sap.com/wiki/display/BOBJ/Report Aplicación Servidor Base de datos Conectividad

Ludek

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

Estimado Ludek,

¿Significa esto que primero debo leer toda la base de datos (o al menos las tablas que utiliza el informe) en el conjunto de datos y vincular ese conjunto de datos al informe?

¿No es esto un poco demasiado intensivo cuando tienes tablas con un sinfín de filas como algunas empresas tienen?

Seguramente, dado que los informes filtran los datos, debe haber una forma de proporcionar esto.

Además, editar los informes no es una opción. Simplemente tengo que lidiar con los informes tal como los han hecho los empleados menos capacitados de la empresa.

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

Creo que la forma más sencilla de solucionar esto es crear un conjunto de datos y pasarlo al informe. Ahora no tienes que preocuparte de que el informe vea ningún DSN en absoluto. Y presumiblemente, como conoces el DSN, deberías poder crear el conjunto de datos a partir de él. En cuanto a Crystal Reports y pasar el conjunto de datos a él, deberías usar un código como este:

explícitamente

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

implícitamente

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

Si prefieres seguir la ruta del DSN, crea un informe simple utilizando el archivo DSN. Luego ve al menú de Base de datos y selecciona "Establecer ubicación de origen de datos". Expande el nodo Propiedades y verifica las propiedades establecidas para este informe. Estas mismas propiedades deberán establecerse en tiempo de ejecución.

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?