¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo integrar Microsoft SQL Server 2012 Express LocalDB con SAP Crystal Reports: Guía detallada

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

Hola,

Dispuesto a trasladar algunas bases de datos a Microsoft SQL Server 2012 (2014) Express LocalDB , he intentado mapear algunos informes en esa base de datos.

Utilizando OLE DB SQL Native Client (v11) y SAP CR RunTime SP10 (>SP9), aún tengo problemas al utilizar esta fuente de datos:

Después de dibujar algunos informes simples (estándar con 2-3 campos de la base de datos):

- Diseñador de VS:

+ al "verificar base de datos" o "obtener una vista previa" del informe, siempre se queja de tablas faltantes.

+ al intentar "remapear" tablas de un SQL Server 2012 Express LocalDB a otro, falla, quejándose de no encontrar recursos.

- Ejecutando la aplicación (.NET 4.0, 32 o 64 bits):

+ sin cambios en la configuración del informe: CR Viewer se queja con múltiples códigos de error (17, ...) que no puede encontrar las tablas.

+ al intentar cambiar la base de datos configurada desde el informe: CR Viewer se queja con algunos códigos de error más.

=> ¿Microsoft SQL Server 2012 Express LocalDB es ahora oficialmente compatible con CR?

=> ¿Cambiar la configuración de origen de datos/base de datos durante la ejecución es ahora oficialmente compatible con CR?

¡Siéntase libre de proporcionar cualquier enlace / cómo hacerlo / documento técnico sobre cómo gestionar Microsoft SQL Server 2012 Express LocalDB con SAP CR!

Muchas gracias de antemano.

Saludos.

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

4 Respuestas

0
Cargando...

Hola JP,

El problema es que no especificas el MDF como los archivos de la base de datos:

ci.DatabaseName = builder.AttachDBFilename; // = D:\TEST\TEST.MDF

Solo especificas el Servidor y la información de inicio de sesión:

//recorrer todas las tablas y pasar la información de conexión
foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
{
mainSecureDB = rpt.Database.Tables[tableIndex].LogOnInfo.ConnectionInfo.IntegratedSecurity;
string mainTableName = crTable.Name.ToString();
tableIndex++;

//btrDataFile - Servidor
//btrSearchPath - Base de datos
//btrFileLocation - Nombre de usuario
//btrPassword - contraseña

//pasar los parámetros necesarios al objeto connectionInfo
//crConnectioninfo.ServerName = btrDataFile.Text.ToString();
crConnectioninfo.ServerName = "10.161.12.206a";
if (!mainSecureDB)
{
crConnectioninfo.UserID = "sa";
crConnectioninfo.Password = "Password";
crConnectioninfo.DatabaseName = "TEST";
}
else
{   // mostrar la información de conexión
crConnectioninfo.IntegratedSecurity = true;
crConnectioninfo.UserID = btrFileLocation.Text.ToString();
crConnectioninfo.Password = btrPassword.Text.ToString();
crConnectioninfo.DatabaseName = btrSearchPath.Text.ToString();
}

crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectioninfo;
crTable.ApplyLogOnInfo(crTableLogOnInfo);

// SQL Server
crTable.Location = crDatabase + ".dbo." + "orders"; // crTable.Location;
...

Don

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

Creo - olvida eso - sé que mientras esto no funcione en el diseñador, estás perdiendo tu tiempo intentando hacerlo funcionar desde el código. Por lo tanto, mi sugerencia es sobre el diseñador independiente. Por ejemplo, necesitamos resolver esto primero:


- VS diseñador:
 + cuando "verificar la base de datos" o "obtener una vista previa" del informe, siempre se queja de tablas faltantes.
 + cuando intentas re-mapear tablas de una SQL Server 2012 Express LocalDB a otra, falla, quejándose de no encontrar recursos.

y es bastante posible que el diseñador independiente sea de gran ayuda.

- Ludek

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

Hola y gracias por tu tiempo.

Como se solicitó, a continuación encontrarás información adicional solicitada (códigos para cada paso que produce error).

- Sí, utilizando (OLE DB) SQL Native Client v11

- Diseñador de VS:

+ al "verificar base de datos" o "obtener una vista previa" del informe: "Eliminar tabla" "Tabla de base de datos "xxx" no encontrada. Continuar eliminando esta tabla del informe" (luego muestra los resultados del informe ...)

+ al intentar "re-mapear" tablas de un SQL Server 2012 Express LocalDB a otro: "No se puede abrir o acceder al objeto de datos" (traducido de "Impossible d'ouvrir l'objet de données ou d'y accéder") y luego "Error de conector de base de datos desconocido" (traducido de "Erreur Database Connector inconnue"). Estos dos mensajes de error se repiten para cada tabla contenida en el informe

- Aplicación en ejecución (.NET 4.0, 32 o 64 bits)

Hecho con las librerías de SAP CR de VS2013 en modo Debug del proyecto de VS.

Tengo el mismo problema al ejecutar en otra computadora que solo tiene el tiempo de ejecución SP10.

Ambos pueden ejecutar consultas desde c# en la base de datos.

+ sin ningún cambio en la configuración del informe: "Tabla "xxx" no encontrada. Error en el archivo xxxx{53312761-372A-42CB-882B-D9C4A1695350}.rpt. No se puede encontrar la tabla."

+ al intentar cambiar la base de datos configurada desde el informe: "No se puede iniciar la conexión. Detalles: [Código del proveedor de base de datos: 18456], No se puede iniciar la conexión. Detalles: [Código del proveedor de base de datos: 4060], No se puede iniciar la conexión xxxx{4D826462-CD30-44FD-8E2B-629F69F60596}.rpt. Detalles: [Código del proveedor de base de datos: 18456]"

=> 18456 se refiere a un inicio de sesión incorrecto. Actualmente uso la conexión de seguridad integrada, reporto los parámetros de sqldatabase de .net desde la aplicación existente/conectada ConnectionString.

>>> Para referencia, aquí está lo que se hace en el código para cambiar la base de datos configurada:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GpmiDb.ConnectionString);

CrystalDecisions.Shared.ConnectionInfo ci = new CrystalDecisions.Shared.ConnectionInfo();
ci.ServerName = builder.DataSource; // = (LocalDB)\v11.0
ci.DatabaseName = builder.AttachDBFilename; // = D:\TEST\TEST.MDF
ci.IntegratedSecurity = builder.IntegratedSecurity; // = true
ci.UserID = builder.UserID; // = ""
ci.Password = builder.Password; // = ""
ci.Type = ConnectionInfoType.SQL; // También he intentado con "CRQE" (lo que se usa dentro del informe antes de la modificación) pero tengo el mismo problema.

foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in rd.Database.Tables)
{
TableLogOnInfo logon = tbl.LogOnInfo;
logon.ConnectionInfo = ci;
tbl.ApplyLogOnInfo(logon);
// tbl.Location = tbl.Location;
}

Sections sections = rd.ReportDefinition.Sections;
foreach (Section section in sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
SubreportObject subreportObject = (SubreportObject)reportObject;
ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
SetConnection(subReportDocument, ci);
}
}
}

<<<

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

Hola JP,

¿Cuál es el primer código de error que recibes?

Estos errores se informan directamente desde el cliente/DB de SQL Server. Por lo tanto, se necesitan detalles del error para determinar el problema.

Para conectarte, debes usar la dll del cliente nativo de MS SQL 11.

Don

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?