|
Программирование >> Разработка пользовательского интерфейса
Вы можете упростить организацию поиска данных в приложении, если воспользуетесь индексами на основе выражений. Выражения могут быть простыми или сложными - это зависит от задачи. Простые индексные выражения - это индексы, построенные на основе одного поля или сложения нескольких символьных полей для формирования составного ключа. Например, можно создать индекс для таблицы Customer из базы данных Auto Store на основе выражения: last name + first name + patronymic Если просматривать таблицу Customer, когда она упорядочена по такому ключу, то можно убедиться, что она оказывается отсортированной по полю last name, затем по полю first name и только после этого по полю patronymic. Вы можете создать индекс с помощью следующей команды: INDEX ON last name + first name + patronymic TAG ; LasFirPat Можно создавать индексы на основе более сложных индексных выражений. Индексные выражения Visual FoxPro могут содержать функции Visual FoxPro, константы или определенные пользователем функции. Результат вычисления индексного выражения не должен превышать 100 символов для простых (IDХ) индексов и 240 символов для тегов СDХ-индексов. В одном индексном теге можно комбинировать данные различных типов, преобразовав компоненты выражения к символьному типу. Для индексных тегов могут употребляться встроенные функции Visual FoxPro. Например, чтобы преобразовать поле типа дата в символьное выражение, можно использовать функцию DTOS(), а для преобразования числового значения в строку символов - функцию STR(). Пусть требуется создать индексный тег для таблицы Account, в котором бы комбинировались поля date write (дата выписки счета) и sum (сумма оплаты), тогда можно использовать следующее индексное выражение: INDEX ON DTOS(date write) + STR(sum ) TAG DatSum Вы можете расширить возможности индекса, если будете использовать в индексном выражении хранимые процедуры и определенные пользователем функции. Если индексный тег строится для таблицы, связанной с базой данных, то предпочтительнее использовать хранимые процедуры, а не определенные пользователем функции. Поскольку определенная пользователем функция хранится в файле, отдельном от базы данных, есть вероятность, что этот файл будет перемещен или удален, а это приведет к неработоспособности индексный тег, ссылающийся на такую функцию. Хранимые же процедуры запоминаются в DBС-файле и всегда могут быть найдены Visual FoxPro. Другим преимуществом использования хранимых процедур в индексных выражениях является то, что в индексе будет гарантировано использование в точности того кода, который указан. Если же в индексном выражении используется определенная пользователем функция, то при выполнении индексирования будет вызываться любая функция с указанным именем, оказавшаяся в области видимости Visual FoxPro. Использование хранимых процедур или определенных пользователем функций следует тщательно продумывать, поскольку это увеличивает время создания индекса. Вы можете просматривать записи по убыванию ключа, создав индекс с убывающими ключами или рассматривая обычный индекс в обратном порядке. Как создать убывающий индекс? На вкладке Index Конструктора таблиц нажмите кнопку со стрелкой слева от поля Name так, чтобы стрелка на кнопке указала вниз, или используйте предложение DESCENDING в команде INDEX ON. При создании структурного составного индексного файла можно использовать оба метода. При создании индексов других видов можно использовать только второй способ. Например, можно создать новый убывающий индекс, упорядочивающий таблицу Account от больших к меньшим значениям поля sum , и просматривать таблицу в таком порядке при помощи следующего программного кода: USE Account INDEX ON sum TAG sum DESCENDING BROWSE По умолчанию порядок будет возрастающий. Просматривать таблицу ключа можно с помощью следующего программного кода: в порядке убывания USE Account SET ORDER ТО sum DESCENDING BROWSE В предыдущих примерах внимание было сосредоточено на доступе к информации по убыванию ключа. Однако обе команды - SET ORDER и INDEX - могут использоваться с опцией ASCENDING. Комбинируя разные варианты употребления этих команд, можно добиться значительной гибкости приложения. Например, при создании индекса можно указать опцию ASCENDING или DESCENDING для наиболее часто используемого порядка, а если необходимо, в команде SET ORDER можно указать противоположный порядок. Вы можете ограничить множество доступных данных только необходимыми данными, использовав фильтрующий индекс. Если создать фильтрующий индекс, то видимы и доступны будут только записи, удовлетворяющие критерию фильтрующего выражения. Как создать фильтр? На вкладке Index Конструктора таблиц введите фильтрующее выражение в поле ввода Filter нужного индекса (рис. 6.8) или используйте необязательное предложение FOR в команде INDEX. Table Designer Jable Name: I acco.unt Database: I c:\prciect book\ai.ito -itore dbc Table Properties.. Table Index
Filter sum>30000 Cancel Insert Delete c:\project book\account.dbf Records: 7 Fields: 7 Length: Рис. 6.8. Если в команду INDEX ввести необязательное предложение FOR, то индекс будет действовать на таблицу, как фильтр. Индексные ключи будут создаваться в индексном файле только для записей, удовлетворяющих значению фильтра. Следующий программный код создает фильтрующий индекс и выводит отфильтрованные данные в окне просмотра: USE Account INDEX ON sum FOR sum >>30000 TAG sum Возможность читать индекс по убыванию ключа позволяет воспользоваться существующим индексом, вместо того чтобы создавать новый. Пусть имеется индекс, упорядочивающий таблицу Account по полю sum , созданный с помощью следующего программного кода: USE Account INDEX ON sum TAG sum BROWSE Для того чтобы временно отфильтровать данные без построения специального фильтрующего индекса, используется команда SET FILTER. Особенно полезна эта команда в тех случаях, когда требуется задать временное условие, которому должны удовлетворять записи таблицы, чтобы быть доступными. Например, чтобы отфильтровать таблицу Account так, чтобы показать только счета с суммой оплаты больше 30000, можно использовать следующие команды: USE Account SET FILTER ТО sum >> 30000 BROWSE Команда SET FILTER воспринимает в качестве фильтра любое допустимое логическое выражение Visual FoxPro. После того как выдана команда SET FILTER, в таблице будут доступны только записи, удовлетворяющие условию фильтра. Все команды доступа к таблицам действуют с учетом установленного командой SET FILTER критерия. Для каждой открытой таблицы может быть установлен свой фильтр. Вы можете повысить производительность при работе с индексированными таблицами, поддерживая индексы в актуальном состоянии (соответствующим данным в таблицах) и используя в них оптимизируемые выражения. Индексный файл может оказаться устаревшим, если таблица открывается без соответствующего индексного файла и в ее ключевые поля вносятся изменения. Индексные файлы могут также оказаться недействительными в результате аппаратных сбоев, а также в результате редактирования таблицы программами, отличными от Visual FoxPro. Если индексный файл оказался устаревшим, то его можно обновить командой REINDEX. Как перестроить индексный файл? В меню Table выберите Rebuild Indexes или используйте команду REINDEX. Например, следующий программный код обновляет индексный файл для таблицы Account: USE Account REINDEX Команда REINDEX обновляет все индексные файлы, открытые в текущей рабочей области. Visual FoxPro распознает все виды индексных файлов (составные СDХ-файлы, структурные СDХ-файлы и простые IDХ-файлы) и соответственно их перестраивает. Обновляются все теги в СDХ-файлах и структурных СDХ-файлах, открывающихся автоматически вместе с таблицей. Перестройка индексов требует временных затрат, особенно для больших таблиц. Перестройку индексов следует производить только при необходимости. Итак, пришло время вернуться к нашей задаче, описанной в первой главе (раздел 1.2) и спроектированной во второй (раздел 2.2). Следующий программный код описывает создание базы данных Auto Store. Полностью программа записана на прилагаемой к книге дискете, здесь мы приводим ключевые фрагменты, исключая однотипные операции: WAIT WINDOW Один момент... NOWAIT * После выполнения данного кода не забудьте БД * Auto Store включить в проект (с помощью клавиши Add, * предварительно выделив пункт Databases во вкладке Data) CREATE DATABASE auto store && Создание БД Auto Store ? DBSETPROP(auto store, database, comment, ; Автоматизация управления работы дилера по продаже легковых автомобилей.) && Комментарий к БД * Создание таблицы Model CREATE TABLE Model (key model i, name model c(20), key firm i DEFAULT 1, ; swept volume n(5) NULL, quantity drum n(2) NULL, ; capacity n(5,1) NULL, torgue n(5,1) NULL, ; key fuel oil i DEFAULT 1, top speed n(5,1) NULL, ; starting n(4,1) NULL, key tyre i DEFAULT 1, ; key body i DEFAULT 1, quantity door n(1) NULL, ; quantity sead n(2) NULL, length n(5)<>NULL, width n(4) ; NULL, ; height n(4) NULL, expense 90 n(4,1) NULL, ; expense 120 n(4,1) NULL, expense town n(4,1) NULL) * Установка заголовков (для таблицы model) ? DBSETPROP (Model.key model, field, caption, ; Уникальный ключ модели) ? DBSETPROP (Model.name model, field, caption, ; Наименование модели)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |