Как указать Crystal Reports на новую базу данных

У меня есть пользователь Crystal Reports 2008, который разработал более 100 отчетов. Все отчеты запрашивают базы данных Sql Server (SQL 2005).
Этот сервер базы данных заменяется новой системой (работающей под управлением SQL 2008 R2), а существующие базы данных будут перемещены на новый сервер. У нового сервера базы данных будет другое имя (к которому я могу обратиться через Crystal Reports Connections), однако одно из приложений также обновляется одновременно. Старая база данных (DB_A) будет восстановлена ​​на новом сервере для исторической отчетности, и будет создана новая база данных (DB_B). Новый DB_B будет иметь очень похожую схему, поэтому я ожидал, что большая часть Crystal Reports сможет работать с новым DB_B с небольшими изменениями или без них, кроме указания определения отчета на новый DB_B.

Конечно, большинство моих пользователей настраивает запросы отчетов по DB_A.

Мой вопрос: как изменить существующие файлы Crystal Reports, чтобы они указывали на новое имя базы данных (DB_B) вместо старой базы данных (DB_A)?


person JSR    schedule 14.11.2011    source источник
comment
Ответом действительно должно было быть восстановление из прежней базы данных в новую базу данных с другим именем. Тогда новая база данных должна была использовать ту же базу данных, что и все отчеты. Если схема отличается, вам нужно будет отредактировать только те отчеты, в которых другая схема, но не расположение источника данных.   -  person Sun    schedule 30.04.2016


Ответы (2)


Используйте меню «База данных» и пункт меню «Установить расположение источника данных», чтобы изменить имя или расположение каждой таблицы в отчете.

Это работает для изменения местоположения базы данных, перехода на новую базу данных и изменения местоположения или имени отдельной таблицы, используемой в вашем отчете.

