Hola Marko,
CR solo admite el acceso de 64 bits mediante ODBC u OLE DB, JET o ACE no son compatibles.
Además, para obtener el controlador de 64 bits, debes instalar el cliente de 64 bits que puedes descargar de Microsoft.
MS no permite tener instalados en la MISMA PC los controladores de acceso ODBC/OLE DB de 32 y 64 bits.
Una vez que hayas configurado esto, funciona así:
//Crear una nueva tabla de base de datos para reemplazar la tabla actual de los informes.
CrystalDecisions.ReportAppServer.DataDefModel.Table boTable = new CrystalDecisions.ReportAppServer.DataDefModel.Table();
CrystalDecisions.ReportAppServer.DataDefModel.Table subboTable = new CrystalDecisions.ReportAppServer.DataDefModel.Table();
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo newConnInfo = new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo oldConnInfo;
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfos oldConnInfos;
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo boConnectionInfo = new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();
//Obtener la colección de tablas de base de datos para tu informe
CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables;
boTables = rptClientDoc.DatabaseController.Database.Tables;
// Obtener la información de conexión antigua
oldConnInfos = rptClientDoc.DatabaseController.GetConnectionInfos(null);
boTable.ConnectionInfo = boConnectionInfo;
oldConnInfo = oldConnInfos[0];
# region Acceso DAO
if (oldConnInfo.Attributes["Database DLL"].ToString() == "crdb_dao.dll")
{
// Motor
CrystalDecisions.CrystalReports.Engine.ReportObjects crReportObjects;
CrystalDecisions.CrystalReports.Engine.SubreportObject crSubreportObject;
CrystalDecisions.CrystalReports.Engine.ReportDocument crSubreportDocument;
CrystalDecisions.CrystalReports.Engine.Database crDatabase;
CrystalDecisions.CrystalReports.Engine.Tables crTables;
CrystalDecisions.Shared.TableLogOnInfo tLogonInfo;
btnSQLStatement.Text = "";
try
{
foreach (CrystalDecisions.CrystalReports.Engine.Table rptTable in rpt.Database.Tables)
{
tLogonInfo = rptTable.LogOnInfo;
tLogonInfo.ConnectionInfo.ServerName = @"D:\Atest\482607\Latest\dsTimesheet.xml";
tLogonInfo.ConnectionInfo.DatabaseName = newDataFile; // D:\Atest\199019\ot_tmp88.mdb
tLogonInfo.ConnectionInfo.UserID = "";
tLogonInfo.ConnectionInfo.Password = "";
tLogonInfo.TableName = rptTable.Name;
dtStart = DateTime.Now;
try
{
rptTable.ApplyLogOnInfo(tLogonInfo);
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex.Message);
//return;
}
difference = DateTime.Now.Subtract(dtStart);
//rptTable.Location = rptTable.Name;
btnSQLStatement.Text += /*rptTable.Name.ToString() +*/ " Establecido en " + difference.Minutes.ToString() + ":" + difference.Seconds.ToString() + ":" + difference.Milliseconds.ToString() + "\n";
}
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex.Message);
//return;
}
// verificar subinformes
...
Ten en cuenta que necesitas usar RAS para obtener la información de conexión antigua.
Don