Почему Crystal Report Viewer всегда запрашивает данные для входа в базу данных Access в операционной системе WePOS?
Я написал отчет, используя Crystal Reports XI, связанный с базой данных Access здесь C:\MyData.mdb.
В отчете есть одно поле (упрощенное для этого примера) и никакие под-отчеты.
Я использовал средство просмотра отчетов форм и WPF Cyrtsal с помощью С#.NET 4.
Отчет успешно просматривается на моем компьютере разработки под управлением Windows XP и на других "сеансах", также работающих под управлением Windows XP.
Тем не менее, при запуске WePOS (своего рода сокращение Windows XP) в отчете "всегда" отображается диалоговое окно с запросом деталей входа в систему, то есть имя пользователя и пароль.
В этом диалоговом окне также показан правильный путь к C:\MyData.mdb.
Я провел много дней на этом, тестируя все возможное (я уверен, что все помнят такие моменты!).
Я использую этот код, чтобы убедиться, что база данных правильно связана с:
TableLogOnInfo logonInfo;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in report.Database.Tables)
{
logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo.ServerName = string.Empty;
logonInfo.ConnectionInfo.DatabaseName = "C:\MyData.mdb";
logonInfo.ConnectionInfo.UserID = string.Empty;
logonInfo.ConnectionInfo.Password = string.Empty;
table.ApplyLogOnInfo(logonInfo);
}
... и он работает на всех ПК с Windows XP, кроме тех, что есть в WePOS.
Я также играл с:
report.SetDatabaseLogon(string.Empty, string.Empty, "C:\MyData.mdb", string.Empty);
... но это не имеет значения.
- В базе данных Access нет имени пользователя или пароля.
- Все используемые ПК имеют установленное программное обеспечение (время автономной работы и т.д.).
- Все ПК были протестированы с использованием учетной записи Adminstrator (и права доступа к файлам были проверены дважды).
- Я пробовал отметить флажок Интегрированная безопасность, без везения
- Я установил logonInfo.ConnectionInfo.DatabaseName = string.Empty;
- Я установил logonInfo.ConnectionInfo.ServerName = "C:\MyData.mdb";
- Я пробовал НЕ использовать какой-либо из приведенных выше кодов, вместо этого просто удостоверился, что база данных находится в одном месте на всех ПК, без везения.
- Это файл базы данных Access 2003
Я могу только заключить, что WePOS так "вырубается", что Crystal молча пропускает аутентификацию... пожалуйста, помогите!
Ответы
Ответ 1
Просто для справки в будущем, если вы когда-нибудь переключитесь на SQL Server, вы захотите использовать SQL OLEDB и НЕ собственный Sql Client, иначе вы снова столкнетесь с той же проблемой, что и я, когда я впервые интегрировал CR в наше приложение, Он отлично работает на вашей машине разработки, но не в производстве.
Ответ 2
У этой вещи WePos есть правильное право на чтение из папки/местоположения в вашей файловой системе или вам нужны повышенные права или что-то, что можно прочитать из этого места. Это может быть одна и та же проблема при подключении к удаленной сетевой папке. Затем вам также нужно указать учетные данные на этом компьютере, чтобы получить к нему доступ. Это имеет смысл?
Ответ 3
Public Sub giveLogin()
Dim conInfo As New ConnectionInfo
conInfo.ServerName = ConfigurationManager.AppSettings("ServerName")
conInfo.DatabaseName = ConfigurationManager.AppSettings("DatabaseName")
conInfo.UserID = ConfigurationManager.AppSettings("UserID")
conInfo.Password = ConfigurationManager.AppSettings("Password")
For Each tblLogon As TableLogOnInfo In CrystalReportViewer1.LogOnInfo
tblLogon.ConnectionInfo = conInfo
Next
End Sub
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" HasCrystalLogo ="False" EnableDatabaseLogonPrompt ="false" EnableParameterPrompt ="false" />
Ответ 4
В Crystal Reports XI (возможно, во всей версии, я бы себе) я изменил тип базы данных из Access/Excel (DAO) в OLE DB (ADO).
Держу пари, если бы я настаивал, я мог бы установить расположение System.mdw
в отношении расположения Datasource Location в коде С# (см. выше), как указано Дэвидом.
Так много спасибо Дэвиду за то, что он занял первое место в этой исключительной "нишевой" проблеме - я надеюсь, что это поможет кому-то еще!
Добавлен от имени OP.
Ответ 5
это работает для меня,
var rd = new CrystalReport1();
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = @"d:\testing\test2.mdb";
connectionInfo.UserID = "admin";
foreach (Table table in rd.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(logonInfo);
}
crystalReportViewer1.ReportSource = rd;