рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Создание и использование индексных файлов в FoxPro

Работа сделанна в 2004 году

Создание и использование индексных файлов в FoxPro - раздел Программирование, - 2004 год - ОТЧЁТ ПО СТАЖЕРОВОЧНОЙ ПРАКТИКЕ Создание И Использование Индексных Файлов В Foxpro. Важнейшим Элементом Любой...

Создание и использование индексных файлов в FoxPro. Важнейшим элементом любой системы управления базами данных является наличие средств ускоренного поиска данных, поскольку поиск самая распространенная операция в системах обработки данных. Этот механизм обычно реализуется введением так называемых индексных файлов индексов. Они имеют расширение имени IDX CDX. Если файл проиндексирован, команды DISPLAY, EDIT, BROWSE, SKIP, REPLACE и все другие команды, связанные с движением в файле базы данных, перемещают указатель записей в соответствии с индексом, а не с физическим порядком расположения записей.

Так, команды GO TOP и GO BOTTOM устанавливают указатель записей не на первую номер 1 и последнюю физические записи, а на начальную и конечную записи индекса соответственно.

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

Допускается индексирование и по логическим полям. Аппарат индексирования является важнейшим инструментом любой реляционной СУБД. И хотя практически все действия над данными могут быть осуществлены и без участия индексов, совершенно немыслимо их игнорирование при создании реальных информационных систем. Только использование индексов позволяет достичь приемлемых скоростных характеристик обработки данных, поскольку поисковые операции присутствующие прямо или косвенно используются в программах очень широко.

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

Кроме того, замедляются операции ввода редактирования данных в базе, поскольку при дополнении ее новой записью индексный файл должен быть автоматически перестроен в соответствии с новыми или измененными данными. В FoxPro можно создать два типа индексных файлов Обычный индексный файл. Он имеет расширение имени IDX и содержит один индексный ключ. Его можно также назвать одноиндексным файлом. Мультииндексный файл с расширением имени CDX. Такой файл может МРМТ 2203 Лист 17 Изм. Лист докум.

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

Структурный файл всегда автоматически открывается вместе со своей базой. Его нельзя закрыть, хотя можно сделать неглавным. Использование мультииндексных файлов предпочтительнее в случае одновременной работы со многими файлами, поскольку отодвигает нас от границы DOS на 99 открытых файлов, а также несколько ускоряет доступ к файлам ведь их меньше в директории и, кроме того, позволяет программисту легче контролировать свою файловую среду.

Индексирование выполняется следующей командой INDEX ON выр ТО IND-файл ТАG имя тега OF СDХ-файл FOR условие COMPACT DESCENDING UNIQUE ADDITIVE В FoxPro с версии 2.0 принята новая более компактная и более быстрая в обработке структура индексного файла. Мультииндексный файл всегда компактный. Обычный IDX индексный файл строится обычным образом, если не указан параметр COMPACT. Сделано это для совместимости со старыми индексными файлами из СУБД FoxBASE и FoxPro-1.x. Все новые индексные файлы, конечно, следует создавать только компактными.

Опции команды выр - индексный ключ-выражение. Его длина может достигать 100 символов для IDX-файлов и 254 для CDX-файлов. Обычно ключ означает имя поля, по которому нужно упорядочить файл. Ключ может быть и составным из нескольких полей. Он может быть и функцией, в том числе и ПФ, полей и переменных. TО IDX-файл - задает имя одноиндексному файлу. TAG имя тега OF СDХ-файл - задает имя тега в мультииндексном файле. Если в команде присутствует фраза OF СDХ-файл, то мультииндексный файл получит указанное имя. Если нет, то будет создан структурный мультииндексный файл с именем, совпадающим с именем базы данных.

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

МРМТ 2203 Лист 18 Изм. Лист докум. Подпись Дата COMPACT - с этой опцией будет создан компактный IDX-файл. Целесообразно использовать только компактные индексы. Возможность создавать обычные индексы оставлена лишь для совместимости с предыдущими версиями пакета. DESCENDING - индексирование будет выполнено по убыванию. Этот режим можно указывать только для мультииндексных CDX-файлов.