Чтобы изменить подключение к источнику данных, перейдите в меню «База данных» и нажмите «Установить расположение источника данных».

  1. Change the Datasource Connection:
    1. From the Current Data Source list (the top box), click once on the datasource connection that you want to change.
    2. В списке «Заменить на» (нижнее поле) щелкните один раз новое подключение к источнику данных.
    3. Щелкните Обновить.
  2. Change Individual Tables:
    1. From the Current Data Source list (the top box), expand the datasource connection that you want to change.
    2. Найдите таблицу, для которой вы хотите обновить местоположение или имя.
    3. В списке «Заменить на» (нижнее поле) разверните новое подключение к источнику данных.
    4. Найдите новую таблицу, которую вы хотите обновить, чтобы указать на нее.
    5. Щелкните Обновить.
    6. Обратите внимание, что если имя таблицы изменилось, старое имя таблицы все равно будет отображаться в проводнике полей, даже если теперь используется новая таблица. (Вы можете убедиться в этом, посмотрев на имя таблицы свойств таблицы в текущем источнике данных в разделе «Установить местоположение источника данных». Снимок экрана http://i.imgur.com/gzGYVTZ.png) Можно переименовать старое имя таблицы в новое имя из контекстного меню в Database Expert -> Selected Tables.
  3. Change Subreports:
    1. Repeat each of the above steps for any subreports you might have embedded in your report.
    2. Закройте окно «Установить местоположение источника данных».
  4. Any Commands or SQL Expressions:
    1. Go to the Database menu and click Database Expert.
    2. Если дизайнер отчетов использовал «Добавить команду» для написания пользовательского SQL, это будет показано в поле «Выбранные таблицы» справа.
    3. Щелкните эту команду правой кнопкой мыши и выберите «Изменить команду».
    4. Проверьте, указывает ли этот SQL конкретную базу данных. В таком случае вам может потребоваться его изменить.
    5. Закройте окно Database Expert.
    6. На панели Field Explorer справа щелкните правой кнопкой мыши любое выражение SQL.
    7. Проверьте, указывают ли выражения SQL конкретную базу данных. В таком случае вам, возможно, придется его также изменить.
    8. Сохраните и закройте окно редактора формул, когда закончите редактирование.

И попробуйте запустить отчет еще раз.

Ключ состоит в том, чтобы сначала изменить соединение с источником данных, затем любые таблицы, которые вам нужно обновить, а затем все остальное. Соединение не изменит автоматически таблицы внизу. Эти столы похожи на гусят, которые запечатлели первое крупное похожее на гуся животное, которого они увидят. Они будут продолжать обходить все причины и логику и идти туда, где они всегда были, если вы специально не измените их вручную.

Чтобы сделать его более удобным, вот совет: вы можете «Показать SQL-запрос» в меню «База данных», и вы увидите имена таблиц, соответствующие базе данных (например, «Продажи». «Dbo». «Клиенты») для любых таблиц. которые переходят прямо в конкретную базу данных. Это может облегчить охоту, если у вас много дел. Когда я занялся этой проблемой, мне пришлось изменить каждую таблицу, чтобы она указывала на новую таблицу в новой базе данных.

person Todd Walton    schedule 10.04.2013
comment
но если вы это сделаете, тогда все новые поля источника данных будут в строковом формате - person King of kings; 16.02.2015
comment
Если вы работаете в Visual Studio, после этого вы можете сохранить, закрыть и снова открыть Visual Studio. У меня произошел сбой VS2010 примерно через 20 минут после того, как я сделал это обновление (которое изначально работало отлично) ... но когда оно разбилось ... Мне не удалось загрузить набор данных из-за следующей ошибки: Ссылка на объект не установлена ​​на экземпляр объект. Возможно, это вообще не связано ... но это может сэкономить немного боли ... Я разрешил VS автоматически открываться автоматически в первый раз ... вероятно, тоже не лучшая идея ... Мне, возможно, было бы лучше выключить VS и открытие вручную ... - person Dan B; 06.05.2015
comment
Я использую это в отчете о кристаллах 9, но новое поле, которое я добавил в базу данных, не отражалось в моем источнике данных в отчете о кристаллах? Есть ли предложения, почему новое поле не отображалось? Я публикую здесь вопрос: stackoverflow.com/questions/30455483/ - person Datz Me; 26.05.2015
comment
этот пост может быть старым, но хотелось бы спросить, повлияет ли динамический источник данных на какие-либо функции в поле выражения sql? потому что я получаю ОШИБКА: System.Runtime.InteropServices.COMException (0x80042018): таблица% 1 не существует в документе, запущенном из ASP.net - person maSTAShuFu; 16.03.2017
comment
Просто примечание к этому отличному ответу: (В случае Command) Если команда представляет собой не что иное, как выполняемую хранимую процедуру (например, Тип таблицы = Хранимая процедура), вы можете выполнить те же шаги, указанные выше, для изменения отдельных таблиц (# 2) . Разница в том, что в Текущий список источников данных (верхнее поле) вам нужно указать на команду, а в Заменить списком (нижнее поле) выберите хранимую процедуру, которую команда выполняется, и кнопка обновления будет активна. См. это. - person Himanshu Jansari; 19.02.2018

Выберите базу данных | Установить расположение источника данных ... Выберите узел базы данных (желтый цилиндр) текущего соединения, затем выберите узел базы данных для желаемого соединения (может потребоваться аутентификация), затем нажмите «Обновить».

Вам нужно будет сделать это и для узлов «Подотчеты».

К вашему сведению, вы также можете создавать отдельные таблицы, выбирая каждую по отдельности, а затем выбирая «Обновить».

person craig    schedule 14.11.2011
comment
Только что попробовал, отчет все еще запрашивает DB_A. Кроме того, когда я выбираю «Показать SQL-запрос» в меню «База данных», он показывает SELECT col1, col2 FROM [DB_A]. [Dbo]. [Table]. Мне нужно, чтобы он выполнял SELECT col1, col2 FROM [DB_B]. [Dbo]. [Table] - person JSR; 15.11.2011
comment
Вы используете собственный драйвер, ODBC или OLEDB? - person craig; 15.11.2011
comment
Обычно использую родной драйвер. Если у меня возникнут проблемы с переключением, я создам временный источник данных ODBC, указывающий на правильное местоположение. Я установлю местоположение для источника данных ODBC, а затем вернусь к собственному драйверу с правильным владельцем схемы. - person craig; 15.11.2011
comment
Наконец-то это сработало ... похоже, что идентификатор пользователя, указанный в новом соединении, не должен иметь никакого доступа к DB_A, чтобы Crystal мог изменить запрос для выбора из таблиц DB_B. Только после этого Crystal изменит имя базы данных в запросе Sql. - person JSR; 16.11.2011