OLAP.ru   Rambler's Top100
Вы находитесь на страницах старой версии сайта. Перейдите на новую версию OLAP.ru
  
Поиск по сайту
Новости
Основы OLAP
Продукты
Business Objects/ Crystal Decisions
Каталог
OLAP в жизни
Тенденции
Download
Яndex
 
 
 
TopList
 
СТАТЬЯ Crystal Reports 8: Внесение изменений в базу данных и отображение полей 26.10.00

Иногда возникает необходимость во внесении изменений именно в ту базу, для которой вы создаете отчет. Встречаются случаи, когда база данных находится в состоянии непрерывного изменения, т.е. динамически меняется по мере создания отчета. Или возможно вы создаете отчет для тестовой базы данных, а затем связываете его с реальной базой данных. Таким образом, желательно иметь возможность легко вносить подобные изменения, по мере обновления базы данных, без необходимости повторного создания каких-либо свойств или функций в отчете.

Одним из видов таких изменений базы данных, может быть переименование полей разработчиком или администратором базы данных. Crystal Reports, обнаружив эти изменения, дает вам возможность изменить ссылки на поля в вашем отчете, таким образом новые имена полей можно автоматически связать с предыдущими. Такое отображение полей освобождает вас от необходимости добавлять к отчету новые поля или модифицировать формулы, ссылающиеся на измененные поля.

Есть несколько способов согласовать изменения, сделанные в базе данных:

  • Проверить базу данных
  • Изменить драйвера базы данных
  • Указать местоположение базы данных

Все они описаны в этой статье.

Проверка или изменение местоположения базы данных

При внесении изменений в структуру базы данных (изменяются имена полей, типы данных, и т.д.), при перемещении базы данных в другое место, или при необходимости привязки своего отчета к другой базе данных, у вас появится необходимость в использовании функций Crystal Reports, распознающих эти изменения.

Проверка базы данных

При внесении изменений в базу данных, на которой основан ваш отчет (например, разработчик базы данных добавил новые поля, удалил старые, изменил имена или типы данных существующих полей), то при открытии этого отчета, внесенные изменения не будут распознаны в автоматическом режиме. Даже после обновления отчета, Crystal Reports не обнаружит этих изменений. Единственный выход в данной ситуации - это сделать проверку соответствующей базы данных.

Для этого выберите Database I Verify Database (Проверить базу данных) из ниспадающего меню. Если база данных не была изменена, то вы увидите следующее диалоговое окно:

В противном случае, то есть, если база данных была изменена, то вы получите следующее сообщение:

Если вы нажмете "Yes", Crystal Reports вновь прочитает структуру базы данных и внесет необходимые изменения в имена таблиц, имена полей и типы данных. При запуске Field Explorer, вы сможете увидеть произведенные изменения. Кроме того, если у вас были ранее связанные между собой таблицы, и структура этих таблиц значительно изменилась, то вам, скорее всего, придется заново связать эти таблицы при помощи Visual Linking Expert. Если изменились имена полей, то вы увидите диалоговое окно Map Fields (см. ниже).

Verify on Every Print Если база данных не пройдет проверку после внесения изменений, то ваш отчет может содержать неверные данные (в случае перемещения или переименования полей), или появится сообщение об ошибке (в случае удаления или переименования таблиц). Будьте предельно внимательны при работе с базой данных, в которую могут вноситься изменения. Желательно проверять базу данных как можно чаще. Это необходимо для выявления всех изменений.

Один из способов добиться этого - выбрать в ниспадающем меню Database I Verify on Every Print. Если эта опция выбрана, Crystal Reports будет проверять базу данных при каждом ее обновлении. Состояние (вкл./выкл.) опции Verify on Every Print будет сохранено вместе с отчетом - если она была включена при сохранении соответствующего отчета, то она будет включена при его открытии.

Изменение драйвера базы данных

Иногда, вам приходится менять скорее тип, а не имя базы данных. К примеру, часто бывает, что отчет, изначально разработанный для настольной базы данных PC-стиля, впоследствии перерастает в некую разновидность клиент/серверной базы данных, или базу на SQL Server. В этом случае вам нужно изменить драйвер базы данных вашего отчета. Драйвер базы данных - это библиотека c динамическим связыванием (специальный файл данных Windows с расширением .DLL), который Crystal Reports использует для связи с различными уровнями базы данных на PC. Для каждого типа базы данных, распознаваемого Crystal Reports, есть специальный драйвер.