Для IDX-файлов индексирование всегда осуществляется по возрастанию, однако параметр DESCENDING можно включить в команды открытия индексов любого типа, независимо от того, какой закон был указан в команде индексирования. По умолчанию индексирование выполняется по возрастанию. UNIQUE - означает, что, если в базе данных встречаются записи с одинаковым значением ключа, все такие записи, кроме первой, игнорируются не включаются в индекс. Этим процессом можно управлять также с помощью команды SET UNIQUE. ADDITIVE - вновь создаваемые индексные файлы не закроют уже открытые к этому моменту.

По умолчанию вновь создаваемые индексы закрывают все ранее открытые индексы для текущей базы данных. Рассмотрим несколько примеров индексирования. Пример. Пусть мы хотим упорядочить базу KADR в порядке возрастания табельных номеров. Тогда необходимо создать индексный файл по полю TAB. Назовем его KADRTAB.IDX расширение IDX можно не указывать . .USE kadr. INDEX ON tab TO kadrtab.idx COMPACT .LIST tab.fam Record TAB FAM 3 6 КУЛАКОВА М.И. 1 13 СИДОРОВ П.С. 7 54 ЯКОВЛЕВ А.И. 2 98 ПОТАПОВ Д.П. 4 234 ПОПОВ А.А. 6 468 МИРОНОВ Р.И. 5 890 РОМАНОВА М.С. Как видно, команда LIST показала записи именно в желаемом, а не в фактическом порядке.

Файл базы KADR.DBF никакому изменению не подвергся, но всеми перемещениями указателя записей управляет теперь индексный файл KADRTAB.IDX. Каково содержимое индексного файла? Хотя в FoxPro не предусмотрена какая-либо возможность непосредственного доступа к индексу, мы можем просмотреть его во внутреннем текстовом редакторе FoxPro с помощью команды MODIFY FILE KADTRAB.IDX . Тогда мы увидим, что кроме технической информации в заголовке файл KADRTAB.IDX будет содержать значения ключевого поля TAB индексируемой базы данных, расположенные в порядке возрастания, и в закодированной форме фактические номера этих записей в базе данных.

МРМТ 2203 Лист 19 Изм. Лист докум. Подпись Дата В нашем случае 3 - 6, 1 - 13, 7 - 54, 2 - 98, 4 - 234 и т.д. Пример.

Рассмотрим включение FOR-условия в команду индексирования. Пусть требуется создать индексный файл KADRPOL.IDX, содержащий ссылки только на те записи базы KADR.DBF, которые соответствуют всем мужчинам pol M , причем упорядоченные в алфавитном порядке фамилий. .USE kadr. INDEX ON fam TO kadrpol FOR pol M COMPACT .LIST FAM, POL Record FAM POL 6 МИРОНОВ P.M. M 4 ПОПОВ А.А. M 2 ПОТАПОВ Д.П. М 1 СИДОРОВ П.С. М 7 ЯКОВЛЕВ А.И. М Видим, что содержание и порядок предъявления записей из базы KADR.DBF отвечают желаемым.

Если порядок предъявления фамилий безразличен и по ним не предполагается поиск, ключевое поле в данном случае FAM можно опустить, заменив его пробелом в команде индексирования. INDEX ON TO kadrpol FOR pol M COMPACT При этом индексный файл будет гораздо меньших размеров. Если индексный файл был уже создан, его нужно открыть при внесении новых записей или редактировании старых если затрагиваются индексные поля и, конечно, если предполагается индексный поиск. Индексные файлы могут быть открыты совместно с открытием своей базы данных командой USE DBF-файл IN область AGAIN NOUPDATE INDEX список индексных файлов ORDER вырN IDX-файл TAG имя тега OF СDХ-файл ASCENDING DESCENDING ALIAS псевдоним Если указан параметр IN область, база откроется не в текущей, а в указанной рабочей области, но автоматический переход в область при этом не произойдет. По умолчанию база открывается в текущей области.

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

В области, где он был открыт ранее, такой файл может быть доступен в режиме только-чтение. Однако каждый индекс может быть открыт одновременно только для одной из областей. Опция INDEX список индексных файлов указывает перечень открываемых индексных файлов. Здесь важен порядок перечисления индексов. Первый в списке индекс считается главным, если не использована опция ORDER. МРМТ 2203 Лист 20 Изм. Лист докум.

