FoxPro8

         

Галерея компонентов Visual FoxPro


Галерея компонентов является средством организации разработки в Visual FoxPro, позволяющим разработчику группировать и упорядочивать компоненты, такие как используемые в работе проекты, библиотеки, классы, формы, отчеты, кнопки и т. п. Созданное вами упорядочение можно динамически изменять, что позволит использовать разные подходы к классификации компонентов разработки.

В Галерее компонентов для работы можно разместить различные элементы Visual FoxPro, локальные и удаленные документы, файлы или папки, Automation-серверы, например Microsoft Excel, Microsoft Word и HTML-файлы. В ней содержатся также новые базовые классы Visual FoxPro.

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

Галерея компонентов располагает средствами для создания новых проектов, форм, а также для изменения свойств объектов и классов. Объекты, размещенные в Галерее компонентов, можно переносить в проекты и формы (и наоборот) с помощью метода "перенести-и-оставить".



Использование метода "перенести-и-оставить" для перемещения объектов


Объекты, расположенные в окне Галереи компонентов, можно переносить на рабочий стол Visual FoxPro, в открытый проект или форму. При этом перемещаемые в окно проекта объекты заносятся в соответствующие разделы окна конструктора проекта.

Чтобы переместить объект из Галереи компонентов с помощью метода "перенести-и-оставить", выполните следующие действия:

Выделите объект, который хотите перенести. Значок Move (Переместить), расположенный в верхнем левом углу окна Галереи компонентов, изменит свой рисунок в соответствии со значком выбранного вами объекта.

Установите курсор на значок Move (Переместить).

Нажмите кнопку мыши и, удерживая ее нажатой, перенесите объект на рабочий стол, в проект или форму.

Завершив перемещение, отпустите кнопку мыши.

В табл. 13.6 отображены все возможные результаты выполнения операции "перенести-и-оставить", а назначение цифр — в табл. 13.7.

Таблица 13.6. Возможные результаты операции перемещений объектов

Тип объекта Проект Форма

Рабочий стол Объект
Class (_ClassItem) 6
File (_FileItem)
URL (_UrlItem) 1
Form (_FormItem) 9 11
Report (_ReportItem) 9 11
Program (_ProgramItem) 11
Menu (_MenuItem) 10 11
Image (_lmageltem) 2 7 2
Sound (_SoundItem) 3
Video (_VideoItem) 3
ActiveX (_ActiveXItem)
Data (_DataItem) 4
Template (_TemplateItem) 5
Catalog (_CatalogItem) 8
Sample (_SampleItem)
Project (_ProjectItem) 11

Таблица 13.7. Назначение цифр

Цифра Обозначение
1 Добавляет класс Hyperlink
2 Добавляет класс image или устанавливает свойства изображения
3 Добавляет класс мультимедиа
4 Добавляет класс таблицы Grid
5 Создает новый файл и добавляет его в проект
6 Создает объект на экране
7 Устанавливает на рабочем столе Visual FoxPro узор
8 Открывает новое окно Галереи компонентов с каталогом
9 Добавляет класс кнопки для вызова формы или отчета
10 Добавляет всплывающее меню в форму
11 Открывает конструктор для модификации



Использование опции Exclude


Выполняемые компоненты проекта (программы, формы, меню) при разработке приложения с помощью проекта объединяются для создания кода приложения. Невыполняемые компоненты, такие как таблицы, индексы включаются в приложение доступными только для чтения. Вы можете разрешить конечному пользователю модифицировать компоненты, исключив их из проекта.

Чтобы исключить компонент из проекта, можно воспользоваться следующими средствами:

командой контекстного меню Exclude (Исключить);

командой Exclude (Исключить) из меню Project (Проект).

Рядом с исключенным компонентом в окне проекта появляется кружок, перечеркнутый линией.

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

Для включения в проект исключенного компонента необходимо воспользоваться командой контекстного меню Include (Включить) или командой Include (Включить) из меню Project (Проект).



Каталоги Галереи компонентов


При первом открытии Галереи компонентов в левой части окна отобрала ются стандартные каталоги, содержащие объекты, которые будут полечим при разработке приложений. Список стандартных каталогов Visual Fo\Pm приведен в табл. 13.5.

Рис. 13.12. Список адресов Web-страниц в каталоге World Wide Web

Таблица 13.5. Назначение каталогов Галереи компонентов

Каталог Назначение
Visual FoxPro Catalog (Каталог Visual FoxPro)

Содержит базовые классы Visual FoxPro, шаблоны приложений, форм, отчетов, а также другие полезные для разработки приложений средства
Favorites (Избранное) Предназначен для хранения наиболее важных объектов
My Base Classes (Мои базовые классы) Содержит подклассы базовых классов Visual FoxPro
ActiveX Catalog (Каталог ActiveX компонентов) Динамический каталог, содержащий зарегистрированные объекты ActiveX
World Wide Web Содержит список адресов Web-страниц (рис. 13.12), на которых вы найдете информацию о программных продуктах Microsoft
Multimedia Catalog (Каталог мультимедиа) Содержит список рисунков, звуков и видеоизображений, которые можно использовать в приложениях
Visual FoxPro Samples (Примеры Visual FoxPro)

Содержит примеры приложений, входящих в поставку Visual FoxPro

На вкладке Catalogs (Каталоги) (рис. 13.13) диалогового окна Component Gallery Options (Параметры Галереи компонентов) расположен список каталогов, входящих в Галерею компонентов. Используя кнопку New (Новый), в этот список можно добавить новый каталог. Флажки, расположенные под кнопкой, определяют свойства выбранного в списке каталога.

Рис. 13.13. Вкладка Catalogs диалогового окна Component Gallery Options



Настройка параметров окна Галереи компонентов


На панели инструментов окна Галереи компонентов расположена кнопка Options (Параметры), при нажатии которой открывается диалоговое окно Component Gallery Options (Параметры галереи компонентов) (рис. 13.11). Оно содержит три вкладки, назначение которых описано в табл. 13.3.

Таблица 13.3. Назначение вкладок диалогового окна Component Gallery Options

Вкладка

Назначение

Standard (Стандартные)

На данной вкладке можно определить общие параметры настройки Галереи компонентов

Catalogs (Каталоги)

Позволяет добавить в Галерею компонентов новые каталоги

Dynamic Views (Динамические представления)

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

Рис. 13.11. Вкладка Standard диалогового окна Component Gallery Options

Вкладка Standard (Стандартные) диалогового окна Component Gallery Options (Параметры Галереи компонентов) предназначена для настройки параметров окна Галереи компонентов. В области Global defaults (Общие установки) данной вкладки расположены флажки. Действия, выполняемые при установке этих флажков, описаны в табл. 13.4.

Таблица 13.4. Назначение флажков диалогового окна Component Gallery Options

Флажок

Назначение

Enable item renaming (Возможность переименования объекта)

Разрешается изменять имена каталогов и объектов в окне Галереи компонентов

FFC Builder Lock (Закрепление построителя)

Для объекта, помещаемого в форму, будет автоматически запускаться построитель

Drag and drop to desktop (Перенести и оставить на рабочем столе)

Объекты из Галереи компонентов можно переносить на рабочий стол Visual FoxPro

Advanced editing enabled (Возможность дополнительного редактирования)

В диалоговое окно свойств Properties объектов Галереи компонентов добавляются дополнительные вкладки Type, Scripts, Views и Comments

Переключатель Item default behavior (Действие объекта по умолчанию) вкладки Standard (Стандартные) позволяет определить, какое действие будет осуществляться при двойном щелчке на объекте Галереи компонентов. Если установлена опция Modify item file (Модифицировать файл), при двойном щелчке на объекте автоматически запускается построитель для данного объекта. При установленной опции Run item file (Запускать файл) двойном щелчок на объекте приводит к запуску объекта на выполнение.



Очистка проекта от удаленных файлов


Вся информация о проекте хранится в системной таблице Visual FoxPro. При разработке приложения после удаления компонента из проекта в этой таблице ставится лишь метка об его удалении. Чтобы окончательно удалить из проекта информацию обо всех помеченных на удаление компонентов, необходимо таблицу проекта упаковать, воспользовавшись командой Clean Up Project (Упаковать проект) из меню Project (Проект).



Определение свойств окна проекта


Мы рассмотрели создание форм, отчетов, запросов, перекрестных таблиц, диаграмм и меню. Каждый из этих компонентов проекта можно запустить на выполнение. Что же еще необходимо сделать, чтобы все объекты, включенные в создаваемый нами проект, функционировали, как единое целое? Это мы сейчас и рассмотрим.

При работе с файлами, размешенными в проекте, для их открытия и запуска на выполнение мы использовали кнопки Modify (Модифицировать), Browse (Обзор) и Run (Запустить) окна проекта. Visual FoxPro позволяет для этих целей использовать также мышь. При этом выполняемое действие определяется параметрами, установленными на вкладке Project (Проект) диалогового окна Options (Параметры) (рис. 13.1), вызываемого командой Options (Параметры) из меню Tools (Сервис).

Используя бпции области Project double-click action (Действия, выполняемые при двойном щелчке в проекте) этого диалогового окна, вы можете указать действие, выполняемое при двойном щелчке на имени компонента. По умолчанию установлен признак модификации выбранного компонента проекта, поэтому после двойного щелчка на нем вызывается конструктор, используемый при модификации файла данного типа.

Вы можете установить опцию Run selected file (Запустить выбранный файл). В этом случае при двойном щелчке на имени файла он будет запускаться. Таблица при двойном щелчке будет открываться в режиме Browse (Обзор) для просмотра содержащихся в ней записей.

