Olá Marko,
O CR só aceita acesso de 64 bits através de ODBC ou OLE DB, JET ou ACE não são compatíveis.
Além disso, para obter o driver de 64 bits, você precisa instalar o cliente de 64 bits que pode ser baixado da Microsoft.
A Microsoft não permite ter instalados na MESMA PC os drivers de acesso ODBC/OLE DB de 32 e 64 bits.
Depois de configurar isso, funciona assim:
// Criar uma nova tabela de banco de dados para substituir a tabela atual dos relatórios.
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();
// Obter a coleção de tabelas de banco de dados para o seu relatório
CrystalDecisions.ReportAppServer.DataDefModel.Tables boTables;
boTables = rptClientDoc.DatabaseController.Database.Tables;
// Obter a informação de conexão antiga
oldConnInfos = rptClientDoc.DatabaseController.GetConnectionInfos(null);
boTable.ConnectionInfo = boConnectionInfo;
oldConnInfo = oldConnInfos[0];
# region Acesso 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("ERRO: " + ex.Message);
//return;
}
difference = DateTime.Now.Subtract(dtStart);
//rptTable.Location = rptTable.Name;
btnSQLStatement.Text += /*rptTable.Name.ToString() +*/ " Estabelecido em " + difference.Minutes.ToString() + ":" + difference.Seconds.ToString() + ":" + difference.Milliseconds.ToString() + "\n";
}
}
catch (Exception ex)
{
MessageBox.Show("ERRO: " + ex.Message);
//return;
}
// verificar sub-relatórios
...
Tenha em mente que você precisa usar RAS para obter a informação de conexão antiga.
Don