Подпись Дата Параметр ALIAS псевдоним устанавливает для базы кроме собственного еще любое другое имя. Если разным базам дать одинаковый псевдоним, далее они могут под этим именем обрабатываться в одной и той же программе. Параметр NOAPDATE указывает на то, что база будет открыта только для просмотра редактирование запрещено. Открытие файла всегда устанавливает указатель записей на его первую запись. Новая команда USE открывает новый файл базы данных одновременно с закрытием старого в текущей области.

Команда USE без имени файла закрывает соответствующий файл базы данных и все сопровождающие его вспомогательные файлы типа IDX и др. в текущей или другой если она указана области. Остальные опции управляют открытием индексных файлов и указанием главного индекса. Они полностью идентичны соответствующим параметрам команды SET INDEX, которая открывает только индексы база должна быть уже открыта SET INDEX TO список индексных файлов ORDER вырN IDX-файл TAG имя тега OF СDХ-файл ASCENDING DESCENDING ADDITIVE Команда открывает перечисленные через запятую одно и мультииндексные файлы кроме структурного мультииндексного файла, который открывается автоматически вместе с базой данных. По умолчанию открытый первым IDX-файл становится главным индексом.

Открытый первым CDX-файл не изменяет порядка обработки данных не устанавливает главного индекса. Опции команды ORDER вырN - опция указывает номер главного индексного файла среди перечисленных в списке открываемых IDX-файлов или среди тегов CDX-файла номер по порядку создания, если нас не устраивает назначение главного индекса по умолчанию.

Указание опции ORDER без аргумента или задание параметра вырN 0 означает, что, хотя индексы откроются, главный индекс не будет назначен. ORDER IDХ-фаил - главный индекс задается указанием имени индексного файла. ORDER TAG имя тега OF СDХ-файл - главный индекс задается именем тега. ASCENDING DESCENDING - определяет порядок использования индекса по возрастанию убыванию, даже если при его создании был использован противоположный закон.

ADDITIVE - открытие новых индексов не закрывает старые. Команда SET INDEX TO без параметра закрывает все индексные файлы, кроме структурного, для текущей базы. Такое же действие осуществляет команда CLOSE INDEX МРМТ 2203 Лист 21 Изм. Лист докум. Подпись Дата Ускоренный поиск Индексный файл не только упорядочивает базу данных для просмотра, но и ускоряет поиск в ней по ключу, заданному в индексе, если пользоваться командой SEEK выражение Команда применяет специальный алгоритм ускоренного поиска, в котором база просматривается не сплошь, а в соответствии с информацией, содержащейся в индексе.

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

Только после этого указатель записей устанавливается на искомую запись в основной базе данных. Команда SEEK разыскивает только одну первую запись, в которой в индексном поле наблюдается выражение, т.е. когда поле выражение, и устанавливает на нее указатель записей. Пример. Проведем в базе KADR.DBF поиск записи с табельным номером 234. .USE kadr INDEX kadrtab. SEEK 234 .DISPLAY tab, fam Record TAB FAM 4 234 ПОПОВ А.А. Функции RECNO , FOUND , EOF реагируют на результаты поиска командой SEEK точно так же, как и командами LOCATE и CONTINUE. Если поиск удачный, RECNO равно номеру найденной записи, FOUND T EOF .F. если нет, RECNO равно числу записей в базе данных плюс единица, FOUND .F EOF .T Все это относится и к индексам с FOR-условием.

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

Однако если действует команда SET NEAR ON то в случае неудачного поиска указатель записей сразу установится не на конец файла, а на эту близкую запись. По умолчанию SET NEAR OFF. Это предоставляет инструмент ускоренного поиска по ключу, заданному приблизительно или даже частично неправильно. Например, задана фамилия с неверными инициалами или окончанием. Часто такая ситуация встречается при поиске в числовых полях.