Если в диалоговом окне Options (Параметры) установлен флажок Prompt for Wizard (Запрос мастера), при создании нового компонента проекта открывается диалоговое окно с запросом об использовании мастера для его создания.

Если этот флажок не установлен, то сразу будет вызываться конструктор, соответствующий создаваемому объекту.

Рис. 13.1. Определение параметров окна проекта

Чтобы настроить основные параметры управления проектом, вы можете использовать флажки области Source control options (Параметры хранилища данных), предназначенные для управления крупным проектом, выполняемым группой разработчиков. Назначение флажков описано в табл. 13.1.


Таблица 13.1. Назначение флажков вкладки Project

Флажок Назначение
Automatically add new projects to source control (Автоматически добавлять новые проекты в хранилище данных) Создаваемый проект автоматически помещается в хранилище данных. В противном случае вы должны будете добавлять проект вручную
Check out files upon modify (Выбор файла для эксклюзивного редактирования) Редактируемый файл автоматически выбирается для эксклюзивного редактирования пользователем. Если файл уже выбран для эксклюзивного редактирования другим пользователем, Visual FoxPro выдает соответствующее предупреждение
Add files to source control upon add (Добавлять данные в хранилище) Файлы автоматически добавляются в хранилище данных проекта. Если флажок не установлен, то файлы при добавлении будут добавляться только в проект (в файл с расширением PJX), но не будут добавляться в хранилище. Следовательно, вам будет необходимо размещать файл в хранилище вручную
Remove files from source control upon removal from project (Удалять файлы из хранилища при удалении из проекта) Удаляемый из проекта файл автоматически удаляется из хранилища данных. Если флажок снят, то при удалении файла из проекта информация о файле сохраняется в хранилище данных. При этом если файл не был удален с жесткого диска, к нему можно получить доступ, используя систему совместной разработки вне Visual FoxPro
Display dialog box for shortcut menu commands (Открывать диалоговое окно из всплывающего меню команд) При выборе элемента проекта с помощью команды контекстного меню проекта Visual FoxPro открывает диалоговое окно, позволяющее для работы с данной командой выбрать более одного файла

Построение проекта


При построении проекта Visual FoxPro просматривает все компоненты, перечисленные в нем, и формирует проект. Например, в проект должны включаться все программы, формы и отчеты, которые вызываются при выборе пунктов меню. Если какие-либо компоненты вызывают в свою очередь другие компоненты, то они также включаются в проект.

Для создания проекта нажмите кнопку Build (Построить) в окне проекта или выберите команду Build (Построить) из меню Project (Проект). На экране открывается диалоговое окно Build Options (Опции построения) (рис. 13.7), содержащее пять опций следующего назначения:

Rebuild project (Перестроить проект) — собирает проект, проверяя наличие в нем всех необходимых файлов;

Application (app) (Приложение) — создает исполняемое приложение с расширением АРР. Данный файл может запускаться на выполнение в Visual FoxPro командой Do (Выполнить) из меню Program (Программа);

Win32 executable/COM server (exe) (Исполняемый файл) — создает исполняемое приложение с расширением ЕХЕ. Данный файл может запускаться на выполнение как в главном окне Visual FoxPro, так и вне его при наличии соответствующих библиотек;

Single-threaded COM server (dll) (Однопоточный СОМ-сервер) — создает однопоточную динамическую библиотеку (Dynamic Link Library) с расширением DLL;

Multi-threaded COM server (dll) (Многопоточный СОМ-сервер) — создает многопоточную динамическую библиотеку (Dynamic Link Library) с расширением DLL.

Рис. 13.7. Диалоговое окно Build Options

В диалоговом окне Build Options (Опции построения) расположены флажки, позволяющие задать параметры создаваемого проекта:

Recompile All Files (Обновлять все файлы) — устанавливается для обновления всех компонентов проекта. По умолчанию обновляются только те компоненты проекта, которые были изменены после предыдущего построения;

Display Errors (Показывать ошибки) — при установке флажка после завершения построения проекта на экране появляется диалоговое окно (рис. 13.8), сообщающее об ошибках, встретившихся в процессе построения. Если флажок не установлен, ошибки построения можно просмотреть, выполнив команду Errors (Ошибки) из меню Project (Проект);


Run After Build (Запустить после построения) — флажок устанавливается в том случае, если необходимо запустить приложение сразу после создания;

Regenerate Component IDs (Перестроить идентификаторы Automation-серверов) — флажок устанавливается в том случае, если необходимо установить и регистрировать Automation-серверы, содержащиеся в проекте.

Кнопка Version (Версия) открывает одноименное диалоговое окно, в котором можно указать информацию о номере и типе версии приложения.

Замечание

Флажок Regenerate Component Ids доступен только при установленной опции Win32 Executable/COM server, Single-threaded COM server или Multi-threaded COM server.



Рис. 13.8. Диалоговое окно, сообщающее об ошибках, возникших при построении приложения

Для построения проекта выберите опцию Rebuild Project (Перестроить при ект) и нажмите кнопку ОК. В появившемся запросе о необходимости сохранения проекта выберите значение Yes (Да).

Если в процессе построения проекта диспетчер проектов обнаружит компонент, не описанный в проекте, на экране появится диалоговое окно Locate File (Определение файла) (рис. 13.9), содержащее имя ненайденного файла. Для поиска компонента нажмите кнопку Locate (Определить) и найдите на диске необходимый файл. Вы можете проигнорировать данную ошибку. В этом случае нажмите кнопку Ignore (Игнорировать).

Список всех обнаруженных ошибок сохраняется в файле, имя которого совпадает с именем файла проекта и имеет расширение ERR.



Рис. 13.9. Диалоговое окно Locate File

Когда все требуемые компоненты включены в проект, вы можете создать исполняемый файл, установив в диалоговом окне Build Options (Опции построения) опции Application (Приложение) или Win32 Executable/COM server (Исполняемый файл). Для создания файла с расширением АРР, который может запускаться на выполнение из программы Visual FoxPro, необходимо использовать опцию Application (Приложение). В том случае, если вы хотите создать файл с расширением ЕХЕ, который может запускаться автономно, воспользуйтесь опцией Win32 Executable/COM server (Исполняемый файл).

После создания приложения с установленной опцией Build Options опции Application (Приложение) или Win32 Executable/COM server (dll) (Исполняемый файл) вы можете запустить его, используя команду do. введенную в окне Command Visual FoxPro или командой Do (Выполнить) из меню Program (Программа). При выполнении этой команды открывается диалоговое окно Do (Выполнить). Откройте в нем нужную папку, в списке файлов выберите созданный вами файл проекта, имеющий расширение АРР, и нажмите кнопку Do (Выполнить).

Для выполнения приложения, созданного с опцией Win32 Executable/COM server (Исполняемый файл), вы должны иметь доступ к динамическим библиотекам Vfp8r.dll и Vfp8renu.dll.


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


На панели инструментов Галереи компонентов расположен раскрывающийся список View Type (Тип представления), содержащий по умолчанию несколько значений, управляющих видом отображения данных в окне. Используя вкладку Dynamic Views (Динамические представления) (рис. 13.14) диалогового окна Component Gallery Options (Параметры Галереи компонентов), можно добавить в данный список дополнительные значения, изменить или удалить значения, добавленные пользователями.

Рис. 13.14. Вкладка Dynamic Views диалогового окна Component Gallery Options

Чтобы добавить в список View Type (Тип представления) новое значение, выполните следующие действия:

Нажмите кнопку Options (Параметры) на панели инструментов Галереи компонентов.

Выберите вкладку Dynamic Views (Динамические представления).

Нажмите кнопку New (Новый).

В открывшемся диалоговом окне Edit View (Редактирование представления) введите параметры нового типа представления данных.

Нажмите кнопку Save (Сохранить).

Расположенные на вкладке Dynamic Views (Динамические представления) кнопки Edit (Редактировать) и Remove (Удалить) предназначены для изменения параметров типа представления данных и удаления представления данных из списка соответственно.



Работа с проектом из окна Галереи компонентов


В окне Галереи компонентов можно создавать новые проекты с помощью шаблонов, построителей и мастеров. Для этого предназначен значок New Application (Новое приложение) каталога Catalogs (Каталоги).

При щелчке на значке New Application (Новое приложение) на экране появляется диалоговое окно Enter Project Name (Введите имя проекта), являющееся первым шагом в создании проекта (рис. 13.15). Введите в поле Project name (Имя проекта) имя создаваемого проекта, а в поле Project file (Файл проекта) — его расположение. Используя флажок Create project directory structure (Создать структуру каталогов проекта), можно указать, создавать ли для проекта структуру каталогов. При установке флажка Add to Favorites catalog (Добавить в избранное) значок созданного проекта будет добавлен в каталог Favorites (Избранное).

Установив в диалоговом окне Enter Project Name (Задать имя проекта) параметры, нажмите кнопку ОК для запуска мастера создания нового проекта. Кнопка Cancel (Отмена) позволяет отменить работу мастера.

Рис. 13.15. Диалоговое окно Enter Project Name



Создание новой формы из Галереи компонентов


Из окна Галереи компонентов можно создавать новые и редактировать существующие формы. Для создания новой формы можно воспользоваться одним из приведенных ниже способов.

Щелкнуть на шаблоне или выбрать пункт меню New Form (Новая форма) (рис. 13.16) из контекстного меню любого шаблона в папке Forms (Формы) Галереи компонентов.

