Использование представлений данных (видов)

Как всегда, возникает самый главный вопрос — а что это такое? Отвечаем — почти то же, о чем мы читали ранее. Почему почти? А вот это и есть самый важный вопрос, потому что между этими двумя почти эквивалентными понятиями есть различия и они принципиальны.

• Запросы хранятся в отдельных файлах с расширением qpr, а представления данных — в самой базе данных.
• Самое главное — представления позволяют обновлять данные.
• С помощью представления можно обновлять данные, сохраняемые в не-скольких связанных файлах.
• Созданное представление данных можно использовать как обычную таблицу в отчетах, формах, запросах.
• С помощью представления данных можно ограничить доступ пользователя к отдельным записям.

Создание нового представления данных

Создание нового представления в принципе не отличается от создания любого нового элемента приложения:

• выберите в системном меню команду File J New | View (Файл | Новый ) Вид);
• в окне диспетчера проекта: вкладка Data (Данные), элемент Local Views (Представление локальных данных);
• в окне Command (Команда): команда Create View (Создать представление данных).

Независимо от того, какой способ выбран, на экране появится диалоговое окно New Local View (Новое представление данных).

Как всегда в таких случаях, Лис предлагает воспользоваться либо услугами мастера, либо построить новый вид самостоятельно, используя конструктор. Мы с тобой трудностей не боимся, поэтому выбираем конструктор.

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

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

Для создания данного представления нам потребуются три таблицы: Floors.dbf, Rooms.dbf и Names.dbf. Воспользовавшись кнопкой Add Table (Добавить таблицу), расположенной на панели управления View Designer (Конструктор представлений данных), добавим в наше представление указанные таблицы.

Теперь необходимо указать поля, которые будут “участвовать” в представлении данных. Здесь нет ничего сложного, и как это сделать — описано ранее при изучении конструктора запросов. Единственное, что может вызвать затруднение, — это создание вычисляемого поля (с суммами оплаты). Но он здесь, оказывается, никаких проблем не возникает: в конструкторе можно воспользоваться построителем выражений, в котором можно написать любое выражение на языке FoxPro. Вот и напишем:

1
rooms.nprice*(date() - names.arrdate)

и включим это выражение в наше представление.

Как и в конструкторе запросов, в конструкторе представлений можно задать условия объединения таблиц — вкладка Join (Объединение).

А для задания условий выборки данных можно воспользоваться вкладкой Filter (Фильтр). За порядок отображения записей “отвечает” вкладка Order By (Сгруппировать по). А теперь запустим наше представление в “первое плавание”.

Таким образом, созданные представления можно просматривать, как обычные таблицы, использовать их в качестве источника данных для экранных форм, отчетов и т.д. Как и при работе с обычными таблицами, при работе с представлениями вполне допустимо использование соответствующих команд: USE, BROWSE И т. д.

Более того, сами записи в представлении данных можно редактировать — в этом-то и состоит главное отличие представления от запроса.

В конструкторе представлений имеется вкладка Update Criteria (Критерии обновления), которая и содержит опции, связанные со способностью представлений обновлять (редактировать) входящие в них данные.

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