Пусть в базе KADR.DBF нужно найти запись, где средняя зарплата равна 6000 руб. Ввиду того что, возможно, никто не получает именно такую зарплату, поиск окажется неудачным, хотя и есть зарплаты, близкие к этой цифре. МРМТ 2203 Лист 22 Изм. Лист докум. Подпись Дата Если же мы имеем возможность позиционировать указатель на записи с ближайшим значением, то, вызвав затем какое-нибудь средство просмотра данных например, команду BROWSE и пролистав данные в базе вблизи найденного места, мы получим возможность все-таки найти и отобрать подходящие записи. .USE kadr. INDEX ON szar TO kadrzar COMPACT .SET NEAR ON .SEEK 6000 .BROWSE При этом мы не будем стеснены в возможности перемещаться в базе данных.

Такой механизм называется мягким или приблизительным поиском в отличие от обычного, точного поиска. База KADR. DBF проиндексирована по полю SZAR средней зарплате файл KADRZAR.IDX. Похожий результат даст использование команды BROWSE с FOR-условием.

Например, команда BROWSE FOR szar 5900.AND.szar 6100 предъявит на редактирование все записи, где SZAR находится в диапазоне от 5900 до 6100, однако одновременно мы утрачиваем доступ к записям за установленными пределами. В FoxPro имеется очень полезная функция индексного поиска SЕЕК выражение, область Она так же, как и команда SEEK, выполняет поиск записи в индексном файле и устанавливает на него указатель записей с возвращением значения. Т если поиск удачный, и. F если нет. Функция SEEK заменяет комбинацию команды SEEK и функции FOUND - Такое совмещение весьма полезно, поскольку обычно для того, чтобы предпринять какие-то дальнейшие шаги после поиска, все равно нужно убедиться в его успешности, функция FOUND обычно включается в состав команды анализа выполнения условий IF. Кроме того, она допускает поиск в неактивной рабочей области, заданной числовым выражением.

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

USE kadr INDEX ON det TO kadrdet COMPACT IF SEEK 3 LIST fam.det WHILE det 3 ENDIF Рассмотрим технику индексного поиска. Двоичный поиск, называемый еще поиском делением пополам, начинается с середины индексного файла. Берется его центральный элемент и сравнивается с ключом, указанным в команде функции SEEK. МРМТ 2203 Лист 23 Изм. Лист докум. Подпись Дата Если значение ключа больше индексного выражения этого элемента, то поиск ведется в нижней части индекса, если нет - в верхней.

В выбранной половине снова находится середина и определяется новая подобласть поиска. И так до тех пор, пока не будет зафиксировано искомое совпадение либо не будет выяснено, что нужных данных нет. В первом случае указатель записей базы данных устанавливается на запись с найденным в индексе номером, во втором вырабатывается значение. Т. Истина для функции EOF , индицирующей достижение конца файла если SET NEAR OFF . В случае, например, поиска записи с табельным номером 234 в базе KADR.DBF, индексированной по полю TAB, будут выполнены поисковые действия в индексном файле KADRTAB.IDX в последовательности, показанной на рис. 2 . Рис. 2. Поисковые действия Вычисляется середина индекса 1-й шаг поиска. Так как здесь находится 1 табельный номер 098 234, далее разыскивается середина нижней половины индекса 2-й шаг. Поскольку 468 234, то теперь розыск следует вести - между табельными номерами 098 и 468 3-й шаг. Именно здесь и находится искомый табельный номер 234. Результатом поиска является установка указателя записей БД на запись с номером 4 в файле KADR.DBF. Предельное число сравнений при двоичном поиске может быть определено значением логарифма по основанию 2 - Log N , где N - число записей в базе. Это значит, что если база имеет 1024 записи, то в худшем случае потребуется 10 обращений к индексу для розыска нужной записи.

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

Компактные индексные файлы устроены по-другому.

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

Сокращение размера индексного файла позволяет разместить большую, чем обычно, его часть в основной памяти компьютера, уменьшив обращения к диску, что ускоряет процесс обработки индексированной базы данных, несмотря на то, что алгоритм поиска более сложен. МРМТ 2203 Лист 24 Изм. Лист докум. Подпись Дата Применение компактного индекса дает преимущества в скорости по сравнению с обычным индексом, в особенности когда обрабатывается сразу несколько баз и индексов, и тем заметнее, чем больше их размер.

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