Вызвать мастера форм с помощью щелчка мышью на значке Form Wizard (Мастер формы) (рис. 13.16) в папке Forms (Формы) Галереи компонентов.

Рис. 13.16. Каталог Галереи компонентов, из которого можно создавать новые формы



Установка основной программы проекта


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

Чтобы сделать компонент проекта основным, выполните следующие действия:

Выберите в окне проекта файл, который хотите сделать основным.

В меню Project (Проект) выберите команду Set Main (Основная программа) или выберите команду контекстного меню файла Set Main (Основная программа).

В окне проекта имя файла выделяется жирным шрифтом, указывая, чю данный компонент является основной программой (рис. 13.6).

Примечание

Для установки основной программы проекта вы можете также воспользоваться диалоговым окном Project Information (Параметры проекта). На вкладке Files (Файлы) выделите необходимый файл, нажмите правую кнопку мыши и из контекстного меню выберите команду Set Main (Основная программа).

Рис. 13.6. Установка основной программы в окне проекта



Задание параметров проекта


Можно задать параметры, которые будут использоваться в процессе построения каждого проекта. Это информация о разработчике, месте расположения проекта, параметры генерации приложения и значок для выполняемого файла приложения. Чтобы задать параметры проекта, выполите следующие действия:

В меню Project (Проект) выберите команду Project Info (Параметры проекта). Открывается диалоговое окно Project Information (Параметры проекта), содержащее вкладки Project (Проект), Files (Файлы) и Servers (Серверы).

На вкладке Project (рис. 13.2) в полях Author (Автор), Company (Фирма). Address (Адрес), City (Город), Country (Страна), State (Область) и Postal Code (Почтовый индекс) укажите информацию о разработчиках проекта.

Поле ввода Ноmе (Домашний каталог) вкладки Project (Проект) используется для задания места расположения проекта. Для изменения папки, указанной в поле, используется диалоговое окно Обзор папок (рис. 13.3), которое вызывается при нажатии кнопки, расположенной справа от поля ввода. Выберите из открывшегося диалогового окна папку, в которой размещен проект, и нажмите кнопку ОК.

Рис. 13.2. Диалоговое окно Project Information

Рис. 13.3. Диалоговое окно Select Directory

Если вы хотите создать значок, при щелчке на котором будет запускаться выполняемый файл проекта, то установите флажок Attach icon (Определить значок).

В открывшемся диалоговом окне Open (Открыть) найдите на диске файлы с расширением ICO, которые можно использовать в качестве значка для создаваемого приложения. Например, просмотрите предлагаемые Visual FoxPro значки из папки Icons (Значки), входящей в папку Graphics (Графика). В ней, в свою очередь, значки сгруппированы по категориям (рис. 13.4). Выбрав значок, нажмите кнопку ОК для закрытия окна.

Рис. 13.4. Выбор значка для проекта

Просмотрите информацию в поле Last built (Последнее построение). Это поле содержит дату последнего построения проекта.

Для включения отладочной информации в исполняемый код установите флажок Debug info (Информация об отладке). Эта информация поможет при отладке программы и исправлении ошибок, возникших на компьютере конечного пользователя.


Совет

Используйте флажок Debug info (Информация об отладке) только в случае необходимости, так как его установка может привести к декомпиляции программы.
Чтобы сохранить права на интеллектуальную собственность разработанного проекта, используйте флажок Encrypted (Шифровать). Установите этот флажок, если хотите, чтобы Visual FoxPro зашифровал исполняемый код проекта, повышая тем самым степень зашиты вашей программы от декомпиляции.
Нажмите кнопку ОК для закрытия диалогового окна.
Вкладка Files (Файлы) диалогового окна Project Information (Параметры проекта) содержит в табличном виде список файлов, входящих в проект (рис. 13.5). Просмотрите этот список. Для удобства просмотра информации,содержащейся в таблице, данные можно упорядочить по параметрам, представленным в табл. 13.2.
Таблица 13.2. Параметры упорядочения






Наименование столбца

Тип упорядочения

Туре (Тип)

По типам файлов

Name (Имя)

По именам файлов

Last Modified (Последняя модификация)

По дате последней модификации файлов

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

Рис. 13.5. Вкладка Files диалогового окна Project Information

Запуск Галереи компонентов


Для запуска Галереи компонентов выполните одно из перечисленных ниже действий.

Выберите в меню Tools (Сервис) команду Component Gallery (Галерея компонентов).

В командном окне введите следующую команду:

DO (_GALLERY)

При этом на экране открывается окно Галереи компонентов (рис. 13.10). Оно разделено на две области. В левой области размещен иерархический список каталогов, в правой — содержимое каталога, выбранного в левой области.

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

Рис. 13.10. Галерея компонентов



Действия, выполняемые при добавлении новых записей


Триггеры позволяют не только проверять условие достоверности ввода данных на уровне записей, но и выполнять требуемые действия при добавлении, удалении и изменении записей. Рассмотрим один из примеров использования триггера insert.

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

В данном примере определим триггер insert для таблицы customer:

Откройте окно проекта sales.

Выберите таблицу customer, содержащую список товаров, и нажмите кнопку Modify (Модифицировать).

Для определения свойств таблицы перейдите на вкладку Table (Таблица) конструктора таблиц.

В поле ввода Insert trigger (Триггер добавления) задайте вызов функции AddNewCustomer(), которая добавляет новую запись в таблицу NewCustomer.

Для добавления новой хранимой процедуры AddNewCustomer откройте окно редактирования хранимых процедур и добавьте в него следующий текст:

procedure AddNewCustomer

nCurCdCustomer=icdCustomer

SELECT NewCustomer

APPEND BLANK

REPLACE icdCustomer WITH nCurCdCustomer

SELECT NewCustomer

RETURN .T.



Хранимые процедуры


Для создания хранимой процедуры выполните следующие действия:

В окне проекта выберите базу данных.

Перейдите в группу Stored Procedures (Хранимые процедуры).

Нажмите кнопку New (Новый) (рис. 14.2).

Рис. 14.2. Для создания хранимой процедуры предназначена группа Stored Procedures окна проекта

Открывайте окно редактирования хранимых процедур (рис. 14.3). которое содержит все ранее созданные хранимые процедуры, включая процедуры. создаваемые автоматически при определении условий целостности базы данных.

Рис. 14.3. Окно редактирования хранимых процедур

Предупреждение

Редактирование или удаление хранимых процедур, которые Visual FoxPro создал автоматически при определении условия целостности данных, может привести к непредсказуемым последствиям.

Для редактирования хранимых процедур в Visual FoxPro вы можете использовать команду modify procedure, которая открывает окно редактирования хранимых процедур текущей базы данных.

Для удаления хранимой процедуры необходимо в окне редактирования выделить текст удаляемой процедуры и нажать клавишу <Delete> или в окне конструктора проекта установить курсор на ее наименование и выполнить команду Remove (Удалить) окна проекта.



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


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

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

Замечание

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



Использование триггеров и хранимых процедур


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



Определение значения поля при добавлении новой записи


Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.

Откройте окно проекта sales.

Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.

Выберите в окне проекта таблицу Customer и нажмите кнопку Modify (Модифицировать).

Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).

В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum( ) , введя Getautonewttum ("Customer ") (рис. 14.4).

Нажмите кнопку ОК для закрытия конструктора таблицы.

Теперь необходимо определить функцию GetAutoNewNum. Откройте окно редактирования хранимой процедуры и введите следующие команды:

FUNCTION GetAutoNewNum

LPARAMETERS CNameAliasGANN

LOCAL nDefaultValueGANN IF TYPE("cNameAliasGANN")="L"