При выборе необходимой таблицы ее поля (не все, а только те, которые включены в представление данных) будут отображены в списке Field name (Имя поля). Если таблица имеет первичный ключ (индекс), то в первой колонке, где изображен ключик, появится галочка. Мы можем изменить значение первичного ключа только в том случае, если поле, содержащее его, входит в набор полей, включенных в наше представление данных.

  • Кнопка Reset Key (Сброс ключа) позволяет вернуть первоначальное значение ключа.
  • Кнопка Update All (Обновить все) позволяет установить, какие именно поля будут обновляться.
  • Но даже если указать, что разрешено обновление всех полей, все равно никакого обновления не получится, если ты забудешь при этом отметить галочкой флажок Send SQL updates (Отправлять обновления). Так что отметь его, не забудь. Разрешив обновления, нужно выбрать одну из четырех опций, перечисленных ниже.

    Опции вкладки Update Criteria

    • Key fields only (Только ключевые поля) – В поиске записей, которые следует обновить в исходных таблицах, используется только значение ключевого поля
    • Key and updatable fields (Ключи и обновляемые поля) – В поиске записей, которые следует обновить в исходных таблицах, используются значения ключевого поля и всех обновляемых полей
    • Key and modified fields (Ключи и модифицированные поля) – В поиске записей, которые следует обновить в исходных таблицах, используются значения ключевого поля и модифицированных полей
    • Key and timestamp (Ключи и временная метка) – На локальных станциях эта опция недоступна. А вообще это — запрет всех обновлений, если было изменено ключевое поле или временная метка. Используется в сетевых версиях

    Пример критерия отбора записей

    Последние две опции на этой вкладке позволяют определить, каким же именно способом обновить записи: либо удалить исходные и затем вставить новые (SQL DELETE then INSERT), либо просто обновить существующие (SQL UPDATE).
    Ну вот, более или менее разобрались с представлениями данных, но возникает одно но: а как сделать так, чтобы пользователь мог сам определять условия для отбора записей?

    В данном случае в представление данных войдут те фамилии из таблицы names, которые начинаются на букву А.

    Результат отбора записей — вид

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

    Параметры представления данных

    Если задать эти самые параметры, то они будут запрашиваться при открытии представления. Для определения параметров используется команда View Parameters (Параметры представления) из меню Query (Запрос).

    В открывшемся диалоговом окне мы можем задать список параметров, определив для каждого тип и имя. Теперь для определения условия выборки Данных достаточно на вкладке Filter (Фильтр) указать имя необходимого параметра.

    Диалоговое окно для определения параметров

    Использование параметра для определения условия выборки данных

    Имя параметра указывается в поле ввода Example (Пример) и перед ним ставится знак вопроса, который является признаком использования параметра.

    Параметров может быть несколько, и при этом для задания значения каждого из них будет открываться отдельное окно. А вот так будет работать наше модифицированное представление:
    1. Задаем значение параметра.
    2. Получаем результат.

    Но очевидно, что использование данной технологии не очень удобно для конечного пользователя — не будет он разбираться во всяких меню, командах и т.п.! Это я тебе точно говорю. А выход очень простой — использовать в качестве параметров все те же переменные памяти, значения которым пользователь может присваивать с помощью полей ввода в экранной форме. Вот и все. Все довольны! Более того, при этом окна для ввода значения параметров открываться не будут.

    Использование представления данных в отчете

    Как уже было сказано, представления могут быть использованы при создании отчетов. Например, нам нужно получить отчет, содержащий данные всех трех указанных ранее таблиц. Можно, воспользовавшись конструктором отчетов, назначить в качестве источника данных сами таблицы, но тогда придется конструировать многотабличный отчет со связями между таблицами типа “один-ко-многим”. Можно воспользоваться мастером (One-To-Many Report Wizard), но этот мастер работает только с двумя связанными таблицами.

    Наиболее рациональным вариантом является именно использование представления в качестве источника данных. Давай попробуем создать такой отчет в конструкторе.

    Как обычно, назначаем источник данных для нашего отчета, указав в диалоговом окне опцию Views (Представления данных).

    Для группировки данных в нашем отчете воспользуемся соответствующим пунктом меню Report (Отчет). На экране появится диалоговое окно Data Grouping (Группировка данных).

    В данном окне мы можем задать условие группировки данных, причем можно как просто указать поле, так и написать какое-нибудь выражение (на языке Visual FoxPro, естественно).

    В нашем случае данные будут представлены в виде групп, заголовком которых будет являться номер этажа. Более того, мы можем получить итоговые значения как по каждому этажу (поместив соответствующее выражение в область отчета Group Footer), так и итоги по всему отчету, воспользовавшись командой Report | Title | Summary.

    При запуске данного отчета на выполнение появится окно для ввода пара-метров, после чего отчет будет выполнен.

    Ну и как, удобно использовать представления? За три минуты мы получили отчет с данными из трех таблиц, да еще и возможность самим задавать условия отображения записей. Что ж, перейдем к следующему уроку.

    Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

    Оставьте отзыв

    XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

     
    Rambler's Top100