Это взносится и к заданию ключа поиска в команде SEEK, который по типу и виду должен отвечать именно индексному выражению, а не исходному значению индексируемого поля полей базы. Хотя предельно разрешенная длина индексного выражения в FoxPro 100 символов для CDX-файлов 254 символа, следует по возможности ограничивать его размер. Это сокращает время доступа к данным и величину индексного файла. Например, при сортировке записей по алфавиту часто бывает достаточно упорядочение их на глубину всего в три - четыре символа.

Здесь а также если индексируемое поле длиннее разрешенных 100 символов при указании индекса можно воспользоваться функцией выделения в поле нужного количества знаков слева - LEFT . Однако следует учитывать, что сокращение длины индексного ключа относительно длины поля означает, что данные, которые имеют различия, оставшиеся за пределами ключа, будут считаться в индексе одинаковыми. Сокращение индексируемой длины поля одновременно означает такое же ограничение длины ключа поиска, который мы можем указать в команде функции SEEK. Вообще, если при индексировании применено какое-то преобразование данных, это преобразование должно быть применено или учтено при задании ключа поиска.

Пример. Пусть требуется упорядочить базу KADR.DBF по полу, а внутри - по фамилии, т.е. по полям POL и РАМ. Назовем этот индексный файл именем POLFAM.IDX. .USE kadr. INDEX ON pol fam TO polfam COMPACT .LIST pol, fam Record POL FAM 3 Ж КУЛАКОВА М.И. 5 Ж РОМАНОВА М.С. 6 М МИРОНОВ Р.И. 4 М ПОПОВ А.А. 2 М ПОТАПОВ Д.П. 1 М СИДОРОВ П.С. 7 М ЯКОВЛЕВ А.И. МРМТ 2203 Лист 25 Изм. Лист докум.

Подпись Дата Видим, что команда LIST выдает записи в желаемом порядке. Сначала идут все фамилии женщин буква Ж идет раньше буквы М , а затем мужчины, а затем все фамилии мужчин фамилии расположены в алфавитном порядке. Команда индексного поиска SEEK является аналогом команды LOCATE для последовательного поиска.

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

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

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

При этом возможно использование практически любых встроенных функций FoxPro, а также процедур и функций, определенных пользователем. Пример. Пусть требуется базу KADR.DBF упорядочить таким образом, чтобы выявить наиболее нуждающихся материально. Критерием будем считать размер зарплаты и число членов семьи. Для этого проиндексируем базу по полю средней зарплаты, деленному на число детей, плюс единица сам работник. Частное округляем до копеек ROUND szar det l ,2 . Кроме того, необходимо учесть, состоит ли человек в браке.

Будем считать, что если да, то при прочих равных условиях он нуждается меньше, чем не состоящий в браке, поскольку обычно супруг супруга работает. При индексировании это обстоятельство учитывается следующим образом. Если человек не состоит в браке SEM Б , полученное частное остается незменным, в противном случае к нему прибавляется величина в 0.001 руб. IIF sem Б ,0 001 . МРМТ 2203 Лист 26 Изм. Лист докум. Подпись Дата Подсуммируемое значение настолько мало, что может повлиять только на порядок расположения тех записей, где сумма, приходящаяся на одного члена семьи, одинакова.

Следующие команды реализуют поставленную задачу. USE kadr. INDEX ON ROUND szar det 1 ,2 IIF sem Б ,0 001 TO pom Если вам предстоит создание сложного индекса и вы не уверены, что правильно задали индексный ключ в команде индексирования, следует верить вид самого индекса. Для этого можно прибегнуть к просмотру IDX- файла непосредственно в текстовом редакторе FoxPro. Однако осмысленный анализ на глаз возможен только для простых IDX-файлов, где индексные ключи находятся практически в естественной форме.

Для компактных и тем более для CDX-файлов такой анализ ввиду их сложности практически невозможен. Удобнее всего вывести индексное выражение в команде BROWSE в качестве вычисляемого поля. Кроме того, полезно также вывести и номер каждой записи. Для предъявления индексного выражения можно прямо включить в команду BROWSE индексный ключ из команды INDEX после слова ON, но гораздо проще воспользоваться функцией KEY вырN где вырN - номер индекса в команде открытия.