= GetMessage ("Нужно ввести имя таблицы для определения начального

значения в таблице "+ALIAS()+"!",48,"Функция GetAutoNewNum")

RETURN 1

ENDIF

cNameAliasGANN=ALLTRIM(UPPER(cNameAliasGANN))

DO OpenTable WITH "SALES!RECORDS",1

IF !SEEK(cNameAliasGANN)

APPEND BLANK

REPLACE NameOfTable WITH cNameAliasGANN

REPLACE ColRecordsInTable WITH 1

ELSE

REPLACE ColRecordsInTable WITH ColRecordsInTable+1

ENDIF

nDefaultValueGANN=ColRecordsInTable

SELECT (cNameAliasGANN)

RETURN nDefaultValueGANN

Рис. 14.4. Задание вызова хранимой процедуры



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


В Visual FoxPro при создании представления данных вы можете задать параметры представления. Значения этих параметров будут запрашиваться при открытии представления. Например, в предыдущем примере мы создали представление данных, которое содержит итоговые объемы продаж товаров. Использование параметров позволит вам выбирать не все продажи, а объем продаж за определенный интервал времени, продажи конкретного товара или покупки определенного клиента.

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

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

Выберите в окне проекта представление данных sumcust и нажмите кнопку Modify (Модифицировать).

В окне конструктора представления данных в меню Query (Запрос) выберите команду View Parameters (Параметры представления данных). На экране открывается соответствующее диалоговое окно. Это диалоговое окно содержит список всех параметров представления, для каждого из которых заданы имя параметра и его тип.

Введите параметр Date_View и определите для него тип данных Date (рис. 14.12).

Нажмите кнопку ОК для закрытия диалогового окна.

Определите условие выборки данных для заданной даты. Для этого перейдите на вкладку Filter (Фильтр) конструктора и добавьте условие для поля ordsaiem.dDoc. Для выбора значения за конкретную дату используйте оператор ==, а в поле ввода Example (Образец) введите ?Date_View (рис. 14.13).

Рис. 14.12. Диалоговое окно для определения параметров представления данных

Рис. 14.13. Ввод условия выбора даты

Замечание

Вопросительный знак перед именем параметра является признаком использования параметра

Сохраните представление данных.

Для просмотра итоговых продаж товаров за конкретный день откройте представление данных sumcust. Поскольку для представления определен параметр, на экране появляется диалоговое окно View Parameters (Параметры представления данных), предлагающее ввести значение параметра (рис. 14.14).

Замечание

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

Введите значение параметра и нажмите кнопку ОК. На экране появится выборка за введенную дату.

Рис. 14.14. Диалоговое окно для ввода значения параметра

Замечание

Диалоговое окно View Parameter (Параметры представления данных) для ввода значения параметра рекомендуется использовать только при отладке представления. Вы можете определить переменные, наименования которых совпадают с именем параметра, и присвоить им требуемые значения в программе или форме. В этом случае при открытии представления параметры запрашиваться не будут.



Просмотр объема продаж товаров клиентам


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

Откройте окно конструктора представлений и добавьте в него таблицы Customer, Ordsalem, Ordsaled и Goods, используемые для создания нового представления.

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

Customer и Ordsalem — по коду клиента;

Ordsalem и Ordsaled — по код заказа;

Ordsaled и Goods - по код товара.

В список Selected fields (Выбранные поля) перенесите название фирмы, имя клиента и наименование товара.

Добавьте в список Selected fields (Выбранные поля) вычисляемое поле, содержащее сумму продаж:

SUM(Ordsaled.nQuant * Ordsaled.nUnitPrice)

Задайте группировку данных по названию предприятия, наименованию товара и имени клиента.

Для сохранения представления данных в меню File (Файл) выберите команду Save As (Сохранить как). В поле View Name (Имя представления) открывшегося диалогового окна Save (Сохранить) укажите имя создаваемого представления данных Sumcust и нажмите кнопку ОК.

Просмотрите созданное представление данных (рис. 14.9), нажав кнопку Run (Выполнить) на стандартной панели инструментов.

Закройте окно конструктора представлений.

Рис. 14.9. Просмотр итоговых продаж товаров

Вы можете просмотреть созданное представление данных в окне Data Session (Окно данных). Для этого выполните следующие действия:

В меню Window (Окно) выберите команду Data Session (Окно данных).

Нажмите кнопку Browse (Обзор).

В открывшемся диалоговом окне Open (Открыть) в области Select (Выбор) установите опцию Views (Представления данных).

Выберите из списка Views in database (Представления данных в базе данных) (рис. 14.10) требуемое представление данных и нажмите кнопку ОК.

Рис. 14.10. Выбор представления данных

Рис. 14.11. Окно Data Session после открытия представления данных Sumcust

Замечание

При открытии представления данных в окне Data Session (Окно данных) показывается не только выбранное представление, но и все таблицы, используемые при его создании (рис. 14.11).

Совет

Для открытия представления данных вы можете также в командном окне или в программе воспользоваться командой USE.



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


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

нажмите кнопку Run (Запустить) на стандартной панели инструментов;

выберите команду контекстного меню Run Query (Выполнить запрос);

выберите в меню Query (Запрос) команду Run Query (Выполнить запрос);

нажмите комбинацию клавиш <Ctrl>+<Q>.

На экране появится сформированное представление данных. Для просмотра созданного представления данных вы можете также использовать окно проекта или окно Data Session (Окно данных). Чтобы просмотреть представления данных в окне проекта, достаточно установить на него курсор и нажать кнопку Browse (Обзор). Если вы просматриваете представление в окне Data Session (Окно данных), откройте его как обычную таблицу и нажмите кнопку Browse (Обзор).



Проверка удовлетворения введенных значений заданному условию


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

Откройте окно проекта sales.

Выберите в окне проекта таблицу ordsaied и нажмите кнопку Modify (Модифицировать).

Для определения свойств таблицы перейдите на вкладку Table (Таблица).

В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit о, которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента.

В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 14.5) "Превышена допустимая сумма кредита клиента".

Рис. 14.5. Определение условия достоверности данных

Определим функцию CheckMaxCredit как свойство базы данных, поэтому создадим ее в виде хранимой процедуры.

Для создания хранимой процедуры checkMaxCredit в окне редактирования хранимых процедур, которое содержит ранее созданные программы. введите следующий текст:

procedure CheckMaxCredit

nCdOrder=Ordsaled.icdOrder ыь номер текущего заказа

*вычисляем сумму всех введенных позиций заказа

SELECT SUM(Ordsaled.nQuant*Ordsaled.nUnitPrice);

FROM Ordsalem, Ordsaied;

WHERE Ordsalem.icdOrder = Ordsaied.icdOrder;

AND Ordsaied.icdOrder=nCdOrder; INTO ARRAY nSum

* определяем максимальный кредит клиента из таблицы Customer

SELECT Customer

SEEK Ordsalem.icdCustomer

* если запись о данном покупателе в таблице Customer есть, возвращаем

* результат сравнения суммы заказа с максимальным кредитом

IF FOUND()

RETURN nSum(l) < CUSTOMER.yCreditLimit

ELSE

RETURN .F.

ENDIF

RETURN



Редактирование данных


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

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

Рис. 14.15. Вкладка Update Criteria

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

Кнопка Reset Key (Сброс ключа) устанавливает исходное состояние флажков разрешения модификации и ключевых полей. При этом сбрасываются все флажки в столбце разрешения модификации, а флажки в столбце признака ключевых полей устанавливаются только для тех полей, которые являются первичными ключами.

Кнопка Update All (Обновить все) устанавливает флажки в столбце разрешения модификации для всех полей, кроме ключевых.

Замечание

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



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


Сформированное в окне конструктора представление данных можно сохранить, выполнив следующие действия:

В меню File (Файл) выберите команду Save As (Сохранить как).

В поле View Name (Имя представления) открывшегося диалогового окна Save (Сохранить) (рис. 14.8) укажите имя созданного представления данных.

Нажмите кнопку ОК.

Замечание

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

Рис. 14.8. Задание имени представления данных

Для открытия сохраненного представления данных из окна проекта необходимо установить на него курсор и нажать кнопку Modify (Модифицировать).



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


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

Выберите в меню File (Файл) команду New (Новый). В открывшемся диалоговом окне установите опцию View (Представление данных) и нажмите кнопку New file (Новый файл).

В окне конструктора проекта на вкладке Data (Данные) перейдите в раздел Local Views (Локальные представления данных) выбранной базы данных и нажмите кнопку New View (Новое представление данных).

Введите в командном окне Command команду create view.

Замечание

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

При вызове конструктора представлений открывается диалоговое окно Add Table and View (Добавить таблицу и представление данных), позволяющее разместить в конструкторе таблицы и созданные ранее представления данных. Для отображения представлений в этом диалоговом окне необходимо в области Select (Выбор) установить опцию Views (Представления данных). Выбрав необходимую таблицу или представление данных, перенесите их в конструктор, нажав кнопку Add (Добавить). Сформировав список таблиц. нажмите кнопку Close (Закрыть) для закрытия диалогового окна Add Table and View (Добавить таблицу и представление). Выбранные таблицы размещаются в открывшемся на экране окне конструктора представлений данных (рис. 14.7).

Рис. 14.7. Окно конструктора представлений данных

Окно конструктора представлений данных похоже на окно конструктора запросов и отличается от последнего некоторыми дополнительно предоставляемыми функциями, позволяющими:

указать поля для модификации данных;

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

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

Для формирования представления данных вы можете использовать команды меню Query (Запрос) и кнопки на панели инструментов View Designer (Конструктор представления данных). Функции кнопок панели инструментов View Designer описаны в табл. 14.2.


Таблица 14.2. Назначение кнопок панели инструментов View Designer

Кнопка Название

Назначение

Add Table (Добавить таблицу) Добавляет в представление новую таблицу или представление данных
Remove Table (Удалить таблицу) Удаляет выбранную таблицу из запроса
Add Join (Добавить объединение) Открывает диалоговое окно Join Condition (Условие объединения) для задания условия объединения таблиц

Show the SQL windows (Показать SQL-оператор)

Открывает диалоговое окно, в котором отображается SQL-оператор, соответствующий созданному представлению данных
Maximize the table view (Раскрыть панель представления таблиц)

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

Триггеры


В Visual FoxPro для таблиц, входящих в состав базы данных, вы можете определить триггеры, приведенные в табл. 14.1.

Таблица 14.1. Тригеры

Триггер

Описание

Insert (Вставить)

Определяет действия, которые будут выполняться после добавления новой записи в таблицу

Update (Обновить)

Определяет действия, которые будут выполняться после изменения записи таблицы

Delete (Удалить)

Определяет действия, которые будут выполняться после удаления записи из таблицы

Для определения триггеров введите в поля ввода Insert trigger (Вставить триггер), Update trigger (Обновить триггер) или Delete trigger (Удалить триггер) вкладки Table (Таблица) окна конструктора выбранной таблицы операторы сравнения, вызов хранимой процедуры или любое логическое выражение. Если результат вычисления выражения равен True, то считается, что введены допустимые значения. В противном случае сохранения введенных данных не происходит и формируется сообщение об ошибке. При использовании хранимых процедур вы сможете не только проверить условие достоверности ввода данных, но и задать действия, выполняемые при добавлении, удалении и изменении данных.

Вызов триггера Delete (Удалить) осуществляется:

при выполнении команды delete;

когда вы помечаете запись на удаление в режиме Browse (Обзор) или Edit (Правка).

Вызов триггера insert (Вставить) осуществляется в следующих случаях:

при выполнении команд append from, append from array/append blank;

при добавлении в таблицу новой записи в режиме Browse (Обзор) или Edit (Правка);

при выполнении команд import, insert - sql, recall;

при снятии метки об удалении записи в режиме Browse (Обзор) или Edit (Правка).

Триггер update (Обновить) вызывается, когда:

наступает любое событие, которое приводит к модификации записи (например, при изменении значения поля);

выполняются команды gather, replace, replace from array, UPDATE - SQL.

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

при модификации записей, помеченных для удаления, и выполнении команды pack триггеры не вызываются;

выполнение команды zap не вызывает триггер Delete (Удалить);

при использовании буферизации ввода триггер update (Обновить) вызывается только при вызове функции tableupdate ().

Для удаления триггера в окне конструктора перейдите на вкладку Table (Таблица) и очистите поле ввода выражения для триггера или используйте команду DELETE TRIGGER.



Условия достоверности ввода данных на уровне записей


В реляционных базах данных, к которым относится и Visual FoxPro, для управления данными могут использоваться не только прикладные программы, но и непосредственно сервер базы данных. Данная возможность реализуется с помощью условий достоверности ввода данных, триггеров и хранимых процедур, которые являются неотъемлемой частью базы данных. Удобным средством просмотра хранящейся в базе данных информации являются представления данных, которые содержат результат выборки из одной или нескольких таблиц, удовлетворяющих заданному условию. Представления данных имеют много общего с запросами и таблицами. Так же, как и для запросов, вы можете связывать несколько таблиц, указывать отображаемые поля, задавать условие выборки. Просмотр представления данных осуществляется аналогично просмотру таблицы Visual FoxPro.

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

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

Для определения свойств таблицы откройте окно конструктора для выбранной таблицы и перейдите на вкладку Table (Таблица) (рис. 14.1).

Рис. 14.1. Определение свойств таблицы

Для определения достоверности ввода данных могут использоваться триггеры добавления и изменения и поля ввода Rule (Условие) и Message (Сообщение) области Record validation (Проверка правильности ввода записей). В поле Rule (Условие) вводится логическое выражение, которое может содержать вызов хранимой процедуры. Если значение этого выражения равно True (Истина), то считается, что введены допустимые данные и разрешается переход на другую запись или закрытие таблицы. В противном случае выводится сообщение об ошибке, которое было задано в поле Message (Сообщение).


Для определения условия достоверности ввода данных на уровне поля таблицы используется область Field validation (Проверка правильности ввода) вкладки Fields (Поля) окна конструктора таблиц. В поле Rule (Условие) задается логическое выражение, а в поле Message (Сообщение) — сообщение, отображаемое на экране, если логическое выражение возвращает значение False.

Определим условие достоверности данных для поля nQuant, содержащего количество купленного товара, таблицы ordsaled. При вводе количества товара необходимо автоматически проверять его фактическое количество на складе.

Для определения данного условия достоверности данных выполните следующие действия:

Откройте проект sales.

Перейдите на вкладку Data (Данные).

В разделе Tables (Таблицы) выберите таблицу ordsaled и нажмите кнопку Modify (Модифицировать).

В окне конструктора таблицы выберите поле nQuant.

В поле ввода Rule (Условие) области Field validation (Проверка правильности ввода) введите вызов функции CheckQuant ( ) .

В поле ввода Message (Сообщение) введите текст сообщения: "Заказанное количество товара превышает его фактическое количество"(рис. 14.6).

Откройте окно редактирования хранимых процедур и добавьте в него новую процедуру CheckQuant:

procedure CheckQuant

nCdGoods = Ordsaled.iCdGoods

* определяем фактическое количество товара

SELECT nFactQuant;

FROM Goods;

WHERE iCdGoods = nCdGoods;

INTO ARRAY nQuant

* сравниваем заказанное количество с имеющимся на складе

RETURN Ordsaled.nQuant(1) <= nQuant(1)

Рис. 14.6. Определение условия достоверности для поля nQuant



Установка редактируемых полей


Рассмотрим последовательность действий при создании представления данных, позволяющего редактировать информацию в полях, содержащих фамилию, имя и отчество клиента.

Откройте окно конструктора представлений и добавьте в него таблицу Customer.

В список Selected fields (Выбранные поля) перенесите наименование фирмы cCompany, а также cLastName, cFirstName И cSecondName.

Для определения редактируемых полей перейдите на вкладку Update Criteria (Критерий обновления).

Установите флажки разрешения редактирования для полей cLastName, cFirstName и cSecondName.

Установите флажок Send SQL updates (Передавать команду SQL по изменению исходной таблицы) (рис. 14.16).

Рис. 14.16. Задание параметров для редактирования фамилии, имени и отчества клиентов

Сохраните представление данных и откройте его для редактирования данных в режиме Browse (Обзор) (рис. 14.17).

Рис. 14.17. Редактирование информации о клиентах



Добавление данных в список


В главе 6 мы рассматривали использование объектов типа ListBox (Список), которые значительно облегчают ввод данных в поля, одновременно избавляя от дополнительных ошибок, которые могут возникнуть при вводе. Список может формироваться из значений, содержащихся в поле таблицы, массива, запроса и т. п. В этой главе рассмотрим создание списка, значения которого вводятся пользователем в интерактивном режиме с использованием дополнительного поля ввода.

Создание списка рассмотрим на примере редактирования поля, содержащего город, для таблицы customer. Выполните следующие действия:

Откройте форму для ввода списка клиентов в окне конструктора форм.

Нажмите кнопку List Box (Список)

на панели инструментов Form Controls (Элементы управления формы).

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

Откройте окно свойств для размещенного в форме списка.

Скорректируйте свойство Name (Имя) созданного объекта, присвоив ему имя lstcity.

Чтобы связать созданное поле с полем таблицы customer, выберите свойство controisource (Источник данных). В поле ввода значения свойства воспользуйтесь кнопкой раскрытия списка и из списка всех полей открытой таблицы Customer выберите поле ccity.

Скорректируйте свойство RowSourceType (Тип источника данных), которое указывает тип источника данных. Выберите из списка значение Value (Значение), поскольку список городов будет формироваться с помощью вводимых значений.

Используя кнопку Text Box (Поле ввода)

на панели инструментов Form Controls (Элементы управления формы), создайте под списком поле редактирования.

Скорректируйте свойство Name (Имя) поля редактирования, присвоив ему имя txtAddText.

Используя окно процедур свойства Keypress (Нажатие клавиши), введите в нем следующие команды:

LPARAMETERS nKeyCode, nShiftCtrlAlt

IF nKeyCode = 13 && 13 к:л :-:-ав1си <Enter>


IF !EMPTY(THIS.Value)

* добавляем значен;;" в список THISFORM.lstCity.Addltem (THIS.Value)

ENDIF * очищаем поле ввода

THIS.Value = "" ENDIF

Эта процедура позволит пользователю ввести текст в поле ввода и нажатием клавиши <Enter> добавить значение в список, освободив окно для ввода следующей информации (рис. 15.27).



Рис. 15.27. Определение свойства KeyPress

Теперь при запуске формы на выполнение значения, введенные в поле ввода Поле формирования списка, при нажатии клавиши <Enter> переносятся в список городов (рис. 15.28).



Рис. 15.28. Формирование списка с помощью поля ввода в диалоговом режиме


Использование построителя


Использование построителя ускоряет размещение объекта в форме и определение его свойств. Особенно заметным это преимущество становится при создании сложных объектов, к числу которых относится объект Grid (Таблица). Рассмотрим пример размещения объекта Grid (Таблица) с помощью построителя для таблицы customer и изучим свойства, которыми наделен данный объект.

Для создания формы, в которой данные будут представлены в табличном виде, выполните следующие действия:

Откройте проект Sales.

Выберите вкладку Documents (Документы), перейдите в группу Forms (Формы), а затем нажмите кнопку New (Новый).

В открывшемся диалоговом окне New Form (Новая форма) выберите опцию New Form (Новая форма). На экране открывается окно конструктора форм.

Откройте окно среды окружения формы Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).

Для добавления таблицы в окружение выполните команду контекстного меню Add (Добавить).

В открывшемся диалоговом окне Add Table or View (Добавить таблицу или представление данных) выберите таблицу customer и нажмите кнопку ОК. В окне Data Environment (Среда окружения) появилась выбранная таблица. Закройте окно окружения.

Нажмите кнопку Builder Lock (Закрепитель построителя)

на панели инструментов Form Controls (Элементы управления формы).

Выберите кнопку Grid (Таблица)

на панели инструментов Form Controls (Элементы управления формы).

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

Запускается построитель, и на экране открывается диалоговое окно Grid Builder (Построитель таблицы) (рис. 15.1), позволяющее задать основные параметры объекта Grid (Таблица).

Диалоговое окно построителя объекта Grid (Таблица) содержит четыре вкладки, используя которые вы можете настроить его параметры (табл. 15.1).

Таблица 15.1. Назначение вкладок окна Grid Builder

Вкладка Назначение
Grid Items (Элементы объекта Grid) Позволяет сформировать список полей, размещаемых в создаваемом объекте
Style (Стиль) Позволяет задать стиль отображения таблицы, выбрав один из предложенных вариантов: Professional (Профессиональный), Standard (Стандартный), Embossed (Изысканный), Ledger (Бизнес)
Layout (Расположение) Позволяет переопределить заголовки столбцов объекта Grid (Таблица) и определить тип объекта, отображаемого в столбце таблицы
Relationship (Отношения)

При создании многотабличных форм позволяет определить отношения между таблицами
<


Рис. 15.1. Диалоговое окно Grid Builder

Используя кнопки со стрелками, перенесите из списка Available fields (Имеющиеся поля) в список Selected fields (Выбранные поля) поля, ко торые вы хотите разместить, используя объект Grid (Таблица).

Для задания стиля отображения данных в таблице перейдите па вкладку Style (Стиль). Используя одноименный список, выберите один из вариантов оформления таблицы (рис. 15.2).

По умолчанию заголовки столбцов совпадают с именами полей таблицы, заданными в свойстве caption (Надпись) конструктора таблиц. Чтобы переопределить заголовки столбцов объекта Grid (Таблица), перейдите на вкладку Layout (Расположение) (рис. 15.3). Она содержит создаваемый объект с реальными данными. При перемещении по столбцам таблицы в поле ввода Caption (Надпись) вкладки отображается наименование данного столбца. Для изменения наименования столбца скорректируйте имя, отображаемое в этом поле.



Рис. 15.2. Определение стиля объекта Grid

На вкладке Layout (Расположение) вы можете задать тип объекта, отображаемого в столбце. Для этого воспользуйтесь раскрывающимся списком Control type (Стиль элементов управления), содержащим перечень всех типов объектов, которые могут отображаться в столбце: Textbox, Editbox, Spinner, Checkbox и OLEBoundControl. Выберите ИЗ списка не-обходимое значение типа данных столбца.

Замечание

При использовании объекта Grid (Таблица) для создания многотабличных форм вы можете выбрать вкладку Relationship (Отношение) (рис. 15.4) и на ней задать ключевое поле главной таблицы и индекс подчиненной таблицы. Если вторая таблица не добавлена в окружение формы, нажмите кнопку, расположенную рядом со списком Key field in parent table (Ключевое поле в родительской таблице), и в открывшемся диалоговом окне Open (Открыть) выберите необходимую таблицу. Она будет добавлена построителем в окружение формы.



Рис. 15.3. Переопределение заголовков столбцов объекта Grid



Рис. 15.4. Вкладка Relationship для установки связи между таблицами

После завершения определения всех параметров нажмите кнопку ОК для закрытия окна построителя.

Используя кнопку Label (Текстовый объект) на панели инструментов Form Controls (Элементы управления формы), разместите заголовок в форме.

На рис. 15.5 представлена форма, содержащая созданный объект Grid (Таблица). Для перемещения по записям таблицы customer можно использовать размещенную справа от таблицы полосу прокрутки.



Рис. 15.5. Использование в форме объекта Grid для отображения информации в табличном виде


Набор форм


В Visual FoxPro вы можете объединить несколько форм в набор форм. Для этого служит команда Create Form Set (Создать набор форм) из меню Form (Форма), создающая объект Formset.

Создадим объект Forrmset из двух форм. Первая форма содержит данные о клиентах таблицы customer, а вторая — итоговую сумму покупок клиентов. Для создания набора форм выполните следующие действия:

Откройте Проект Sales.

Откройте окно конструктора для создания новой формы.

Выберите в меню Form (Форма) команду Create Form Set (Создать набор форм).

Откройте окно Data Environment (Среда окружения) и добавьте в окружение таблицу customer и представление данных sumcust, содержащее сведения об итоговой стоимости покупок клиентов.

Скорректируйте свойство caption (Надпись) для первой формы, введя заголовок Клиенты.

В форме создайте объект Grid (Таблица), разместив в нем необходимые поля таблицы Customer.

Для добавления второй формы выполните команду Add New Form (Добавить новую форму) из меню Form (Форма). В окне конструктора форм откроется вторая форма.

Скорректируйте свойство caption (Надпись) для второй формы, введя заголовок Итоговые суммы покупок.

Во второй форме создайте объект Grid (Таблица), разместив в нем поля представления данных sumcust.

Расположите формы на экране таким образом, чтобы они были удобны для их поочередного просмотра.

Рис. 15.24. Просмотр набора форм

Сохраните созданную форму, нажав кнопку Save (Сохранить) на стандартной панели инструментов.

Запустите форму на выполнение.

На экране открывается две формы (рис. 15.24). Просмотрев данные в первой форме, перейдите во вторую форму. Для этого активизируйте ее. щелкнув мышью в любом ее месте. Во второй форме вы можете просмотреть итоговые суммы покупок интересующего вас клиента.



Отображение данных в форме в табличном виде


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

В Visual FoxPro для отображения в форме данных в табличном режиме используется объект Grid (Таблица), который может помещаться в форму, как и любой другой объект интерфейса.

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



Создание формы с использованием таймера


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

В проекте Sales, используя таблицы Goods, Ordsaled и Ordsalem, создайте представление данных, содержащее наименование товара, суммарное количество проданного товара и суммы продаж по данному товару.

Сгруппируйте данные по коду товара.

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

Откройте новое окно конструктора форм.

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

Создайте в форме объект Grid (Таблица), разместив в нем все поля представления данных.

Для отображения текущей даты и времени расположите два поля ввода curDate и curTime. Скорректируйте для данных объектов свойство Readonly (Только чтение), установив значение True (Истина).

Для создания объекта-таймера нажмите кнопку Timer (Таймер) на панели инструментов Form Controls (Элементы управления формы) и расположите его в форме.

Откройте окно процедур для метода Timer (Таймер).

Для присвоения значений созданным полям curDate и curTime, а также для обновления данных о продаже товаров через заданный интервал времени введите в окне процедур следующие значения:

This.Parent.CurDate.Value = DATE()

This.Parent.CurTime.Value = TIME()

This.Parent.CurDate.Refresh()

This.Parent.CurTime.Refresh()

ThisForm.Gridl.Refresh()

Определите интервал времени, через который необходимо производить обновление данных в таблице. Для этого воспользуйтесь свойством interval (Промежуток времени), значение которого задается в миллисекундах. Для обновления данных каждые 10 мин введите значение 600000.

Форма готова. Сохраните ее и запустите на выполнение.

Рис. 15.25. Использование таймера в форме

Рис. 15.26. Просмотр итоговых продаж через заданный промежуток времени

При работе в сети каждые десять минут на экране будет обновляться информация об итоговом количестве продаж товаров и их стоимости. На рис. 15.25 показан вид созданной формы, а на рис. 15.26 — просмотр данных с помощью этой формы.



Создание формы с вкладками


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

Чтобы создать вкладки в форме, необходимо воспользоваться кнопкой Page Frame (Вкладка)

панели инструментов Form Controls (Элементы управления формы). Созданный объект содержит в контекстном меню команду Edit (Правка), указывающую, что он является сложным объектом, в котором вкладки наделены своими собственными свойствами. Количество вкладок задается свойством PageCount (Количество вкладок). В процессе создания формы переход с одной вкладки на другую осуществляется в режиме редактирования.

Создание объекта типа Page Frame (Вкладка) рассмотрим на примере разработки многостраничной формы для таблицы customer. Форма будет содержать две вкладки. На первой вкладке будет располагаться объект Grid (Таблица), содержащий список всех клиентов, а на второй — дополнительные данные о выбранном на первой вкладке клиенте.

Откройте Проект Sales.

Откройте окно конструктора форм для создания новой формы. Скорректируйте свойство caption (Надпись) формы, введя заголовок формы Список клиентов.

Откроите диалоговое окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).

Используя команду Add (Добавить) всплывающего меню, добавьте в форму таблицу customer. Закройте диалоговое окно.

Нажмите кнопку Page Frame (Вкладка) на панели инструментов Form Controls (Элементы управления формы).

Установите указатель в форму и, удерживая кнопку мыши в нажатом состоянии, переместите курсор по диагонали так, чтобы получилась рамка размером с форму (рис. 15.20).

Откройте окно свойств созданного объекта. Убедитесь, что для свойства PageCount. определяющего количество вкладок формы, по умолчанию установлено значение 2.

Скорректируйте свойство caption (Надпись) для объектов Pagei и Раде2. определяющих заголовок каждой вкладки. Для объекта Pagei введите заголовок Основная информация, а для объекта Раде2 — Дополнительная информация


Для перехода в режим редактирования объекта Page Frame (Вкладка) выберите команду Edit (Правка) контекстного меню. Вокруг объекта появилась штриховая контурная рамка.

Убедитесь, что вы находитесь на первой вкладке объекта Page Frame (Вкладка). Для этого щелкните на вкладке Основная информация в верхней части формы.



Рис. 15.20. Размещение в форме объекта Page Frame

Используя кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы), создайте объект Grid (Таблица) для отображения полей icdCustomer, cCompany таблицы Customer.

В третьем столбце таблицы для отображения фамилии, имени и отчества представителя в свойстве controisource (Источник данных) введите выражение следующего вида:

all trim(customer.cLastname) + " " + alltrim(customer.cFirstname) + " " + alltrim(customer.cSecondname)

Определите заголовки столбцов и другие параметры созданного объекта Grid (Таблица).

В нижней части страницы расположите кнопки перемещения по записям таблицы и выхода из формы.

На рис. 15.21 представлена первая вкладка созданной формы.



Рис. 15.21. Первая страница многостраничной формы

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

Совет

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

На второй странице объекта расположите все поля таблицы customer и надписи к ним.

При переходе на другую вкладку формы необходимо обновлять значения данных, отображаемых в ней. Для этого вы можете использовать событие Activate (Активизация) каждой вкладки Объекта Page Frame (Вкладка). Откройте окно редактирования процедуры обработки данною события и введите следующую команду, использующую метод Refresh (Обновить):

_screen.ActiveForm.Refresh()

Окно процедур для метода Refresh представлено на рис. 15.22.

Замечание

Обратите внимание, что после ввода информации в окно процедуры в свойстве данного метода появляется значение [user Procedure].



Рис. 15.22. Окно процедур для метода Refresh

Сохраните созданную форму и запустите ее на выполнение.

Используя первую вкладку формы, вы можете, перемещаясь по записям таблицы, просмотреть весь список клиентов. Для просмотра дополнительной информации по любому из клиентов установите на него курсор и нажмите ярлык Дополнительная информация. В результате откроется вторая вкладка формы (рис. 15.23), на которой располагается дополнительная информация о выбранном клиенте.



Рис. 15.23. Вторая вкладка формы


Создание формы, содержащей объект Grid


Рассмотрим создание формы, с помощью которой можно просмотреть информацию о клиентах, их телефонах и сделанных ими покупках. В отчете будем использовать следующие таблицы: Customer, Phoncust. Ordsaleir..ordsaied и Goods. В таблицах содержится следующая информация:

customer - список клиентов;

phoncust — средства связи, по которым можно связаться с клиентом;

ordsaiem — информация о продажах: номер заказа, дата заказа, код клиента, итоговая сумма заказа;

Ordsaied — код, количество и стоимость проданного товара но данному заказу;

Goods — информация о товарах.

Отношение между таблицами customer и phoncust определяется как "один-ко-многим", так как клиент может иметь несколько номеров телефона или факс для связи.

Отношение между таблицами customer и ordsalem также "один-ко-многим", поскольку каждый клиент может сделать несколько покупок.

Приступим к созданию формы.

Откройте проект sales.

Откройте окно конструктора форм для создания новой формы.

Откройте окно Data Environment (Среда окружения), выполнив команду Environment (Окружение) из меню View (Вид).

Используя команду Add (Добавить) из меню Data Environment (Среда окружения), Добавьте В форму таблицы Customer, Phoncust, Ordsalem, ordsaied и Goods. Между ними существуют следующие отношения:

customer — родительская по отношению к таблицам phoncust и Ordsalem;

Ordsalem — родительская по отношению к таблице Ordsaied;

ordsaied - родительская по отношению к таблице Goods. Связь между таблицами осуществляется:

Customer и Phoncust — по коду клиента;

Customer и Ordsalem — по коду Клиента;

Ordsalem и Ordsaied — по коду заказа;

Ordsaied и Goods — по коду товара.

Данные В таблицах Customer, Ordsalem иPhoncust должны быть упорядочены по коду клиента, в ordsaied — по коду заказа, а в Goods — по коду товара.

Установив все необходимые связи между таблицами и указав упорядочение данных (рис. 15.15), закройте окно Data Environment (Среда окру жения).

Используя кнопки панели инструментов Form Controls (Элементы управления формы), расположите в форме заголовок, надписи и необходимые поля таблицы Customer.


Выберите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы).

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

Для определения параметров созданного объекта выделите его и откройте окно свойств, выполнив команду Properties (Свойства) из меню View (Вид).



Рис. 15.15. Окно Data Environment создаваемой формы

Скорректируйте свойство coiumncount (Количество столбцов) объекта Grid (Таблица), задав количество столбцов в создаваемом объекте равнным 3.

Если вы хотите изменить цвет сетки таблицы, определите свойство GridLineCoior (Цвет сетки таблицы) объекта Grid (Таблица).

Используя свойство Controisource (Источник данных) каждого из трех объектов column (Столбец), входящих в объект Grid (Таблица), свяжите столбцы с полями таблицы Phoncust.

Используйте Caption (Надпись) каждого из трех объектов Header (Заголовок), входящих в объект Grid (Таблица), введите заголовки столбцов Вид связи, Номер кода и Номер. Чтобы заголовки располагались по центру столбцов, скорректируйте для каждою из них свойстве Alignment (Выравнивание), установив значение Middle center (По середине, в центре).

Определение первого объекта Grid (Таблица) завершено. Разместим в форме второй объект Grid (Таблица).

Нажмите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы).

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

Для определения параметров созданного объекта выделите его и откройте окно свойств.

Скорректируйте свойство coiumncount (Количество столбцов) объекта Grid (Таблица), задав количество столбцов (6) в создаваемом объекте.

Если необходимо выбрать цвет сетки таблицы, определите свойство GridLineCoior (Цвет сетки таблицы) объекта Grid (Таблица).

Используя свойство controisource (Источник данных) каждого из пяти объектов column (Столбец), входящих в объект Grid (Таблица), выполните следующие действия:



свяжите первые два столбца с полями cnDoc и dDoc таблицы Ordsalem;

свяжите третий столбец с полем cnmGoods таблицы Goods;

четвертый и пятый столбцы свяжите с полями nQuant и nUnitPrice таблицы Ordsaled.

Шестой столбец таблицы будет содержать вычисляемое поле, определяющее стоимость проданного товара. Используя свойство Controisource (Источник данных) для шестого объекта column (Столбец), задайте выражение для вычисляемого поля:

Ordsaled.nQuant*Ordsaled.nUnitPrice

Используя свойство caption (Надпись) каждого из шести объектов Header (Заголовок), входящих в объект Grid (Таблица), введите заголовки столбцов: Номер документа, Дата, Наименование товара, Количество, Цена и Стоимость. Чтобы заголовки столбцов располагались по центру, скорректируйте для каждого из них свойство Alignment (Выравнивание), установив значение Middle center (По середине, в центре).

Используя свойство Forecoior каждого из пяти объектов Text (Текст), входящих в объект Grid (Таблица), установите цвет (например, красный) для выделения информации при установке курсора на данное поле.

Добавьте в создаваемую форму кнопки перемещения по записям. Полученная форма показана на рис. 15.16.

Сохраните созданную форму и запустите ее на выполнение. Отметьте, что при перемещении по записям таблицы Customer в первом объекте Grid (Таблица) отображается список телефонных номеров, по которым можно связаться с клиентом, а во втором объекте Grid (Таблица) показывается полный список товаров, купленных данным клиентом (рис. 15.17).



Рис. 15.16. Многотабличная форма



Рис. 15.17. Просмотр многотабличной формы


Создание формы, содержащей три объекта Grid


В рассмотренном примере мы использовали поля формы для отображения информации главной таблицы. Модифицируем созданную форму и разместим поля таблицы customer в объекте Grid (Таблица).

Откройте в окне конструктора форм созданную в предыдущем примере форму и сохраните ее под новым именем.

Удалите из формы все поля и надписи, оставив только объекты Grid (Таблица) (рис. 15.18).

Рис. 15.18. Удаление из формы полей ввода и надписей к ним

Нажмите кнопку Grid (Таблица) на панели инструментов Form Controls (Элементы управления формы), установите указатель в левой верхней части формы и создайте новый объект Grid (Таблица).

В окне свойств созданного объекта скорректируйте для объекта Grid (Таблица) свойство columncount (Количество столбцов), задав количество столбцов (4) в создаваемом объекте.

Свяжите столбцы объекта с полями cCompany, cLastName, cFirstName и cAddress таблицы Customer.

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

Сохраните форму и запустите ее на выполнение. Вид созданной формы показан на рис. 15.19.

Рис. 15.19. Форма с тремя объектами Grid



Создание многотабличной формы с помощью мастера


Рассмотрим создание формы для связанных таблиц customer и Phoncust, имеющих отношение "один-ко-многим", с помощью мастера. Таблица customer содержит информацию о клиентах, таблица Phoncust - номера телефонов, по которым можно с ними связываться.

Откройте проект sales.

Перейдите на вкладку Documents (Документы), выберите группу Forms (Формы) и нажмите кнопку New (Новый).

В открывшемся диалоговом окне New Form (Новая форма) выберите опцию Form Wizard (Мастер формы).

Рис. 15.7. Диалоговое окно для выбора мастера многотабличной формы

На экране открывается диалоговое окно, предназначенное для выбора мастера создания формы (рис. 15.7). Поскольку мы создаем форму для связанных таблиц, выберите опцию One-to-Many Form Wizard (Мастер формы с отношением один-ко-многим) и нажмите кнопку ОК для вызова мастера многотабличной формы.

В области Databases and tables (Базы данных и таблицы) выберите главную таблицу формы Customer. После выбора таблицы в списке Available fields (Имеющиеся поля) появится перечень всех полей данной таблицы. Перенесите из этого списка в список Selected fields (Выбранные поля) поля, которые вы хотите поместить в создаваемую форму из данной таблицы (рис. 15.8). Затем нажмите кнопку Next (Далее) для перехода к следующему шагу.

Рис. 15.8. Выбор полей главной таблицы

На втором шаге работы мастера выберите подчиненную таблицу и ее поля, которые будут размещены в форме в виде объекта Grid (Таблица) (рис. 15.9). Для перехода к следующему шагу нажмите кнопку Next (Далее).

На третьем шаге мастера необходимо установить связь между таблицами. используемыми в форме (рис. 15.10). В диалоговом окне размещены два раскрывающихся списка, содержащие индексы и поля исходных таблиц. В нашем примере для установления связи воспользуемся ключевым полем icdCustomer таблицы Customer и индексом icdCustomer таблицы phoncust. Установив связь между таблицами, нажмите кнопку Next (Далее).