Например, для отчета по тестовой базе данных Microsoft Access, с использованием Data Explorer Database Files category, для связи с базой данных Access будет использоваться драйвер PDBDAO.DLL. Если эта база данных расширяется до уровня Microsoft SQL Server, вам следует сменить драйвер базы данных на PDSSQL.DLL (если вы хотите использовать драйвер прямого доступа к SQL Server, подробная информация о таких драйверах содержится в статье "Составление отчетов", которая будет опубликована в ближайшее будущее). Если же вы хотите работать с базой данных SQL Server (или какой-либо другой ODBC-совместимой базой данных), использующей ODBC (Open Database Connectivity), следует использовать драйвер PDSODBC.DLL.

Выберите в ниспадающем меню Database I Convert Database Driver (преобразовать драйвер базы данных). Появится диалоговое окно Convert Database Driver:

После того, как установлен флажок Convert Database Driver on Next Refresh (преобразование драйвера базы данных при следующем обновлении), вы увидите название текущего драйвера отчета с раскрывающимся списком всех драйверов, к которым можно преобразовать ваш отчет. Выберите новый драйвер, который бы вы хотели использовать. Ваш выбор будет зависеть от типа базы данных, к которой вы хотите сделать преобразование. После нажатия OK вам будет задан вопрос, желаете ли вы перейти к новой базе данных или выбрать новый ODBC источник данных (в зависимости от выбранного драйвера).

Как только вы войдете в новую базу данных, ваш отчет будет связан с новой базой данных, и эта база данных будет проверена (как было описано ранее). Просмотреть сделанные изменения можно, запустив Field Explorer. Если у вас были ранее связанные между собой таблицы, и структура таблиц значительно изменилась, возможно, вам понадобится заново связать таблицы при помощи Visual Linking Expert. Если изменились имена полей, то вы увидите диалоговое окно Map Fields (см. далее).

В Crystal Reports 8 к команде Set Location (Установить местоположение) добавлена возможность автопреобразования драйвера. Если выбрать Set Location (команда обсуждается в следующих параграфах) и затем выбрать базу данных из другой категории в Data Explorer (Проводнике данных), то Crystal Reports 8 выполнит автоматическое преобразование драйвера.

Использование команды Set Location (Установить местоположение)

Кроме обсуждаемых ранее, встречаются и другие ситуации физического перемещения в сети базы данных, на которой основан ваш отчет. Возможно вы разрабатываете отчет на тестовой базе данных, использующей ODBC, и затем вам необходимо перенести его на какую-нибудь реальную базу данных ODBC. В этих случаях тип базы данных не меняется (поэтому не надо менять драйвер базы данных), нужно лишь указать отчету новое местоположение базы данных. Для этой цели используется опция Set Location.

Выберите Database I Set Location в ниспадающем меню. Появится диалоговое окно Set Location со списком всех таблиц в вашем отчете:

Выделите таблицу, для которой нужно установить новое местоположение. Затем нажмите кнопку Set Location. Откроется Data Explorer (Проводник данных), он покажет все подключенные базы данных, а так же даст возможность выбрать или подключить другие базы данных. После этого выберите таблицу, которую нужно заменить ранее выделенной в диалоговом окне Set Location.

После того, как местоположение новой базы данных указано, вам может быть задан вопрос, желаете ли вы распространить сделанные изменения на другие таблицы с такой же исходной информацией.

Если нажать "Yes", то все прочие таблицы отчета, которые вначале ссылались на только что измененную базу данных, автоматически станут ссылаться на ее новое местоположение. Если нажать "No", другие таблицы будут ссылаться на ее первоначальное местоположение.

При изменении местоположения базы данных, Crystal Reports обязательно проверяет эту базу данных. Если у вас были ранее связанные между собой таблицы,
и структура таблиц значительно изменилась, возможно, вам понадобится заново связать эти таблицы при помощи Visual Linking Expert. Если изменились имена полей, то вы увидите диалоговое окно Map Fields (см. далее).

Опция Same As Report (Так же как отчет) Кнопка Same As Report в диалоговом окне Set Location применима только к отчетам по базам данных PC-стиля. Нажатие на нее приводит к удалению информации об имени диска и пути из местоположения базы данных. После этого Crystal Reports будет искать эту базу данных на том же диске и в той же папке, где располагается отчет.

Это позволяет вам создавать и сохранять отчет для передачи его другим пользователям, желающим просмотреть этот отчет. Те пользователи, которые желают его просмотреть, имеют возможность поместить этот отчет на любой диск
и в любую папку по своему усмотрению. При этом, так как отчет и соответствующая ему база данных находятся в одной и той же папке, отчет сможет ее найти.