Полученное символьное выражение наполняется конкретным значением c помощью функции подстановки EVALUATE BROWSE FIELDS szar Н Зарплата, det НДетей, sem, Н Сем. полож. i EVALUATE KEY 1 Р . Н Индекс, n RECNO H N записи Экран, предъявляемый командой BROWSE, показан на рис. 3 . Зарплата Детей Сем. пол. Индекс N записи 2500.00 2 X 833.330 6 2500.00 2 Б 833.331 5 1800.00 1 X 900.000 3 3780.00 2 Р 1260.000 2 2050.00 0 Б 2050.001 4 2500.00 0 X 2500.000 1 Рис. 3 Экран, предъявляемый командой BROWSE Анализируя значения поля базы данных SZAR, DET, SEM и вычисляемые поля N и I номер записи и вид индекса, можно выяснить правильность индексирования.

Можно даже провести эксперимент. При изменении зарплаты, числа детей или семейного положения запись должна изменить свое местоположение среди других в соответствии с установленным законом. МРМТ 2203 Лист 27 Изм. Лист докум.

Подпись Дата Обратите внимание также, что у лиц, состоящих в браке, в третьем разряде после точки в поле I, как и следовало ожидать, стоит единица. Этот же результат можно получить, прибегнув к символьному представлению ключа индексирования INDEX ON STR ROUND szar det 1 ,2 ,8,2 IIF sem Б TO pom Здесь, если человек не состоит в браке, в конец ключа добавляется пробел, если состоит - любой другой символ с большим кодом, например. Индексировании по убыванию в составном индексе.

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

Пусть нужно проиндексировать базу KADR.DBF по полям SZAR и DTR таким образом, чтобы зарплата шла по возрастанию, а дата рождения - по убыванию, т.е. среди лиц, имеющих одинаковое значение поля SZAR, сначала расположить младших по возрасту. Такое индексирование осуществляет команда, где DTR вычитается из заведомо большей даты 01.01.2000г. .INDEX ON STR szar,7 STR 01.01.2000 -dtr,4 TO имя индекса Управление индексами Один и тот же файл DBF может иметь любое число индексов, и все они могут быть одновременно открыты командами SET INDEX или USE INDEX. В нашем случае команда. USE kadr INDEX kadrtab, polfam открывает два индекса KADRTAB.IDX и POLFAM.IDX. При вводе, удалении, редактировании записей все открытые индексные файлы будут соответствующим образом изменяться.

Однако главным управляющим индексом, т.е. таким, в соответствии с которым при необходимости будет перемещаться указатель записей, может быть, конечно, только один. Им является индексный файл, открытый самым первым в команде здесь KADRTAB.IDX . В случае, если необходимо сделать главным другой индекс, используется опция ORDER либо команда SET ORDER ТО вырN1 IDX-файл TAG имя тега OF СDХ-файл IN область ASCENDING DESCENDING ADDITIVE Команда объявляет главный индекс тег среди открытых IDX- или CDX-индексных файлов в текущей или указанной рабочей области. Опции команды совпадают с описанными выше для команды SET INDEX TO. Например, следующая команда сделает главным индекс POLFAM.IDX .SET ORDER TO 2 МРМТ 2203 Лист 28 Изм. Лист докум.

Подпись Дата Команда SET ORDER TO 0 или просто SET ORDER TO без параметра отключает все индексы от управления перемещением указателя записей.

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

Рассмотрим ряд вспомогательных команд и функций для работы с мультииндексными файлами. COPY INDEXES IDX-файлы ALL ТО СDХ-файл Команда копирует все ALL или перечисленные через запятую открытые CDХ-файлы в структурный или указанный мультииндексный СDХ-файл. Каждый такой файл становится тегом в CDX-файле с тем же самым именем, что и IDX-файл. Если CDX-файла нет, он создается. COPY TAG тег OF СDХ-файл ТО IDХ-файл Команда создает IDХ-файл из поименованного тега, находящегося в указанном или по умолчанию структурном мультииндексном CDX-файле. Файл должен быть открыт.

DELETE TAG тег1 OF СDХ-файл 1 , тег2 OF СDХ-файл 2 DELETE TAG ALL OF СDХ-файл Команды удаляют указанные или все ALL теги из открытого в текущей рабочей области CDX-файла. По умолчанию сначала рассматривается 1 структурный CDX-файл если он есть. NDX вырN , область Функция выдает прописными буквами полное имя индексного файла, открытого в текущей или указанной рабочей области. ВырN указывает номер файла в команде открытия.

