Проблема подключения к базе данных Crystal Reports 9 - PullRequest
4 голосов
/ 09 июня 2009

Crystal Reports 9, похоже, сохраняет информацию о соединении с базой данных в самом файле отчета. У меня проблема с изменением этой связи. Я работаю с командой разработчиков, у которых у всех есть собственная копия базы данных на одном сервере. Мы используем доверенные подключения к БД. Когда нам нужно внести изменения в отчет Crystal и щелкнуть молнию, чтобы выполнить отчет, Crystal не запрашивает информацию для входа в базу данных. На самом деле происходит подключение к последней базе данных, которая использовалась при последнем сохранении отчета.

Мы придумали 2 обходных пути:

  1. Возьмите базу данных, которую Crystal считает, что он должен подключиться к автономному режиму, затем Crystal запросит информацию для входа.
  2. Удалите разрешения для имени пользователя, которое меняет кристалл.

Ничто из этого не приемлемо для нас. Кто-нибудь знает, как удалить кристаллическое соединение из файла отчета?

Мы пробовали выйти из источника данных и все параметры в Эксперте базы данных.

UPDATE

Я до сих пор не нашел решения, подходящего для моего случая. Но наш новый обходной путь - это загрузить отчет Crystal, а перед тем, как щелкнуть молнию (чтобы запустить отчет для базы данных), отключите кабель Ethernet. Затем, когда Crystal не сможет найти базу данных, снова подключите кабель Ethernet, и это позволит вам выбрать другой сервер базы данных и имя.

Ответы [ 5 ]

1 голос
/ 02 сентября 2009

Я, вероятно, отвечаю слишком поздно, чтобы иметь шанс на награду, но я все равно предложу ответ.

Если вы работаете с Crystal Report напрямую или с Crystal Enterprise, то единственный способ сделать это - использовать dsn, как упоминает paulmorriss. Недостатком этого является то, что вы будете использовать ODBC, который, как я считаю, обычно работает медленнее и считается устаревшим.

Если вы используете это в приложении, вы можете просто изменить настройки подключения к базе данных в коде. Затем каждый может разработать отчет для своей собственной тестовой базы данных, и вы можете указать его на производственную базу данных во время выполнения (при условии, что база данных разработчиков обновлена ​​и содержит те же поля, что и производственная база данных).

Для этого вы сможете использовать функцию, подобную следующей:

private void SetDBLogonForReport(CrystalDecisions.Shared.ConnectionInfo connectionInfo, CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument)
{
    CrystalDecisions.CrystalReports.Engine.Tables tables = reportDocument.Database.Tables;

    foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
    {
        CrystalDecisions.Shared.TableLogOnInfo tableLogonInfo = table.LogOnInfo;

        tableLogonInfo.ConnectionInfo = connectionInfo;
        table.ApplyLogOnInfo(tableLogonInfo);
    }
}

Чтобы это работало, вам нужно передать объект ConnectionInfo (который будет содержать всю вашу регистрационную информацию) и документ отчета, к которому он будет применен. Надеюсь, это поможет.

РЕДАКТИРОВАТЬ - Другой вариант, в который я не могу поверить, о котором я до сих пор не думал, заключается в том, что если вы используете SQL Server, вы можете убедиться, что все имена баз данных разработки являются то же самое, затем используйте "." или «(локально)» для сервера и интегрированной безопасности, чтобы каждый мог иметь одинаковую информацию о подключении локально. Я думаю, что это лучший способ предположить, что вы можете заставить всех разработчиков использовать одну и ту же настройку.

РЕДАКТИРОВАТЬ еще раз:) Прочитав некоторые комментарии к другим ответам, я думаю, что, возможно, неправильно понял вопрос. Я не могу думать о том, почему вы не сможете выполнить шаги, описанные в ответе Арво, кроме отсутствия прав на редактирование отчета, но я предполагаю, что вы смогли внести другие изменения, поэтому я сомневаюсь, что это так. Я предположил, что для того, чтобы отчет работал для каждого разработчика, вы выполняли эти шаги все время.

1 голос
/ 09 июня 2009

Вы можете использовать файл источника данных .dsn в определенном для пользователя месте (т. Е. Один и тот же путь для каждого пользователя, но в другом физическом месте) и указать на это Crystal Reports. Например, на каждом диске C: C: \ DSNs \ db.dsn или на сетевом диске, который сопоставлен с различным местоположением для каждого пользователя.

Вы можете получить больше информации о файлах .dsn на MSDN: http://msdn.microsoft.com/en-us/library/ms710900(VS.85).aspx

1 голос
/ 09 июня 2009

Мы используем такой способ (однако с использованием аутентификации sql):

  • открыть отчет
  • база данных - войти на сервер
  • база данных - установить местоположение источника данных
  • обновить / просмотр

Вы можете отключить доступ [пользователя домена] к базе данных dev, это тоже должно помочь:)

0 голосов
/ 31 августа 2009

Да, я согласен, Crystal Reports - это боль. В приложениях, которые я создал, я столкнулся с той же проблемой, что я был вынужден использовать ее.

1- Выйти из сервера (внутри кристалла щелкните правой кнопкой мыши базу данных и выйдите из системы) 2- Нажмите на базу данных и измените местоположение базы данных

Если вы вошли в систему и изменили расположение базы данных, похоже, она не зависает

0 голосов
/ 09 июня 2009

Вы можете установить вход в систему во время выполнения. Посмотри этот вопрос ...

Как изменить подключение к базе данных Crystal Report ODBC во время выполнения?

Если вы используете ODBC, каждый разработчик может указать свой DSN на соответствующую базу данных. По сути, вставка строки подключения в DSN и из отчета Crystal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...