Рис. 15.9. Выбор полей подчиненной таблицы, помещаемых в объект Grid

Рис. 15.10. Установка связи между таблицами


На четвертом шаге (рис. 15.11) необходимо установить стиль отображения объектов формы, воспользовавшись значениями из списка Style (Стиль), и тип кнопок управления, выбрав одну из опций в группе Button type (Тип кнопки). Выберите стиль, просмотрите результат выбора в верхней части диалогового окна. Затем выберите тип отображения кнопок управления (с текстовыми надписями или с изображениями). Если вы не хотите размещать кнопки в форме, установите опцию No buttons (Без кнопок). После того как вы установили требуемые параметры, нажмите кнопку Next (Далее).



Рис. 15.11. Выбор стиля отображения полей и управляющих кнопок



Рис. 15.12. Установка критерия сортировки данных

На следующем шаге формируется список полей, по которым будет осуществляться сортировка отображаемых в форме данных. Для переноса поля из списка Available fields or index tag (Имеющиеся поля и индексы) в список Selected fields (Выбранные поля) установите курсор на поле или индекс, по значению которого требуется упорядочивать данные, и нажмите кнопку Add (Добавить). Если вы ошибочно перенесли не то поле или индекс, удалить его из списка Selected fields (Выбранные поля) можно с помощью кнопки Remove (Удалить). Установите опцию Ascending (По возрастанию) или Descending (По убыванию), определяющую, по возрастанию или по убыванию значения выбранного поля будут упорядочиваться данные (рис. 15.12). Для перехода к следующему шагу создания формы нажмите кнопку Next (Далее).

На последнем, шестом шаге, в поле ввода Type a title for your form (Введите заголовок формы) задайте заголовок, размещаемый в форме, и выберите один из трех вариантов продолжения работы с формой (рис. 15.13) (табл. 15.3).

Таблица 15.3. Варианты продолжения работы с формой

Опция Действие
Save form for later use (Сохранить форму) Созданная форма сохраняется на диске
Save and run form (Сохранить и запустить форму на выполнение) Созданная форма сохраняется и запускается на выполнение
Save form and modify it in the Form Designer (Сохранить и открыть для модификации в конструкторе форм) Созданная форма сохраняется и открывается в конструкторе форм для модификации
<


В форме находятся флажки следующего назначения:

Use field mappings (Использовать соответствия полей). При установке флажка мастер использует соответствия типов объектов, создаваемых в форме при размещении в ней полей таблицы, заданные на вкладке Field Mapping (Связь типов элементов управления с типами полей таблиц) диалогового окна Options (Параметры);

Override with DBC field display classes (Заменять классами объектов, заданных для полей таблицы). При установке флажка мастер использует соответствия типов объектов, создаваемых в форме при размещении в ней полей таблицы, заданные в конструкторе таблицы на вкладке Fields (Поля) с помощью списка Display class (Показывать класс) области Map field type to classes (Используемые типы полей для классов). Если эти соответствия не заданы, используется опция Use field mappings.

После установки требуемых параметров нажмите кнопку Finish (Готово) для завершения создания объекта с помощью мастера. В открывшемся диалоговом окне Save as (Сохранить как) выберите папку, в которой хотите разместить форму, и введите имя созданной формы.



Рис. 15.13. Заключительное диалоговое окно мастера



Рис. 15.14. Многотабличная форма, созданная с помощью мастера форм

Посмотрите на форму, созданную с помощью мастера (рис. 15.14). Надписи к полям основной таблицы созданы с использованием информации, введенной в поле Caption (Надпись) свойства таблицы. Однако при формировании названий столбцов объекта Grid (Таблица) мастер не использовал это свойство таблицы. Для изменения наименований столбцов вам потребуется конструктор форм.


Создание многотабличных форм для таблиц, имеющих отношение "один-ко-многим"


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



Создание объекта Grid с помощью конструктора форм


Форма для таблиц, имеющих отношение "один-ко-многим", с помощью мастера создается достаточно быстро. Но она требует определенной доработки в конструкторе форм. Поэтому вам необходимо уметь создавать многотабличные формы с помощью конструктора, чтобы при необходимости их модифицировать. Для создания формы в конструкторе форм необходима следующая последовательность шагов:

В окне Data Environment (Среда окружения) разместите таблицы, используемые в форме.

Установите связи между таблицами.

Разместите в форме поля главной таблицы.

Создайте в форме объект Grid (Таблица) для отображения данных подчиненной таблицы.



Свойства объекта Column


Объект column (Столбец) является составной частью объекта Grid (Таблица) и определяет информацию, выводимую в столбцах объекта Grid (Таблица).

Используя свойства объекта column (Столбец), можно задать цвет фона столбца, а также цвет выводимой информации, тип шрифта, размер, выделив тем самым наиболее важную информацию в размещенном в форме табличном объекте.

Объект column (Столбец) характеризуется следующими основными свойствами:

columnOrder — задает порядок следования столбцов;

Alignment — выравнивает информацию в столбце;

controisource — связывает столбец с источником данных.



Свойства объекта Grid


Построитель — удобное средство для быстрого создания объекта Grid (Таблица). Однако созданный с его помощью объект требует некоторой модификации внешнего вида. С этой целью рассмотрим основные свойства, характеризующие объект Grid (Таблица).

Щелкните правой кнопкой мыши на объекте Grid (Таблица). В контекстном меню содержится команда Edit (Правка), указывающая, что объект является сложным, т. е. состоящим из нескольких входящих в нею объектов. Такими объектами являются column (Столбец), Header (Заголовок) и Text (Текст). Выделите объект Grid (Таблица) и откройте окно свойств (рис. 15.6). Созданный объект характеризуется свойствами, относящимися ко всему объекту в целом. Помимо этого, объекты column (Столбец), Header (Заголовок) и Text (Текст) обладают своими собственными свойствами.

Объекты, характеризующие столбцы таблицы, представлены в табл. 15.2.

Таблица 15.2. Назначение объектов, характеризующих столбцы таблицы

Объект Назначение
Column (Столбец) Определяет свойства, относящиеся к помещаемой в столбец информации
Header (Заголовок) Определяет свойства, характеризующие заголовок столбца
Text (Текст) Определяет свойства поля таблицы, когда на нем установлен фокус

Рис. 15.6. Окно свойств объекта Grid



Свойства объекта Header


Объект Grid (Таблица) состоит из столбцов, каждый из которых имеет собственный заголовок, являющийся объектом Header (Заголовок). В Visual FoxPro заголовок каждого столбца является самостоятельным объектом. Его можно корректировать, изменяя свойства.

Свойство caption (Надпись) объекта определяет наименование заголовка столбца, а свойство Alignment (Выравнивание) задает его расположение в столбце.

Помимо этого, объект Header (Заголовок), как и объект column (Столбец). характеризуется свойствами, определяющими цвет фона, тип и размер шрифта заголовка.



Свойства объекта Text


Объект Text (Текст) определяет вид информации, выводимой в столбцах объекта Grid (Таблица), при установленном курсоре на текущую запись в столбце.

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



Свойства, определяющие объект Grid


Сначала обратимся к основным свойствам, определяющим объект Grid (Таблица) в целом. К числу таких свойств относятся:

columnCount — количество столбцов в создаваемом объекте Grid (Таблица);

GridLinewidth — толщина сетки таблицы;

GridLineCoior — цвет сетки таблицы;

GridLines - стиль оформления таблицы; может принимать одно из следующих значений:

None (Нет) — в таблице отсутствуют горизонтальные и вертикальные линии;

Horizontal (Горизонтальные) — в таблице присутствуют горизонтальные линии;

vertical (Вертикальные) — в таблице присутствуют только вертикальные линии;

Both (Default) (Горизонтальные и вертикальные) — в таблице присутствуют горизонтальные и вертикальные линии;

RecordSource — задает источник данных помещаемой в объект информации;

RecordSourceType - задает тип источника данных и может принимать одно из следующих значений:

Table (Таблица) — автоматически открывает таблицу, заданную свойством RecordSource;

Alias (Псевдоним) — использует заданный псевдоним таблицы;

Prompt (Запрашиваемое значение) — если для формы в среде окружения не определены таблицы, запрашивается исходная таблица для отображения в объекте Grid (Таблица);

Query (qpr) (Запрос) — в качестве источника данных используются результаты запроса;

SQL statement (SQL-предложение) — в качестве источника данных используется SQL-предложение;

childOrder — задает имя индекса, используемого для установления связи между таблицами;

RecordMark - определяет наличие с левой стороны объекта Grid (Таблица) столбца, содержащего указатель текущей записи.



Таймер


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

Для размещения в форме таймера используется кнопка Timer (Таймер)

на панели инструментов Form Controls (Элементы управления формы). Объект данного типа обладает свойствами, описанными в табл. 15.4.

Таблица 15.4. Назначение свойств объекта Timer

Свойство Назначение
Interval (Интервал) Интервал активизации объекта в миллисекундах
Enabled (Доступно) Устанавливает режим работы таймера. Если значение свойства равно True (Истина), то таймер начинает отсчитывать время сразу же после запуска формы. В противном случае вы должны запустить таймер по какому-либо внешнему событию (например, при нажатии на кнопку)

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

Для запуска таймера используется метод Reset (Установить), не связанный с каким-либо событием. Поэтому вы должны выполнить его при наступлении каких-либо других событий, например при нажатии кнопки запуска Tail мера.