Если файла нет, возвращается пустая строка. СDХ МDХ вырN , область Функция возвращает имя открытого CDX-файла. Первым считается структурный CDX-файл если есть. Имя такого файла всегда совпадает с именем самой базы. Далее идут обычные мультииндексные файлы в порядке их открытия. Если структурного CDX-файла нет, рассматриваются только обычные CDX-файлы. ВырN1 - номер по порядку индексного файла, имя которого возвращается с учетом вышесказанного.

Если файла с таким номером нет, возвращается нулевая строка. SYS 22 , область Функция возвращает имя главного индекса или главного тега в IDX CDX-файле. Область задается только числом. МРМТ 2203 Лист 29 Изм. Лист докум. Подпись Дата ТАG CDX-файл, вырN1 , область В соответствии с порядком открытия вырN1 возвращает имя тега из СDХ-файла или имя IDX-файла для базы данных из текущей или указанной рабочей области. Если опущено имя CDX-файла, функция возвратит имя IDX-файла если есть, или имя тега структурного мультииндексного файла если есть, или имя тега из другого CDX-файла. 4.4

– Конец работы –

Эта тема принадлежит разделу:

ОТЧЁТ ПО СТАЖЕРОВОЧНОЙ ПРАКТИКЕ

Подпись Дата Разработ White. Отчет по технологической практике Литер. Лист Листов Проверил Федорина О.Ю. 2 Гр. П-41 Н. Контр. Утв. ВВЕДЕНИЕ… Я научился работать с программами для создания 2D анимации MOHO и 3D анимации… Подпись Дата 2 ИНСТРУКЦИЯ ПО ТЕХНИКЕ БЕЗОПАСНОСТИ ПРИ РАБОТЕ НА ПК Инструкция по охране труда при работе в кабинете…

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Создание и использование индексных файлов в FoxPro

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ИНСТРУКЦИЯ ПО ТЕХНИКЕ БЕЗОПАСНОСТИ ПРИ РАБОТЕ НА ПК
ИНСТРУКЦИЯ ПО ТЕХНИКЕ БЕЗОПАСНОСТИ ПРИ РАБОТЕ НА ПК. Инструкция по охране труда при работе в кабинете информационных технологий. ИОТ-014-1. Общие требования безопасности 1. К работе в кабинете инфо

ОПИСАНИЕ РАБОЧЕГО МЕСТА
ОПИСАНИЕ РАБОЧЕГО МЕСТА. Fujitsu Siemens Scenic Scenico ПРОЦЕССОР Intel R Celeron TM CPU 1300 MHz 1.3 ГГц ОПЕРАТИВНАЯ ПАМЯТЬ DIMM SD-RAM 512 МБ ЖЕСТКИЙ ДИСК 40.0 Gb Maxtor 2F030L0 Fireball3 7200, F

ОЗНАКОМИТЕЛЬНЫЙ ЭТАП
ОЗНАКОМИТЕЛЬНЫЙ ЭТАП. База данных Для манипулирования информацией вводом, поиском и т.п. используются специальные пакеты программ, называемые системами управления базами данных СУБД . Этот вид прог

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

Сортировка записи в Access
Сортировка записи в Access. Существует два вида сортировки, которые можно выполнить простая сортировка и сложная сортировка. Простая сортировка. При сортировке в режиме формы Режим формы. Ок

Создание и использование индексных файлов в Access
Создание и использование индексных файлов в Access. Индексы Индекс. Средство, ускоряющее поиск и сортировку в таблицы за счет использования ключевых значений, которое позволяет обеспечить уникально

ПРОИЗВОДСТВЕННЫЙ ЭТАП
ПРОИЗВОДСТВЕННЫЙ ЭТАП. Во время прохождения практики мною было получено задание разработать проект ПРОГРАММА ПРЕДПРОФИЛЬНОЙ ПОДГОТОВКИ СРЕДНЕЙ ОБЩЕОБРАЗОВАТЕЛЬНОЙ ШКОЛЫ 30 г. ЙОШКАР-ОЛЫ Цель проект

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги