Например, пользователь хочет определить, в какие месяцы клиенты предпочитают расплачиваться наличными, а в какие по перечислению. Он может создать кросстаблицу, которая покажет суммы отпуска товаров по накладным в каждом месяце, сгруппированные по способам оплаты.
1.6.6. Графики Иногда более удобно анализировать и представлять информацию в виде графиков и диаграмм. Paradox дает возможность легко создавать графики. Можно изменять тип графика, его строение и свойства. Paradox автоматически обновляет график, если изменяются данные в таблице (даже если изменение произошло при работе другого сетевого пользователя этой таблицы.
1.6.7. Многозаписные объекты Многозаписные объекты представляют собой повторяющиеся поля нескольких записей. Пользователь задает расположение одной записи и указывает, сколько раз по вертикали и горизонтали повторяется этот образец. Многозаписный объект позволяет отображать одновременно несколько записей (как и в таблицах) и так располагать поля, чтобы было удобно (как в форматах).
1.6.8. Кнопки Кнопки - это объекты Paradox, которые можно размещать в формах и присоединять к ним методы ObjectPAL. Работая с формой, можно щелкнуть мышью на кнопке для того, чтобы выполнить действия, определяемые присоединенным методом. К кнопке можно добавить любой текст или рисунок, поясняющий ее значение.
В форме можно разместить сколько угодно кнопок и присоединить к ним различные методы. Пользователь может присоединить к одной кнопке несколько различных методов, каждый из которых активизируется отдельным событием.
1.6.9. Графика Графика это графические образы, которые можно помещать в поля графического типа Paradox-таблиц, или размещать как независимый графический объект в форме или отчете.
Рaradox может импортировать графику из файлов формата .BMP, .EPS, .PCX, .TIF, .GIF или из буфера Windows Clipboard.
1.6.10. OLE-объекты OLE - технология связывания и встраивания объектов. Используя технологию OLE, можно создавать "контейнеры", которые будут содержать объекты из других приложений Windows.
Так как технология OLE обеспечивает связь между таблицей и исходным файлом встроенного объекта, пользователь может, щелкнув дважды мышью над этим объектом, запустить то приложение, в котором был создан этот объект.
1.7. ФАЙЛЫ ОБЪЕКТОВ PARADOX В таблице ниже приведены расширения файлов, в которых Paradox хранит основные объекты. -----------T--------------------------------------------¬ ¦Расширение¦ Тип объектов ¦ +----------+--------------------------------------------+ ¦ .CFG ¦ Файл конфигурации ¦ +----------+--------------------------------------------+ ¦ .DB ¦ Paradox-таблица ¦ +----------+--------------------------------------------+ ¦ .DBF ¦ dBASE-таблица ¦ +----------+--------------------------------------------+ ¦ .DBT ¦ Файл мемо-поля dBASE-таблицы ¦ +----------+--------------------------------------------+ ¦ .FAM ¦ Список связанных файлов Paradox ¦ +----------+--------------------------------------------+ ¦ .FDL ¦ Оттранслированная форма ¦ +----------+--------------------------------------------+ ¦ .FSL ¦ Сохраненная форма ¦ +----------+--------------------------------------------+ ¦ .FTL ¦ Временная форма ¦ +----------+--------------------------------------------+ ¦ .INI ¦ Файл конфигурации системы ¦ +----------+--------------------------------------------+ ¦ .LDL ¦ Оттранслированная библиотека ¦ +----------+--------------------------------------------+ ¦ .LSL ¦ Сохраненная библиотека ¦ +----------+--------------------------------------------+ ¦ .LTL ¦ Временная библиотека ¦ L----------+-------------------------------------------- ¦ .MB ¦ Файл мемо-поля Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .MDX ¦ Поддерживаемый индекс dBASE-таблицы ¦ +----------+--------------------------------------------+ ¦ .NDX ¦ Неподдерживаемый индекс dBASE-таблицы ¦ +----------+--------------------------------------------+ ¦ .PX ¦ Первичный индекс Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .QBE ¦ Сохраненный запрос ¦ +----------+--------------------------------------------+ ¦ .RDL ¦ Оттранслированный запрос ¦ +----------+--------------------------------------------+ ¦ .RSL ¦ Сохраненный запрос ¦ +----------+--------------------------------------------+ ¦ .RTL ¦ Временный запрос ¦ +----------+--------------------------------------------+ ¦ .SDL ¦ Оттранслированная программа ¦ +----------+--------------------------------------------+ ¦ .SSL ¦ Сохраненная программа ¦ +----------+--------------------------------------------+ ¦ .STL ¦ Временная программа ¦ +----------+--------------------------------------------+ ¦ .TV ¦ Установка параметров Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .TVF ¦ Установка параметров dBASE-таблицы ¦ +----------+--------------------------------------------+ ¦ .VAL ¦ Критерии допустимых значений и системы ¦ ¦ ¦ ссылок Paradox-таблицы ¦ L----------+-------------------------------------------------------T--------------------------------------------¬ ¦ .Xnn ¦ Вторичный простой пронумерованный индекс¦ ¦ ¦ Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .Ynn ¦ Вторичный простой пронумерованный индекс¦ ¦ ¦ Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .XGn ¦ Составной вторичный индекс Paradox-таблицы ¦ +----------+--------------------------------------------+ ¦ .YGn ¦ Составной вторичный индекс Paradox-таблицы ¦ L----------+--------------------------------------------
2. ОСНОВЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ
2.1. КЛЮЧИ Paradox поддерживает два типа формата таблиц - Paradox и dBASE. При использовании таблиц Paradox-формата следует понимать, как работают ключи таблиц (dBASE тоже использует индексы, но в dBASE нет понятия первичного ключа в том смысле, как в Paradox).
Первичным ключом, который иногда называют просто ключом, является поле (или группа полей), содержащие данные, однозначно идентифицирующие каждую запись в таблице.
Значение ключа должно быть уникальным для каждой записи таблицы. Таблица, у которой определен первичный ключ, называется индексированной.
Ключ устанавливает порядок сортировки по умолчанию записей таблицы. Paradox сортирует записи таблицы на основании значений поля (полей - в случае составного первичного ключа), которое задано как ключевое. Это позволяет быстро находить записи по значению ключа и совершать другие операции над записями индексированной таблицы.
Paradox допускает пустое значение ключа только у одной записи таблицы. Все последующие записи с пустым значением ключа считаются записями с дублирующим ключом и в таблицу не допускаются.
2.1.1. Составной первичный ключ Можно задавать в качестве ключа либо отдельное поле, либо группу полей. Когда в качестве ключа определена группа полей, его называют составным первичным ключом.
Paradox не допускает присутствия в таблице записей с дублирующими значениями первичного ключа. В случае, когда в таблице создан составной ключ, Paradox позволяет значениям отдельных полей, составляющих первичный ключ, повторяться, но только в тех случаях, когда набор значений полей, составляющих ключ, остается уникальным для каждой записи. Другими словами, поля, составляющие ключ как целое, должны однозначно идентифицировать запись.
Например, таблица "Клиенты" может иметь несколько записей, имеющих значение поля "Фамилия" "Сидоров". Аналогично, может быть несколько записей со значением поля "Имя" "Петр". Ни одно из этих полей не идентифицирует запись однозначно. Но предположим, что их комбинация в упрощенном случае (Петр Сидоров) уникальным образом идентифицирует запись (то есть среди клиентов нет двух с одинаковыми фамилией и именем). Тогда можно создать для этой таблиццы составной первичный ключ, состоящий из сочетания полей "Фамилия" и "Имя". Конечно, этого может быть в реальном случае не достаточно. Как правило, следует всегда включать в таблицу достаточное количество полей, чтобы обеспечить уникальность каждой записи таблицы. Если пользователь не может разумным способом создать составной ключ, в этой ситуации он может определить поле идентификатора записи, которое имеет единственное значение для каждой записи таблицы. Например, для таблицы "Клиенты" можно ввести поле "Номер клиента", задав каждому клиенту уникальный (и в достаточной степени произвольный) номер.
2.2. ИНДЕКСЫ Индекс определяет порядок, в котором Paradox имеет доступ к записям таблицы. Как Paradox, так и dBASE позволяют создавать у таблицы несколько индексов, определяющих различные порядки доступа к записям. Но Paradox и dBASE работают с индексами различным образом.
Когда пользователь определяет индекс, Рaradox создает файл, содержащий значения индексированных полей и порядковые номера записей с этими значениями индекса. Paradox использует индексный файл для определения местоположения записи в таблице по значению индекса.
Индексы можно использовать для просмотра записей в порядке, отличном от определяемого по умолчанию первичным ключом или физическим порядком расположения записей (в случае отсутствия ключа). При этом пересортировки и изменения физического порядка хранения записей в таблице не происходит.
2.2.1. Первичный индекс Paradox-таблицы Paradox упорядочивает записи в индексированной таблице в соответствии со значением поля (полей), являющегося ключом таблицы. Этот порядок называется первичным индексом.
По умолчанию все индексы (как первичные, так и вторичные) упорядочивают и позволяют получить доступ к записям в возрастающем порядке значений ( от А до Z или от 0 до 9). Например, если в качестве индекса алфавитно-цифровое поле, записи будут упорядочены в естественном для каждого национального языка порядке. Если этот индекс первичный - записи с дублирующимися значениями недопустимы.
В случае составного ключа Paradox создает составной первичный индекс, который упорядочивает записи сначала по первому из полей, составляющих ключ (в соответствии со структурой таблицы), затем по следующему полю и так далее. Причем значения отдельных полей ключа могут быть одинаковы для отдельных записей, но сочетание полей в целом должно быть уникальным.
2.2.2. Вторичные индексы Paradox-таблицы Работая с таблицами в Paradox, можно использовать вторичный индекс для того, чтобы задать альтернативный порядок доступа и отображения записей.
Вторичные индексы могут быть как автоматически поддерживаемые, так и неподдерживаемые системой Paradox (первичный индекс всегда поддерживаемый). Если индекс поддерживаем, то Paradox обновляет индексный файл всякий раз, когда изменяется таблица (редактируются значения полей, составляющих этот индекс, добавляются или удаляются записи). Файл неподдерживаемого индекса не обновляется при изменениях таблицы, но может быть открыт явным образом для использования. Paradox позволяет открыть только один неподдерживаемый индекс одновременно.