Преобразование имени к формату UNC (соглашения об универсальных именах) Кнопка Convert To UNC в диалоговом окне Set Location применима только к отчетам по базам данных PC-стиля. Нажатие на нее приводит к замене имени диска и пути для базы данных на имя в формате Uniform Naming Convention (UNC), которое может быть легко найдено любым компьютером в локальной сети, вне зависимости от конкретного отображения диска. UNC - способ ссылаться на файл на сетевом диске без использования имени диска. Рассмотрим следующий сценарий:

Два PC подключены к одному LAN серверу, но используют разные имена диска для доступа к серверу. Если первый PC создаст отчет, основанный на базе данных Accounts.MDB, то в этом отчете будут сохранены, в жестко закодированном виде, имя диска и имя файла H:\Accounts.MDB. При попытке открыть этот отчет вторым PC произойдет ошибка: не будет найдена соответствующая база данных на диске H.

Что бы избежать проблем такого рода, можно использовать имя в формате UNC:

\\<Имя сервера>\<Имя сетевого диска>\<Путь и Имя файла>

  • Имя сервера - фактическое имя компьютера или сервера, где расположен файл (здесь - Groucho). Имени сервера предшествуют два символа обратной косой черты.
  • Имя сетевого диска - имя, которое дал LAN-администратор соответствующей группе файлов и папок с общим доступом на сервере. Когда PC отображает имя сетевого диска на LAN-сервер, имя диска будет отображено соответствующим Именем сетевого диска (здесь - Databases). Символ обратной косой черты отделяет Имя сервера от Имени сетевого диска.
  • Путь и Имя файла подобны пути и имени файла на локальном жестком диске PC, кроме случая, когда они расположены на LAN-сервере. (Здесь - файл Accounts.MDB находится в корневом каталоге Сетевого диска Databases). Символ обратной косой черты отделяет Имя сетевого диска от Пути и Имени файла (Путь может содержать несколько символов обратной косой черты).

Согласно этим правилам, соответствующее имя файла Accounts.MDB в формате UNC будет выглядеть так:

\\Groucho\Databases\Accounts.MDB

Заметим, что имя диска было убрано. Теперь, с любого компьютера в сети можно будет найти файл с именем в формате UNC, поскольку пользователю этого компьютера не обязательно знать имя диска для ссылки на LAN-сервер.

Использование команды Set Alias (Установить псевдоним)

При создании вами нового отчета, основанного на определенных таблицах базы данных, в Field Explorer, в Visual Linking Expert и других местах отчета будет показано фактическое имя первой выбранной вами таблицы. Хотя может оказаться, что Crystal Reports следует ссылаться на таблицу базы данных по ее физическому имени, все равно нужно иметь возможность изменить имя, по которому Crystal Reports ссылается на эту таблицу.

В таких случаях разумно использовать псевдонимы. Crystal Reports может использовать псевдоним для обращения к таблице по выбранному вами имени, независимо от реального имени файла или таблицы. По умолчанию, когда отчет открыт в первый раз, Crystal Reports в качестве псевдонима берет реальное имя. Чтобы изменить псевдоним, выберите команду Database I Set Alias из ниспадающего меню. Появится диалоговое окно Set Alias:

Здесь вы видите список всех таблиц вашего отчета. Выберите таблицу, псевдоним для которой нужно изменить, и нажмите кнопку Set Alias. После этого вам будет предложено назначить новый псевдоним для таблицы. Следует выбрать имя, которое не используется другими таблицами (в противном случае на экране вы увидите соответствующее предупреждение), и нажмите OK. Установите псевдонимы для всех таблиц базы данных, для которых вы хотели это сделать, а затем нажмите Done, диалоговое окно Set Alias будет закрыто. В итоге вы увидите это новое имя, применимое к определенной таблице, во всех диалоговых окнах, формулах и в Visual Linking Expert.

Иногда одну и ту же таблицу нужно добавить к отчету несколько раз. В этом случае вы можете использовать поисковую таблицу с более чем одной первичной таблицей, либо нужно использовать само-присоединение, когда таблица должна быть добавлена дважды и присоединена к самой себе в соответствующем отчете. Может понадобиться и добавление двух таблиц, имеющих одинаковые имена, из различных баз данных. Когда это происходит, вам будет предложено назначить псевдоним для второй копии таблицы. Просто определите этот новый псевдоним. В результате в отчете окажутся две таблицы с различными именами.

Согласование старых полей с новыми именами

Изменения в базе данных могут привести к несоответствиям в именах полей вашего отчета. Например, исходный отчет может быть разработан для базы данных Microsoft Access, содержащей поле "Account Number" (обратите внимание, что пробел между словами важен для Crystal Reports). Вам может понадобиться тот же отчет для работы в базе данных SQL Server, в которой это поле называется "Account_Number" (обратите внимание, что здесь пробел заменен знаком подчеркивания).
 
 
  Что делать в случае изменения имен таблиц

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

Для решения этой проблемы, следует выполнить следующие простые шаги:

  1. Запустите команду Set Location. В диалоговом окне Set Location выберите таблицу, имя которой было изменено. Затем наберите новое имя таблицы 

  2. в текстовом поле внизу диалогового окна. (Не забудьте поставить восклицательный знак, который отделяет имя таблицы от имени базы данных, в случае базы данных для PC). Таким образом, таблица будет сопоставлена с новым именем в базе данных.
  3. Чтобы это новое имя появилось везде в отчете, измените псевдоним 

  4. старой таблицы на имя новой с помощью команды Set Alias. Команда 
    Set Location корректно указывает отчету новое имя таблицы, но не меняет имени отчета: он по-прежнему вызывается по старому имени. Команда
    Set Alias изменяет так же и имя таблицы на то, которое теперь использует таблица.

Всякий раз, когда Crystal Reports обнаруживает такого рода изменения, он не может определить, с каким объектом старого отчета связать новое поле базы данных. При помощи Field Mapping, можно указать старому объекту новое поле базы данных. Field Mapping просто позволяет изменить имя поля, на которое ссылается отчет, таким образом, что, например, все объекты связанные с "Account Number", будут теперь связаны с "Account_Number". При этом не нужно менять формулы, удалять старые объекты или добавлять новые.

Функцию Field Mapping нельзя выбрать из меню. Она запускается, когда Crystal Reports распознает внесение каких-либо изменений в имена полей базы данных. Crystal Reports проверяет наличие этих изменений каждый раз, когда вы проверяете базу данных, меняете ее драйвер или выполняете команду Set Location. Если Crystal Reports обнаруживает отсутствия каких-либо полей отчета в базе данных, выводится диалоговое окно, показанное на рис 1.

Диалоговое окно Map Fields разделено на четыре поля или списка. Левый верхний список Unmapped Fields показывает поля отчета, которые не соответствуют ни одному имени поля в новой базе данных. Правый верхний список предлагает на выбор поля в новой базе данных, с которыми вы можете сопоставить поля отчета. Чтобы сопоставить поле отчета с новым полем в базе данных, выберите поле отчета в левом верхнем списке, отметьте подходящее поле базы данных в правом верхнем списке, и затем нажмите кнопку Map. Поля переместятся из верхних списков в нижние:

Список полей базы данных меняется в зависимости от того, установлен ли флажок Match Type на правой стороне диалогового окна. Если флажок установлен, то будут показаны только поля того же типа данных (строка, число, дата, и т.д.), что и выделенное поле отчета. Это помогает избежать неверного сопоставления, например, строкового поля в отчете числу или дате в новой базе данных (хотя, иногда, может требоваться и такое). Из-за несоответствия типов данных в правом списке может не оказаться поля, которое вы желаете обработать. Например, при преобразовании полей из базы данных Microsoft Access к базе данных SQL Server, вы скорее всего не найдете ни одного поля соответствующего полю валюты базы данных Access. В этом случае снимите флажок Match Type, и найдите поле для сопоставления.

При первом открытии диалогового окна, некоторые поля, могут уже присутствовать в двух нижних списках. Левый нижний список показывает поля отчета, которые уже имеют соответствующие поля в новой базе данных. И когда вы сопоставите поля из верхних списков, они также будут перемещены в нижние списки. Если существующее сопоставление предложено самим Crystal Reports (из-за идентичных имен полей), или вы ошибочно сопоставили поля, которые не соответствуют друг другу, можно выделить поле в левом нижнем или в правом нижнем списке. В другом списке будет выделено сопоставленное поле. Затем можно нажать кнопку Unmap, чтобы отменить сопоставление полей и вернуть их в верхние списки.

Закончив сопоставление полей, нажмите кнопку OK , диалоговое окно Map Fields будет закрыто. Затем Crystal Reports свяжет сопоставленные поля с новой базой данных. Закладка Design, как и другие формулы отобразит новые имена полей. Если в дополнительных таблицах есть несоответствующие поля, для каждой из таблиц будет выведено диалоговое окно Map Fields.

Все поля, которые больше не существуют в исходной базе данных, должны быть повторно сопоставлены с новыми полями. Если Вы не сопоставите старые имена полей с новыми полями, старые поля и объекты, на которых они основаны, будут удалены из вашего отчета!

 Обсудить на форуме   Написать автору   Написать вебмастеру 

© 2001 Interface Ltd