Содержание. 1. Базы данных и информационные системы . .....................................................................2 2. Системы управления базами данных. ................................................................................4 3. Перечень литературы и средств общения. ........................................................................41 Базы данных и информационные системы. В основе решения многих задач лежит обработка информации. Для облегчения обработки информации создаются информационные системы (ИС). Автоматизированными называются ИС, в которых применяют технические средства, в частности ЭВМ. В широком понимании под определение ИС попадает любая система обработки информации. По области применения ИС можно разделить на системы: 1) в производстве 2) в образовании 3) в здравоохранении 4) в военном деле 5) в науке 6) в социальной сфере 7) в торговле и в др. отраслях По целевой функции ИС модно условно разделить на следующие основные категории: 1) управляющие 2) информационно – справочные 3) поддержки принятия решения Банк данных является разновидностью ИС, в которой реализованы функции централизованного хранения и накопления обрабатываемой информации, организованной в одной или нескольких баз данных. Банк данных в общем случае состоит из следующих компонентов: базы данных, системы управления базы данных, словаря данных, администратора, вычислительной системы и обслуживающего персонала. Расшифруем в вкратце: Базы данных – представляют собой совокупность специальным образом организованных данных, хранимых в памяти вычислительной системы и отображающих состояние объектов и их взаимосвязей в рассматриваемой предметной области. То есть информация в компьютере структурируется и хранится в виде таблиц, которые объединяются в базы данных. Базы данных – это один или несколько файлов данных, предназначенных для хранения, изменения и обработки больших объемов взаимосвязанной информации. Примерами баз данных могут быть телефонная книга, каталог товаров, штатное расписание и т.д. Логическую структуру хранимых в базе данных называют моделью представления данных. К основным моделям представления данных относятся: - иерхарическая - сетевая - реляционная 2 - пост реляционная - многомерная - объектно-ориентированная Система управления базами данных (СУБД) – это комплекс языковых и программных средств, предназначенный для создания, ведения и совместного использования БД многими пользователями. СУБД – это система программного обеспечения, представляющая доступ к данным многих пользователей. СУБД обеспечивает правильность, полноту и непротиворечивость данных, а также простой и понятный интерфейс. Словарь данных (СД) – представляет собой подсистему БнД, предназначенную для централизованного хранения информации о структурах данных, взаимосвязях файлов БД друг с другом, типах данных и форматах их представления, принадлежности данных пользователям, кодах защиты и разграничения доступа и т.д. Администратор базы данных (АБД) – есть лицо или группа лиц, отвечающих за выработку требований к БД, ее проектирование, создание, эффективное использование и сопровождение. В процессе эксплуатации АБД обычно следит за функционированием информационной системы, обеспечивает защиту от несанкционированного доступа, контролирует избыточность, непротиворечивость, сохранность и достоверность хранимой в БД информации. Для однопользовательских ИС функции АБД обычно возлагаются на лиц, непосредственно работающих с приложением БД. В вычислительной системе АБД взаимодействует с администратором сети. В обязанности администратора сети входят контроль за функционированием аппаратно-программных средств сети, реконфигурация сети, восстановление программного обеспечения после сбоев и отказов оборудования и обеспечение разграничения доступа. Вычислительная система (ВС) – представляет собой совокупность взаимосвязанных с согласованно действующих ЭВМ или процессов и других устройств, обеспечивающих автоматизацию процессов приема, обработки и выдачи информации потребителям. ВС должна иметь достаточный объем оперативной и внешней памяти прямого доступа. Обслеживающий персонал – выполняет функции поддержания технических и программных средств в работоспособном состоянии. Он проводит профилактические, регламентные, восстановительные и другие работы по планам, а также по мере необходимости. 3 Системы управления базами данных. Классификация СУБД В общем случае под СУБД можно понимать любой программный продукт, поддерживающий процессы создания, ведения и использования БД. К СУБД относятся следующие основные виды программ: - полнофункциональные СУБД - серверы БД - клиенты БД - средства разработки программ работы с БД. Полуфункциональные СУБД (ПФСУБД) – представляют собой традиционные СУБД, например Microsoft Access, MS FoxPro и Paradox. Обычно ПФСУБД имеют развитый интерфейс, позволяющий с помощью команд меню выполнить основные действия с БД: создавать и модифицировать структуры таблиц, вводить данные, формировать запросы, разрабатывать отчеты, выводить их на печать. Серверы БД – предназначены для организации центров обработки данных в сетях ЭВМ. Серверы БД реализуют функции управления БД, обычно с помощью операторов SQL. В роли клиентских программ для серверов БД в общем случае могут использоваться различные программы: ПФСУБД, электронные таблицы, текстовые процессоры, программы электронной почты и т.д. Средства разработки программ работы с БД можно назвать следующие инструментальные системы: Delphi, Power Builder, Visual Basic и др. По характеру использования СУБД делят на персональные и многопользовательские. Например: Paradox. Например: Oracle Access, Informix Visual FoxPro Clipper D Base Персональные СУБД обычно обеспечивают возможность создания персональных БД и недорогих приложений, работающих с ними. Многопользовательские СУБД включают в себя сервер БД и клиентскую часть. По использованию моделей данных СУБД разделяют на иерархические, сетевые, реляционные, объектно-ориентированные и другие типы. Обеспечение целостности БД составляет необходимое условие успешного функционирования БД. Целостность БД есть свойство базы данных, означающее, что в ней содержится полная непротиворечивая и адекватно отражающая предметную область информации. Целостное состояние БД описывается с помощью ограничений целостности в виде условий, которые должны удовлетворять хранимые в базе данные. 4 Пример: 1) ограничение диапазонов возможных значений атрибутов объектов 2) отсутствие повторяющихся записей в таблицах реляционных БД. Свойства СУБД. К основным свойствам СУБД и базы данных можно отнести: 1. Отсутствие дублирования данных в различных объектах модели, обеспечивающее однократный ввод данных и простоту их корректировки; 2. Непротиворечивость данных; 3. Целостность БД; 4. Возможность многоаспектного доступа; 5. Всевозможные выборки данных и их использование различными задачами и приложениями; 6. Защита и восстановление данных при аварийных ситуациях, аппаратных и программных сбоях, ошибках пользователя; 7. Защита данных от несанкционированного доступа средствами разграничения доступа для различных пользователей; 8. Возможность модификации структуры базы данных без повторной загрузки данных; 9. Обеспечение независимости программ от данных, позволяющей сохранить программы при модификации структуры базы данных; 10. Реорганизация размещения данных базы на магнитном носителе для улучшения объемно-временных характеристик БД; 11. Наличие языка запросов высокого уровня ориентированного на конечного пользователя, который обеспечивает вывод информации из базы данных по любому запросу и представление ее в виде соответствующих отчетных форм, удобных для пользователя. Технология использования СУБД. СУБД является основой создания практияеских приложений пользователя для различных предметных областей. Критерии выбора СУБД пользователем. Выбор СУБД для практических приложений пользователем определяется многими факторами, к которым относятся: 1. имеющееся техническое и базовое программное обеспечение, их конфигурация, оперативная и дисковая память; 2. потребности разработываемых приложений пользователем; 3. тип поддерживаемой модели данных, специфика предметной области, топология информационно-логической модели; 4. требования к производительности при обработке данных; 5. наличие в СУБД необходимых функциональных средств; 6. наличие русифицированной версии СУБД; 5 7. уровень квалификации пользователей и наличие в СУБД диалоговых средств разработки и работы с БД. ТЕМА: Модели и типы данных. Иерархическая модель. В иерархической модели между данными можно описать с помощью упорядоченного графа (или дерева). Рис. 1 Представление связей в иерархической модели Для описания структуры (схемы) иерархической БД используется тип данных «дерево». Подходят языки программирования Cu и «запись» языка Паскаль. Тип «дерево» является составным. Он включает в себя подтипы (поддеревья), каждый из которых является типом «дерево». Пример типа «дерево» как совокупности типов. Рис. 2 Отдел Отд. номер Отд. размер. Отд. зарп. Начальник Сотрудник Нач. номер Нач. имя Нач. телефон Сотр.номер Сотр. имя Сотр. зарпл. Корневым называется тип, который имеет подчиненные типы, и сам не является подтипом. Подчиненный тип (подтип) является потомком по отношению к типу, который выступает для него в роли предка. Потомки одного и того же типа являются близнецами по отношению друг к другу. В целом тип «дерево» представляет собой иерархически организованный набор типов «запись». Деление в иерархической базе. Рис. 3 Отдел 10 17 36700 6 Сотрудники Начальник 103 Петров А.В. 4156 201 Кургатов В.И. 3500 К достоинствам иерархической модели данных относятся эффективное использование памяти ЭВМ и неплохие показатели времени выполнения основных операций над данными. Недостатком иерархической модели является ее громоздкость для обработки информации с достаточно сложными логическими связями, а так же сложность понимания для обычного пользователя. Сетевая модель. Сетевая модель данных позволяет отображать разнообразные взаимосвязи элементов данных в виде произвольного графа, обобщая тем самым иерархическую модель данных. Представление связей в сетевой модели. Рис. 4 Для описания схемы сетевой БД используется две группы типов: «запись» и «связь». Для описания схемы сетевой БД используется две группы типов: «запись» и «связь». Рис. 5 Пример схемы сетевой БД. Работают в отделе отдел сотрудник начальник Состоит из сотрудников Имеет начальника Типы связей здесь обозначены надписями на соединяющих типы записей линиях. Достоинством сетевой модели является возможность эффективной реализации по показателям затрат памяти и оперативности. В сравнении с 7 иерархической моделью сетевая модель представляет большие возможности в смысле допустимости образования произвольных связей. Недостатком сетевой модели данных является высокая сложность и жесткость схемы БД, построенной на ее основе, а также сложность для понимания и выполнения обработки информации в БД обычным пользователем. В сетевой модели данных ослаблен контроль целостности связей вследствие допустимости установления произвольных связей между записями. Реляционная модель. Реляционная модель данных предложена сотрудникам фирмы IBM Эдгаром Коддом и основывается на понятии отношение (relation). Отношение представляет собой множество элементов, называемых кортежами. Наглядной формой представления отношения является привычная для человеческого восприятия двумерная таблица. Таблица имеет строки (записи) и столбцы (колонки). Каждая строка таблицы имеет одинаковую структуру и состоит из полей. Достоинство реляционной модели данных заключается в простоте, понятности и удобстве физической реализации на ЭВМ. Простота и понятность для пользователя. Основными недостатками реляционной модели являются следующее: - отсутствие стандартных средств идентификации отдельных записей - сложности описания иерархических и сетевых связей Определение реляционной модели. Реляционная модель данных (РДМ) некоторой предметной области представляет собой набор отношений, изменяющихся во времени. Элементы реляционной модели. Элементы РМ Формы представления 1. Отношение Таблица 2. Схема отношения Строка заголовков столбцов таблицы (заголовок таблицы) 3. Кортеж Строка таблицы 4. Сущность Описание свойств объекта 5. Атрибут Заголовок столбца таблицы 6. Домен Множество допустимых значений атрибута 7. Значение атрибута Значение поля в записи 8. Первичный ключ Один или несколько атрибутов 9. Типы данных Тип значений элементов таблицы Рис. 6 Пример представления отношения Сотрудник Отношение Сотрудник Атрибут Отдел Строка отношения 8 (таблица) ФИО Иванов Петров Сидоров Кортеж (строка) (заголовок столбца) (строка заголовков) Отдел Должность Дата рождения 002 Начальник 27.09.51 001 Заместитель 15.04.55 002 Инженер 13.01.70 Значение атрибута (значение поля в записи) Первичным ключом (ключом отношения, ключевым атрибутом) называется атрибут отношения, однозначно идентифицирующий каждый из его картежей. (в отношении Сотрудник ключевым является атрибут «ФИО») Ключ может быть составным (сложным), т.е. состоять из нескольких атрибутов. Ключи Обычно используют для достижения следующих целей: 1) исключение дублирования записей в ключевых атрибутах 2) упорядочение картежей (по возрастанию или убыванию) 3) ускорение работ к кортежам отношения 4) организации связывания таблиц Понятие внешнего ключа. С помощью внешних ключей устанавливающее связи между отношениями. Например, имеются два отношения Студент (ФИО, Группа, Специальность) и Предмет (Название, Пр., Часы), которые связаны отношением Студент – Предмет (ФИО, Назв. Пр., Оценка). В связующем отношении атрибута ФИО и Назв. Пр. образуют составной ключ. Эти атрибуты представляют собой внешние ключи, являющиеся первичными ключами других отношений. Рис. 7 Связь отношений. ФИО Группа Специальность Назв. Пр. ключ ФИО Часы ключ Назв. Пр. Оценка внешний внешний ключ ключ ТЕМА: Проектирование структуры БД. На этапе проектирования БД пользователь должен определить, из каких таблиц состоят БД, какие данные нужно поместить в каждую таблицу, какие поля являются первичными ключами и как связать эти таблицы. В результате 9 проектирования БД должна быть определена логическая структура и межтабличные связи. Индексирование. Определение ключа для таблицы означает автоматическую сортировку записей, контроль отсутствия повторений значений в ключевых полях записей и повышения скорости выполнения операций поиска в таблице. Для реализации этих функций в СУБД применяют индексирование. Под индексом понимают средство ускорения операции поиска записей в таблице. Связывание таблиц. В реляционных СУБД для указания связей таблиц производят операцию их связывания. Многие СУБД при связывании таблиц автоматически выполняют контроль целостности вводимых в базу данных в соответствии с установленными связями. Это повышает достоверность хранимой в БД информации. Установление связей между таблицами облегчает доступ к данным. Основные виды связи таблиц. При связывании двух таблиц выделяют основную и дополнительную (подчиненную) таблицы. Логическое связывание таблиц производится с помощью ключа связи. Ключ связи, по аналогии с обычным ключом таблицы состоит из одного или нескольких полей, которые в данном случае называют полями связи. Основные виды связи: - один – один (1:1) - один – много (1:М) - много – один (М:1) - много – много (М:М) Характеристика видов связей таблиц. Характеристика полей связи по видам Поля связи основной таблицы Поля связи дополнительной таблицы (1:1) (1:М) (М:1) (М:М) Является ключом Является ключом Является ключом Не является ключом Не является ключом Является ключом Не является ключом Не является ключом Связь вида 1:1. Связь вида 1:1 образуется в случае, когда все поля связи основной и дополнительной таблиц являются ключевыми. 10 Поскольку значения в ключевых полях обеих таблиц не повторяются, обеспечивается взаимно однозначное соответствие записей из этих таблиц. Сами таблицы становятся равноправными. Пример 1. Пусть имеются основная 01 и дополнительная Д1 таблицы. 01 Поле 11 а б в Поле 12 10 40 3 Д1 Поле 21 а в Поле 22 стол книга На практике связи вида 1:1 используются сравнительно редко, т.к. хранимую в двух таблицах информацию легко объединить в одну таблицу, которая занимает гораздо меньше места в памяти ЭВМ. Возможны случаи, когда удобнее иметь не одну, а две и более таблицы. Причинами этого может быть необходимость ускорить обработку, повысить удобство работы нескольких пользователей с общей информацией, обеспечить более высокую степень защиты информации. Связь вида 1:М. Связь 1:М имеет место в случае, когда одной записи основной таблицы соответствует несколько записей вспомогательной таблицы. ПРИМЕР: Пусть имеются две связанные таблицы 02 и Д2. В таблице 02 содержится информация о видах мультимедиа - устройств ПЭВМ, а в таблице Д2 – сведения о фирмах – производителях этих устройств, а также о наличии на складе хотя бы одного устройства. 02 Код Вид устройства а СD-ROM б CD-Recorder в Sound Blaster *+ *+ Д2 * Код Фирма производитель Наличие а Acer Да 11 а а а а б б б в Нет Да Да Да Нет Нет Да Да Mitsumi NEC Panasonic Sony Philips Sony Yamaha Creative Lals * - ключи + - связи Таблица Д2 имеет два ключевых поля, т.к. одна и та же фирма может производить устройства различных видов. В примере фирма Sony производит устройства считывания и переписи с компакт – дисков. Связь вида М:1. Связь вида М:1 имеет место в случае, когда одной или нескольким записям основной таблицы ставится в соответствие одна запись дополнительной таблицы. ПРИМЕР: 03 + Поле 11 Поле 12 Поле 13 Деталь 1 Чугун Марка 1 Деталь 1 Чугун Марка 2 Деталь 2 Сталь Марка 1 Деталь 2 Сталь Марка 2 Деталь 2 Сталь Марка 3 Деталь 3 Аллюминий ------Деталь 4 Чугун Марка 2 Д3 *+ Поле 21 Деталь 1 Деталь 2 Деталь 3 Деталь 4 Поле 22 4.03.98 3.01.98 17.02.98 6.05.98 Поле 23 90 35 90 240 В основной таблице 03 содержится информация о названиях деталей, видах материалов и марках материала. В дополнительной таблице Д3 содержаться 12 сведения о названиях деталей, планируемых сроках изготовления и стоимости заказов. Полученные записи могут быть полезны при планировании или принятии управленческих решений, когда необходимо иметь все возможные варианты исполнения заказов по каждому изделию. Таблица 03 не имеет ключей и в ней возможно повторение записей. Если таблицу Д3 сделать основной, а таблицу 03 – дополнительной, получим связь вида 1:М. Связь вида М:М. Самый общий вид связи М:М возникает в случаях, когда нескольким записям основной таблицы соответствует несколько записей дополнительной таблицы. ПРИМЕР: Пусть в основной таблице 04 содержится информация о том, на каких станках могут работать рабочие некоторой бригады. Таблица Д4 содержит сведения о том, кто из бригады ремонтников какие станки обслуживает. 04 * *+ Работает На станке Иванов А.В. Станок 1 Иванов А.В. Станок 2 Петров Н.Г. Станок 1 Петров Н.Г. Станок 3 Сидоров В.К. Станок 2 Д4 * Обслуживает Голубев Б.С. Голубев Б.С. Зыков А.Ф. Зыков А.Ф. *+ Станок Станок 1 Станок 3 Станок 2 Станок 3 Таблица 04+Д4 работа Иванов А.В. Иванов А.В. Петров Н.Г. Петров Н.Г. Петров Н.Г Сидоров В.К. станок Станок 1 Станок 2 Станок 1 Станок 3 Станок 3 Станок 2 обслуживание Голубев Б.С. Зыков А.Ф Голубев Б.С. Голубев Б.С. Зыков А.Ф. Зыков А.Ф. 13 «Кто обслуживает станки, на которых трудится Петров Н.Г. Связь М:М не устанавливает подчиненности таблиц. Контроль целостности связей. Рассмотрим связь вида 1:М … х … Основная таблица … Х … Х … Дополнительная таблица Контроль целостности связей обычно означает анализ содержимого двух таблиц на соблюдение следующих правил: - каждой записи основной таблицы соответствует нуль или более записей дополнительной таблицы; - в дополнительной таблице нет записей, которые не имеют родительских записей в основной таблице; - каждая запись дополнительной таблицы имеет только одну родительскую запись в основной таблице Основные операции над данными двух таблиц: - ввод новых записей - модификация записей - удаление записей Требования, предъявляемые к базе данных. База данных должна: 1. удовлетворять требованиям заказчика и содержать сведения только о тех объектах, которые интересуют заказчика; 14 2. обладать приемлемым быстродействием, то есть пользователь должен получать необходимые ему сведения за короткое время; 3. иметь возможность последующего расширения без существенной переделки, как самой базы данных, так и средств управления ею; 4. не зависить (или мало зависить) от количества помещаемых в нее данных; 5. легко перестраиваться при изменении программной и аппаратной среды; 6. содержать только достоверные данные, достоверность данных должна обеспечиваться как при вводе новых данных, так и при редактировании уже имеющихся данных; 7. доступ к данным должны иметь определенные лица. Этапы проектирования и создания БД. Перед созданием БД необходимо располагать описанием выбранной предметной области, которое должно охватывать реальные объекты и процессы, иметь всю необходимую информацию для удовлетворения предполагаемых запросов и определять потребности в обработке данных. Структура данных предметной области может отображаться информационно – логической моделью. На основе этой модели легко создается реляционная БД. Для построения модели необходимо выделить типовые объекты предметной области. Информационный объект – это информационное описание некоторой сущности реального объекта, процесса или события. Информационный объект образуется совокупностью взаимосвязанных реквизитов, представляющих качественные характеристики некоторой предметной области. Совокупность реквизитов информационного объекта должна отвечать требованиям информации. При проектировании реляционной БД необходимо решить вопрос о наиболее эффективной структуре данных. Основные цели, которые при этом преследуются: 1. Обеспечение быстрого доступа к данным таблицы. 2. Исключение ненужного повторения данных, которое может являться причиной ошибки при вводе. 3. Обеспечение целостности данных таким образом, чтобы при изменении одних объектов автоматически происходило изменение связанных с ним объектов. В FoxPRO целостность данных средствами СУБД не поддерживается, поэтому пользователь сам должен позаботится об этом (каким образом – рассмотрим позже). Нормализация базы данных. Процесс уменьшения избыточности информации нормализацией. 15 в БД называется Реквизиты каждого информационного объекта должны отвечать следующим требованиям нормализации: 1. Информационные объекты должны содержать уникальный идентификатор (ключ). 2. Ключ является простым, если он состоит из одного реквизита и составным, если из нескольких. 3. Все описанные реквизиты должны быть взаимонезависимы. 4. Все реквизиты, входящие в составной ключ должны быть взаимонезависимы. 5. Каждый описательный реквизит должен функционально полно зависеть от ключа, т.е. каждому значению ключа соответствует только одно значение описательного реквизита. 6. При составном ключе описательные реквизиты должны целиком завесить от всей совокупности реквизитов, образующих ключ. Теория нормализации оперирует с пятью нормальными формами таблиц. Эти формы предназначены для уменьшения избыточной информации от 1-ой до 5ой нормальной формы. Поэтому каждая последующая форма должна удовлетворять требованиям предыдущей формы и некоторым дополнительным условиям. Таблица в 1 нормальной форме должна удовлетворять следующим требованиям: 1. Таблица не должна иметь повторяющихся записей. 2. В таблице должны отсутствовать повторяющиеся группы полей. 3. Каждое поле неделимо. 4. Столбцы и строки должны быть не упорядочены. Для удовлетворения условия 1 каждая таблица должна иметь, по крайней мере, один уникальный ключ. Поэтому для выполнения условия необходимо создать индекс (определить ключ), который включал бы совокупность всех полей таблицы, однозначно определяющих запись. Требование 2 должно устранять повторяющиеся группы. Вторая нормальная форма. О таблице говорят, что она находится во 2-ой нормальной форме, если: 1. Она удовлетворяет условиям 1-ой нормальной формы. 2. Первичный ключ однозначно определяет всю запись. 3. Все поля зависят от первичного ключа. 4. Первичный ключ не должен быть избыточным. Понятие 2-ой нормальной формы применимы только к таблицам, имеющим составной индекс. Все таблицы, имеющие только одно индексное поле, автоматически удовлетворяет условию второй нормальной формы. 16 Третья нормальная форма. О таблице говорят, что она находится в третьей нормальной форме, если: 1. Она удовлетворяет условиям второй нормальной формы. 2. Ни одно из неиндексных полей таблицы не идентифицируется с помощью другого неиндексного поля (каждое неключевое поле не должно зависить от другого не ключевого поля). Сведение таблицы к третьей нормальной форме предполагает разделение таблицы с целью помещения в отдельную таблицу столбцов, которые не зависят от полного индекса. В результате такого разбиения каждое из неиндекных полей должно оказаться независимым от какого-либо другого неиндексного поля. После определения структуры таблиц, отношений между ними и совпадающих полей, вы готовы к созданию многотабличной БД в Fox PRO. Каждая из таблиц создается независимо от других, и на этой стадии связи между таблицами отсутствуют. Вам потребуется установить связи между таблицами только при создании объектов приложений (запросов, многотабличных форм и ответов и т.д.). Информационно-логическая модель является моделью данных, отображающей предметную область в виде совокупности информационных объектов (ИО) и структурных связей между ними. 17 Графический способ представления ИЛМ. «Учет заказа покупателей». Категория Предприятие Код категории Код предприятия Товар Код товара Покупатель Уровень 0 Уровень 1 Код покупателя Уровень 2 Заказ Код покупателя + код товара + дата заказа Рис. 8 Информационно-логическая модель данных. 18 Логическая структура реляционной базы данных. «Учет заказа покупателей». Товар Категория Код категории Название категории Код товара_________ Код категории Наименование товара Цена Предприятие Покупатель Код предприятия Наименование Руководитель Код покупателя Фамилия Телефон Индекс Область Город Адрес Код предприятия Кредит Примечание Скидка Заказ Код товара Код покупателя Дата заказа Код категории Кол-во закупленного Дата продажи Цена со скидкой Кол-во проданного Команды установки работы FoxPRO. 1. Set status on – для установке на экране статус – строки (по умолчанию off), полезная информация для пользователя: имя открытой базы номер текущей записи активный диск 2. Set talk on/off – (по умолчанию off) – когда выполенние многих команд отображается на экране. 3. Set date German – (ДД.ММ.ГГ) – установка формата даты. 4. Set bell on/off – включение, отключение звукового сигнала 5. Sset confirm on/off – включение, отключение автоматического перехода курсора на следующее поле. 6. Set default to [<список путей>] – задает список путей не обнаруженных в данной директории. Выяснить имя текущей директории можно с помощью функции: SYS (2003) – текущая директория (полный путь) SYS (2004) – полный SYS (2006) 19 СУБД FOXPRO. ВВЕДЕНИЕ. В автоматизированной обработке массовой информации на ЭВМ появилась потребность в специальных языках обработке данных. Технические характеристики и особенности СУБД. Fox PRO основными файлами системы управления базами данных: Fox PRO.EXE, Fox PRO.OVL Fox PRO.INT - файл языковых установок для локализации пакета CONFIG.FP – файл конфигурации Fox PRO Fox USER.DBF, FOX USER.FPT – файлы внутренних установок Fox PRO Fox HELP.DBF, Fox HELP.FPT, Fox HELP.CDX - HELP к системе Fox PRO и другие. Технология и структура данных в СУБД. Все данные хранятся в файлах. Файлы данных, или базы данных, представляют собой таблицу. База данных Поле 1 Поле 2 Поле 3 … Поле N Запись 1 Запись 2 Запись 3 Каждая строка (запись) содержит некоторые сведения об описываемом объекте. Каждая клетка записи называется полем записи. Все записи базы данных имеют идентичную, заданную пользователем структуру и размеры. ПРИМЕР: записи базы кадры Имеет поля, Фамилия, год рождения, семейное положение и т.д. на каждого работника по записи в базе. Типы файлов. В Fox PRO можно создавать и обрабатывать несколько типов дисковых файлов. Каждому файлу дается имя. Расширение определяет тип файла. Для всех файлов Fox PRO установлены стандартные расширения. Основные типы: имя. DBF – файл базы данных имя. FPT – файл примечаний, хранящей мемо-поля базы данных имя. IDX – индексный файл имя. CDX – мультииндексный файл имя. PRG - командный, программный файл имя. MEM – файл для сохранения временных переменных имя. FXP – откомпилированный командный файс PRG имя. APP – объединенный откомпилированный командный файл 20 Файлы БД типа DBF являются основными носителями данных версия 2.5 Fox PRO Число записи в файле до миллиарда Размер записи (в байтах) – до 65500 Число полей в записи – до 255 Число одновременно открытых баз – до 25/255 Типы и размеры полей (в байтах) - символьные поля – до 254 - числовые поля – до 20 - поля дат – 8 - логические поля – 1 Символьные поля (типа С) допускают ввод любых алфавитно-цифровых символов, знаков препинания и т.д. Числа в БД хранятся в числовых полях двух форматов с фиксированной и плавающей точками (типы N и F). Логические поля могут иметь только два значения .Т. (TRUE – истина) и .F. (False – ложь) или .Y. .N. Разрешается вводить и строчные буквы. Поля дат допускает ввод только цифр. Ввод сопровождается автоматическим контролем. Поля дат и логические поля имеют стандартную длину, длины остальных полей определяются пользователем. Поля примечаний (тип М) имеют произвольную длину в каждой записи. Файл примечаний имеет одинаковое с файлом БД имя, но расширение FPT. Создается одновременно вместе с полями БД. В каждой записи файла DBF имеется ссылка фиксированной длины 10 на каждое имеющееся в базе мемополе. Файлы примечаний подчиненными по отношению к файлам DBF. 21 Создание таблиц. Тип файла .Таблица/DBF Наименование полей. 1) может содержать до 10 символов 2) может содержать буквы русские и латинского алфавита, цифры, знаки препинания 3) два поля в одной таблице не могут иметь одинаковые наименования 4) недопустимо: , [ ] "> - пробел ТЕМА: Создание файла БД. Создание файла БД включает два этапа: создание структуры файла и заполнение данными. Структура файла БД типа DBF создается команда - CREATE имя файла CREATE COSTOMER Расширение имени файла DBF указывать необязательно, т.к. оно добавляется автоматически. Если файл создается не на активном в данный момент диске или директории, то нужно указать полный путь. Изменить структуру созданной базы данных можно командой: - Modify Structure Модифицированный файл должен быть предварительно открыт - Use имя файла открытие файла БД Use без параметров закрывает базу данных - Close Database Закрывает все файлы БД и индекс файлов - Close all Закрытие вообще всех файлов Добавление файла новыми записями осуществляется командой - append (blank) Необязательная фраза blank означает, что новая запись остается пустой и не будет отражена на экране. После ввода текущей записи автоматически происходит доступ к следующей записи. Для того, чтобы войти в мемо-поле, необходимо на него поместить курсор и нажать Ctrl – Home или дважды кнопку мыши. Выход из мемо – поля сохранением – клавиши Ctrl – W или Ctrl - End, без сохранения – Escape (будет вопрос – предупреждение). Выход из окна Append осуществляется так же Ctrl – W или Ctrl – End. Листание по записям осуществляется Pq Up/Pq Dn/ Допускается также пометка записей к удалению нажатием Ctrl – Т. Окно редактирования. Команды APPEND, INSERT, EDIT, CHANGE, BROWSE. 22 Перед использованием команды редактирования необходимо наличие открытой БД. Стандартное окно редактирования имеет две формы. Для первых четырех команд оно будет выглядеть одинаково, – все поля БД располагаются вертикально. Назовем форму такого окна CHANGE – окном. Другую форму предъявления данных осуществляет команда BROWSE (Browse – окно). Здесь поля каждой записи располагаются горизонтально – колонками. Добавление новой записи осуществляется нажатием клавиш Ctrl – N (кроме команды APPEND). Можно установить режим копирования в новую запись всех (ON) полей из текущей (не обязательно последней) записи командой. - SETCARRY ON/OFF По умолчанию OFF. Можно установить и выборочное копирование только указанных (полей) командой - SET CARRY TO [<поля>]. BROWSE – окно. Один из наиболее мощных и удобных инструментов доступа к данным. Формат команды: BROWSE [ FIELDS<поля>] [FOR<условие 1>] [FREEZE<поля>] [KEY<выр. 1> [,выр. 2>]] [LAST] [LEDIT/REDIT] [LOCK<выр. №1>] [LPARTITION] [NOAPPEND] [NOCLEAR] [NODELETE] [NOEDIT/NOMO DU] Управление доступом к полям базы. Fields <список полей> - перечень полей. По умолчанию отображаются все поля БД. Имя каждого поля может сопровождаться ключами, определяющими режим доступа к нему: :R – поле доступно только для чтения, однако курсор в поле допускается; :V= <выр. L 1> - контроль выхода из поля. Проверка вводимых данных выполняется по <выр. L 1> после изменения содержимого поля. Если <выр. L 1> = Т., ввод считается правильным, и курсор переходит в следующее поле. 23 Если .F. – выпадает стандартное сообщение, которое может быть заменено на собственное, заданное с параметром :E. :E. = <выр. С 1> - выдача собственного <выр. С 1> сообщения на неправильный ввод данных :F. – проверка не только вводимых, но и уже существующих данных независимо от способа выхода из поля. :Р. = <выр. С 2> - задание формата отображения данных :В. = <выр. 1>, <выр. 2> - указание границ чисел и дат. Возможно, указать только одну из границ, но запятая должна присутствовать обязательно. :Н. = <выр. С 3> - указание собственного заголовка поля. Если заголовок не нужен вообще, следует в качестве <выр. С 3> использовать пробел ("). :W = <выр. L 2> - контроль ввода в поле. Запрещен вход и редактирование, если <выр. L 2> =F. И разрешен, если <выр. L 2> = .Т. ПРИМЕР №1 Есть БД STUD с полями. Пусть данные в таблице будут следующими: NZ – номер зачетной книжки FAM - фамилия GR - группа POL - пол ST – размер степендии KURS – курс Настроить окно редактирования таким образом, что: 1) поля имели заголовки 2) заголовок окна: БД STUD 3) проверка на ввод пол «М» и «Ж» 4) поле NZ не равен «0» 5) размер стипендии > GO 1. USE STUD (открытие БД) Browse title "база данных STUD" Fields NZ:H = "№ зачетной книжки" :12; :V = NZ > 0,; FAM:H = "фамилия":25,; GR:H = "группа":7,; POL:H = "пол":5: V = POL = "M".or.POL = "Ж" :E = "допустимые значения М и Ж",; ST:H = "стипендия":12:V = ST > 60: P = "# # #",; KURS:H = "курс":4:B = 1.4 2. Ввести расчетное поле: подсчитать стипендию за 12 месяцев; добавить какое-то расчетное поле 6) SUM = ST*12:H:"сумма":10:p = "# # # #" (в базе его не будет, а будет только на экране) 3. Выдать только те записи, у которых GR=33 USE STUD BROWSE FOR GR=33 (остальное то же самое) 24 7) W – разрешение (запрет корректировки или ввода) данных. Если опция возвращает значение «ложь» то курсор не устанавливается в данном поле. В опциях :V и :W допускается использование функций, определенных пользователем. Вычисляемые поля. ПРИМЕР 2 В список полей могут включаться вычисленные поля. Отбор данных. Важные опции позволяющие ограничить доступ в базе только к определенному множеству записей. FOR <условие 1> - устанавливает фильтр записей для базы. ПРИМЕР 3 KEY <выр. 1>, [<выр. 2>] – ограничение действия команды диапазонной ключевого выражения <выр. 1> и <выр. 2> активного индексного файла. ПРИМЕР 4 USE STUD INDEX ON GR TO STUD GR (создается индексный файл) Browse key 33, 32 studgr. idx} Разделение окна. ПРИМЕР 5 Sele 1 Use karta index kart BROWSE Fields Skl: H = "склад": B=1.9,: W=tost = 0,; Nomz: H = "Hom, №": V = nomz > 0: W = tost = 0,; Nomb: H = " ":W = tost = 0,; Nam: H = "наименование",; Cen: H = "цена",; Tost: H = "остаток": R,; PRL = cen*tost: H = "сумма": P="999999.99 VALID cen > 0.00 error "введите цену"; {Контроль редактирования записей} Partition 10 LEDIT LPARTITION; FOR skl = 5 {отбор данных} PARTITION <выр. №> - представление записей БД в виде таблицы и одновременно в виде формата команды CHANGE, граница будет проходить по колонке номер <выр. №> LEDIT – при выводе окна Browse левая или правая выводятся в режиме редактирования LPARTITION – курсор устанавливается в левой половине раздельного окна (по умолчанию правой) Ограничение возможности редактирования данных. 25 NODELETE CLOSE DATA BASER RETURN NODELETE – пометка к удалению записей БД с помощью клавиш Ctrl + T или мышью невозможна. Работа с индексами. Стандартные (.idx) и составные (.cdx) (мультииндексный) компактные (.idx). Компактные одиночные индексы могут быть включены в составной индекс в виде индексных входов или тэгов (TAG). Для создания компактного одиночного индекса в команде INDEX ON или REINDEX (при переиндексации) COMPACT. Использование составных индексов более эффективно по следующим причинам: - файловая система открывает только один файл - модификация составного индекса происходит быстрее, чем множества отдельных индексов. Все тэги составного индекса являются активными и модифицируются при каждом изменении ключевого выражения. Для работы с функциями и командами поиска после открытия составных индексных файлов необходимо установить главный тэг при помощи команды SET OR DER TO. Один файл БД может быть проиндексирован по нескольким полям, и иметь любое число индексов. Индексные файлы занимают некоторое место на диске, но гораздо меньше, чем при сортировке. В FOX PRO можно создать 2 типа индексных файлов. 1. Обычный индекс функции с расширением .IDX (одно-индексный файл). 2. Мультииндексный файл с расширением .CDX Такой файл может хранить сразу несколько простых индексных файлов. Каждый отдельный индекс называется ТЭГ. Каждый ТЭГ имеет свое имя. Мультииндексные файлы могут быть 2-х видов: а) структурный мультииндексный файл с именем как БД б) обычный мультииндексный файл с произвольным именем Использование его предпочтительно, т.к. уменьшает число одновременно открытых файлов, а так же ускоряет доступ к файлам. ПРИМЕР 1. Создать компактный одно-индексный файл по ключу NZ. USE STUD INDEX ON NZ TO STUD NZ. IDX COMPACT Открыть простой индексный файл USE STUD INDEX TO. STUD NZ (первоначально открыть базу) REINDEX – переиндексация открытого индекса. 2. Создать мультииндексный файл с ключами а) NZ; 26 б) NZ и GR в) INDEX ON NZ TAG NZ OF STUD. CDX г) INDEX ON STR (NZ) + STR (GR) TAG NZ CR OF STUD. CDX У мультимедийных файлов STUD. CDX 2 индекса с именем TAG – NZ TAG – NZ GR (во втором случае индексные поля проводятся в системе формат функции STR(I)). Удаление данных. В FOX PRO имеются несколько команд удаления данных ERASE <файл> - удаление любого не открытого в данных момент файла. Расширение имени обязательно. DELETE FILE [<файл>] – аналогичная. ZAP – удаление всех записей в активном файле БД с сохранением его структуры. DELETE [<границы>] [WHILE<условие>] [FOR<условие>] – пометка к удалению записей в указанных границах и/или отвечающих указанным условиям. DELETE без параметров помечаем только одну текущую запись (в окне редактирования Ctrl – T). PACK [MEMO] [DBF] – физическое удаление помеченных ранее записей и сжатие файла. После выполнения команды указатель записей устанавливается в начало базы. Если имеются открытые индексы, они перестраиваются. По умолчанию упаковываются DBF и FPT. RECALL [<границы>] [WHILE<условие>] [FOR<условие>] – снятие пометок к удалению. RECALL без параметров действует только на текущую запись. Просмотр данных. DISPLAY [<границы>] [<поля>] [WHILE<условие>] [FOR<условие>] [OFF] [TO PRINT/TO FILE <файл>], здесь: OFF – указание на то, что номер записи не выводится; TO PRINT – результат команды выдается на принтер, FILE <файл> - или в файл, по умолчанию – экран Записи, помеченные к удалению, команда выдает со звездочкой (по умолчанию SET DELETE OFF) SET DELETE ON – записи делаются невидимыми и не участвуют в обработке данных 27 Выдачу имен полей можно подавать командой: SET HEADING OFF Пример: SET DELETE ON SET HEADING OFF USE KADR DISPLAY ALL OFF FOR POL = “Ж” TO PRINT (выдача всех записей, без номера записи женщин на принтер) Перемещение в базу данных. При работе с базой данных необходимы средства перемещения внутри ее. Запись, на которой находится указатель записи, является текущей и только к ней в данный момент возможен непосредственный доступ. Имеется несколько разновидностей команд, изменяющих положение указателя записей. Go top [ in <область>] – переход к самой первой записи файла; Go botton [ in <область>] – переход к самой последней записи файла; Go <выр.> [ in <область>] – переход к записи c указанным в <выр.> номером; SKIP <выр.> [ in <область>] – переход к записи, отстоящей от текущей на указанное в <выр.> число записей (может быть и отрицательным!) (переход указателя назад) SKIP без параметров – переход на следующую запись (SKIP 1) in <область> - указывает над базой из какой области должна выполниться команда Функции. Для контроля положения указателя и наличия записей в файле предусмотрены функции: RECNO ([<область>]) - указывает номер текущей записи; RECCOUNT ([<область>]) – выдает общее число записей в файле базы данных, включая записи, помеченные к удалению; EOF ([<область>]) – функция конца файла. Она истинна (.Т.), если конец достигнут, и ложна (.F.) в противном случае; BOF ([<область>]) – то же, но для начала файла. Функции в FOX PRO имеют характерный синтаксис – скобки, даже если никакого аргумента нет. Пример: USE STUD (всего 10 записей) GO 5 переход к 5 записи ? RECNO ( ) текущая запись 5 ? RECCOUNT ( ) количество записей в базе данных = 10 SKIP переход к 6 записи 28 SKIP – 3 переход к 3 записи DELETE NEXT 3 пометка к удалению 3, 4, 5 записей RECALL RECORD 5 снятие пометки с записи 5 PACK сжатие файла с возвратом в начало базы ? RECNO ( ) покажет 1 запись ? RECCOUNT ( ) осталось 8 записей Изменение данных. В Fox PRO имеется возможность не только вручную редактировать данные, но и изменять их путем присвоения или вычислений. REPLACE [<границы>] [WHILE<условие>] [FOR<условие>] <поле 1> WITH <выражение> [<поле 2> WITH <выражение>,…] [ADDITIVE] [NOOPTIMIZE] Эта команда осуществляет множественное изменение полей БД, в том числе и вычисляемые выражения. ADDITIVE – только для мемо-полей и <выражение> будет записываться в конец поля. Если этот параметр опущен, то старое значение будет замещено <выражением>. Если не указаны границы, то присвоение будет относиться к текущей записи. ПРИМЕР 1. Обнулить в БД STUD значение поля NZ USE STUD REPLACE all NZ WITH O Нач. тав = 0 ПРИМЕР 2 USE Kadr REPLACE ZP WITH ZP·1.2 FOR ZP < 10000 REPLACE ZP WITH ZP+6000 FOR tab = 90 (Увеличивается з.п. на 20%, у кого з.п. < 10000 после з.п. замещается на з.п.+6000 таб. ном. =90 REPLACE ZP WITH IIF (tab = 90, ZP·1.2+6000, ZP·1.2) FOR ZP < 10000 Очистку полей БД выполняет команда BLANK [<граница>] [Fields<поля>] [WHILE<условие>] [FOR<условие>] [NOOPTIMIZE] Если отсутствует <граница> или <условие>, очищена будет только текущая запись, BLANK без параметров Fields очищает все поля базы. Локализация и поиск данных в базе. Фильтрация данных. Set filter to [<условие>] 29 Здесь <условие> указывает на то, какие именно записи могут быть доступны для обработки. ПРИМЕР: USE STUD Set filter to GR=33 BROWSE Set filter to отменяет фильтр. ! Перед фильтрацией необходимо указатель записи поставить на начало БД (GO TOP). Последовательный поиск. LOCATE [<границы >] FOR <условие> [WHILE<условие>] Если отсутствует, то поиск ведется во всем файле с 1-ой записи. При успешном поиске RECNO ( ) равна № этой записи FOUND( ) значение .Т. При неудачном RECNO ( ) равна числу записей в БД +1 FOUND( ) .F. EOF ( ) значение .Т. – файл закончен Продолжение поиска CONTINUE ПРИМЕР В базе STUD найти все фамилии, начиная на А. Set talk on – для сообщения о ходе поиска Use STUD LOKATE FOR SUB STR (fam, 1,1) = "A" RECORD = 3 (запись 3) CONTINUE RECORD = 5 (запись 5) CONTINUE End of Locate scope (конец границы поиска) Ускоренный поиск. Индексный файл не только упорядочивает БД для просмотра, но и ускоряет поиск в ней по ключу, заданному в индексе, если пользоваться командой. SEEK <выражение> ПРИМЕР: Use STUD index STUD NZ Seek 100 Display ZN, FAM На экране: Record # ZN FAM 99 100 Иванов Имеется полезная функция индексного поиска 30 SEEK (<выражение> [,<область >] Возвращает значение .Т., если удачный поиск и .F. если нет. Она заменяет комбинацию команды SEEK и функции FOUND( ) Связь вида одна – запись - с одной. Команда SET RELATION TO <ключ > INTO <область > [,<ключ> INTO <область >…] [ADDITIVE] Связывает указатель записей в активной рабочей области с указателями записей из других рабочих областей, имена которых указаны после слова INTO, по заданному общему полю (ключу). Единственное условие – файл, с которым устанавливается связь, должен быть проиндексирован по этому полю. ПРИМЕР: Связь БД KARTA по ключу STR (kod m) + str (kod t) С БД SPRV M STR (kod m) С БД SPRV T STR (kod t) Чтобы получить наименьшее магазина, товара и цену. Sele a FUNCTION P KOD m Use karta POISK = .T. Set order to tag kod MT Poisk = SEEK (STR (kod Sele b m),2) – область 2 с таблицей Use SPRAVM INDEX SPRAVM SPRAVT Sele c Return Poisk Use SPRAVT INDEX SPRAVT FUNCTION Pkodt Sele a POISK = .T. Set Relation to STR (kod m) into b additive POISK t = SEEK (STR (kod Set Relation to STR (kod t) into c additive t),3) – область 3 с таблицей BROWSE Field kod m: H = "код маг": SPRAVT V = Pkod m ( ):E = "нет такого магазина" Return Poisk b. NMAG: H = "наименование магазина" kod t: H = "код товара": V = Pkod t ( ):E = "нет такого товара"; C. NTOV: H = "наименование товара"; C. CENA: H = "цена"; Set Relation to отмена связей Close data закрытие БД Слово ADDITIVE – обеспечивает сохранение связей, установленных ранее. Связь вида одна запись – со многими. Команда устанавливает связь такого типа между двумя или несколькими БД. SET SKIP TO [<область 1>[, <область 2 >]…] При этом с каждой записью из старшей базы могут быть сцеплены несколько записей из младшей базы. Связь может быть установлена сразу с несколькими младшими базами, находящимися в указанных <областях>. Прежде чем использовать команду SET SKIP TO необходимо выпольнить начальное сцепление вида “одна связь с одной” командой Set Relation. 31 Удаление связи “одна запись со многими” осуществляется командой SET SKIP TO без параметров. ПРИМЕР: Select a Use karta Set order to tag kod MT Select b Use Rasxod Set order to tag kod MT Select c Use PRIXOD Set order to tag kod MT Sele a Set Relation to STR (kod m) + STR (kod t) into c additiv Set Relation to STR (kod m) + STR (kod t) into b additiv Set skip TO C, b BROWSE Field kod m: H = "код магазина"; kod m: H = "код товара"; C. kol: H = "кол. прихода"; C. sum: H = "сумма"; b. kol: H = "кол. расхода"; b. sum: H = "сумма расходов"; Set skip TO Set Relation to Close Data Во многих случаях вообще лучше прибегнуть к поиску нужной записи командой (функцией SEEK) нежели к установлению постоянной связи. Схема организации связей: Use <база 1> IN a Use <база 2> IN b INDEX <индекс 2> Use <база 3> IN с INDEX <индекс 3> Sele a Set Relation to <ключ базы 1> INTO b && сцепление базы 1 с базой 2 Sele b Set Relation to <ключ базы 2> INTO b && сцепление базы 2 с базой 3 Сцепление базы Kodr.dbf выполняется с одной областью, эта область с другой областью, как бы по мере перемещения из области в область. Создание командных файлов. Modify Command <имя файла> - вызывает встроенный текстовый редактор Fox Pro с помощью которого пишутся программные файлы. 32 DО <имя командного файла> - запускает выполнение программы (расширение PRG указывать необязательно). - Исполнение программы прерывается клавишей Esc. SET ESCAPE ON/OFF (по умолчанию ON) В готовой программе эта возможность должна быть подавлена параметром OFF. !/Run <программа> - команда выполнения внешних по отношению к Fox Pro программ. ПРИМЕР: Для установки текущей системной даты из прикладной программы: D = 03.11.01 ! DATE & d ?DATE ( ) 03.11.01 Команды ввода - вывода. Clear – команда очистки экрана. @ <Y1, X1> [Clear/ Clear to <Y2, X2>] ПРИМЕР: очищает прямоугольные области экрана @ 5,0 Clear && очищает с 5 строки весь экран. @ 15,5 Clear to 20,50 && координаты: 15,5 на 20,50 Команды ввода – вывода @ … SAY … GET. Команда используется для форматирования ввода – вывода данных на экран (принтер). @ <Y, X> [SAY <выр 1>[PICTURE<впр С 1>] [FUNCTION<ф коды 1>] [SIZE <выр N 1> <выр N 2>] [COLOR SCHEME <выр N 3>/COLOR <список цветовых пар>]] [Get <переменная/ поле>[PICTURE<впр С 2>] [FUNCTION<ф коды 2>] [DEFAULT <выр 2>] [ENABLE/DISABLE] [MESAGE <выр 3>] [[OPEN] Window <окно>] [RANGE [выр 3] [,<выр 4>]] 1{[SIZE<выр 4>,<выр 5>] [VALID<выр L1>/<выр N6>[ERROR<выр С4>]] [WHEN <выр L2>] [COLOR SCHEME <выр N7>/COLOR <список цветовых пар>]] 33 Здесь Y и X – пара чисел, определяющих номер строки и столбца (для экрана это соответственно 0-24, и 0-79, для принтера определяется размером листа бумаги). Параметры команды: ПРИМЕР: @ 4,8 SAY “номер - ” + LTRIM(STR(X,1)), если X=7 выдаст “номер - 7” 1. 4 – число строк, выр 5 – число колонок, ПРИМЕР: f = “Петропавловский А.” @ 2,4 SAY “Фамилия:” Get f SIZE 3,6 Read – команда READ осуществляет собственно считывание из редактируемого поля. Фамилия: Петроп авловс кий А. Символы шаблона PICTURE разрешают ввод вместо себя только определенных символов данных. А - допускает ввод только букв L - допускает ввод только логических данных вида Т/F N - допускает ввод только букв и цифр X - допускает ввод любых символов Y - допускает ввод только логических данных вида Y/N 9 – в символьных данных допускает ввод только цифр, в числовых – цифр и знаков «+» и «-» # - позволяет вводить цифры, пробелы и знаки «+» и «-» ! – преобразует строчные буквы в прописные (Get, SAY) * - звездочки выводятся перед числами. Может использоваться для защиты от подделки (SAY) . – точка дает позицию десятичной точки в дробном числе (Get, SAY) ПРИМЕР: @ 10, 30 say “Введите серию/номер паспорта”- ; Get pasp PICTURE “ @R ! Серия ААА-XXномер999999”; Valid INLIST (SUBSTR (PASP, 4,2), “МЮ”, “MC”, “MT”); ERROR ‘Это не Москва’ DEFAULT SPACE (11) READ Команда вывода TEXT. TEXT <сообщение> End Text SET SPACE ON (по умолчанию) – вывод данных SET PRINTER ON – вызываем направление на принтер OFF – отмену по умолчанию Команда ввода – вывода WAIT. 34 Основная функция команды – приостановка программы, возможно, с вводом – выводом данных. WAIT [<сообщение>] [ТО <символьная переменная>] [TIMEOUT<выр N>] [WINDOW [NOWAIT]] [CLEAR] Работа с переменными. STORE <выражение> TO <имя переменных> ПРИМЕР: a = с*(2+3) и STORE с*(2+3) TO a STORE o TO f, d, c, r Команда создает переменные и присваивает им значения. Команда управления. IF <условие> <команды> ELSE <команды> ENDIF DO CASE … ENDCASE Если встретилось истинное <условие>, выполняются нижеследующие команды до следующей фразы CASE и OTHERWISE или END CASE и конструкция завершается. Do case case <условие 1> <команды> case <условие 2> <команды> … [OTHERWISE <команды> ] END CASE ПРИМЕР: Из практической работы №7 создать кнопки на экранной форме и описать команды по нажатию на ту или иную кнопку, переменная кнопок BUT Do Case Case but = 1 Gotor Case but = 2 Go bottom Case but = 3 Skip -1 If bof ( ) Go top Lndif && переход на первую запись && переход на последующую запись && предыдущая 35 Case but = 4 Skip If eof ( ) Go bottom Lndif Case but = 5 If delete ( ) Recall Else Delete Lndif Case but = 6 Append Blank Case but = 7 Clear read End case && следующая && удаление && добавление записи && выход Организация циклов. Цикл с условием Do while <условие> <команды> ENDDO EXIT передает управления команде, за ENDDO LOOP осуществляет передачу управления в начало цикла, на саму команду цикла ПРИМЕР: Do WHILE S<1000 INPUT ‘Введите X’ TO X If x<0 Loop Endif If x=0 Exit Lndif S=S+X Lndif - Цикл с параметром FOR <переменная> = <выр N1> TO <выр N2> [<выр N3>] <команды> END FOR - Цикл сканирования базы данных. SCAN [<границы>] [FOR <условие>] [WHILE <условие>] <команды> ENDSCAN 36 ПРИМЕРЫ: Фрагменты программ поиска в базе KADR. DBF всех записей с фамилиями начинающимися с буквы «П», с использованием цикла DO WHILE и SCAN. 1. Use kadr Locate FOR fam = ‘П’ Do WHILE !EOF ( ) <обработка записи> CONTINUE Enddo 2. Use kadr [INDEX kadr fam] SCAN FOR fam = ‘П’ <обработка записи> End Skan 3. Use kadr INDEX kadr fam Seek ‘П’ Do WHILE fam = ‘П’ <обработка записи> skip Enddo 4. Use kadr INDEX kadr fam Seek ‘П’ SCAN WHILE fam = ‘П’ <обработка записи> End scan Функции СУБД. - Математические функции Max (<выр>, <выр 1>, [<выр 2>…]) – возвращает максимальное значение из списка аргументов, которые должны быть все одного типа (символьные, числовые или дата) ? MAX (3, 1, -8) &&3 ? MAX ({04.06.65}{23.10.70}{15.12.91}) && 15.12.91 MIN (<выр>, <выр 1>, [<выр 2>…]) – возвращает минимальное значение из списка аргументов. ROUND (<выр 1>, <выр 2>) – округление <выр 1> до заданного в <выр 2> количества знаков после запятой. ? ROUND (-342.268, 1) && -342.3 - Строковые функции. LEN (<выр C>) – число символов в <выр C>. Длина нулевой строки (‘’) – 0 ? LEN (‘база’) && -342.3 - Функции выделения 37 LEET (<выр N>, <выр C>) – выделение из строки <выр C> указанного в <выр N> - числа символов слева. Если (<выр N>) длинее строки, возвращается вся строка ? LEET (4 ‘база данных’) && база RIGHT (<выр N>, <выр C>) – выделение из <выр C> справа <выр N> символов ? RIGHT (6 ‘база данных’) && данных SUBSTR (<выр С>, <начальная позиция>, [<число символов>]) – выделение из <выр С> подстроки, начиная с <начальная позиция> длиной в <число символов>. ? SUBSTR (‘база данных’, 6, 8) && исходных - Функции преобразования LTRIM (<выр С>) – удаление ведущих пробелов в <выр С>. TRIM/RTRIM (<выр С>) – удаление завершающих пробелов в <выр С>. ALLTRIM (<выр С>) – удаление всех: и ведущих и завершающих пробелов в строке REPLICATE (<выр С>, <выр N>) - (<выр С>) повторяется (<выр С>) раз ? REPLICATE (‘+ -‘, 5) && + - +- +- + SPACE (<выр N>) – формулирование строки пробелов длиной <выр N>. - Функции конвертирования и распознавания букв. LOWER (<выр С>) – преобразовать все прописные буквы <выр С> в строчные. PROPER (<выр С>) – преобразует в <выр С> первую букву каждого слова в прописную, а остальные в строчные (ввод Фамилии, Имени, Отчества). UPPER (<выр С>) – преобразует все строчные буквы <выр С> в прописные. ? UPPER (‘Саша’) && САША ? PROPER (‘саша петров’) && Саша Петров. - Функции работы с датами. CDOW (<выр D>) – возвращает имя дня недели по-английски Set date German ? CDOW ({05.10.91}) && Saturday CMONTN (<выр D>) – предъявляет название месяца по-английски CTOD(<выр C>) – преобразует дату из символьной формы в формат даты (типа D) DATE ( ) – предъявляет системную дату DAY (<выр D>) – число месяца по выр. типа дата <выр D> ? DAY ({05.10.91}) && 5 DOW (<выр D>) – определяет номер дня недели DTOC (<выр D>[, 1]) – преобразует выражение типа дата в символьное выражение ? DTOC ({05.10.91}) && 05.10.91 ? DTOC ({05.10.91}, 1) && 1991 1005 MONTH (<выр D>) – определяет числовое значение номера месяца 38 YEAR(<выр D>) – определяет числовое значение года - Функции преобразования типов данных. CNR (<выр N>) – преобразует значение <выр N> (где N целое число от 1 до 255) в символьное ? CNR (66) && B STR (<выр N>, [<длина>], [<десятичные знаки>]) – преобразует числовое выражение в символьную строку ? STR (384.248, 8, 2) && 384.25 VAL (<выр C>) – преобразует число, представленное в символьной форме (<выр С>), в числовую форму. - Функции проверки файлов и дисков. BOF ([<область>]) – достигнуто (.Т) или нет (.F.) начало файла базы данных DISCSPACE ( ) – число свободных байт на активном диске DELETED ([<область>]) – вырабатывает .Т., если текущая запись намечена на удаление и .F. в противном случае EOF ( ) – достигнут .Т. или .F. нет конец файла Функции СУБД. - Строковые функции. SUBSTR (<выр С>, <начальная позиция>, [<число символов>] – выделение из <выр С> подстроки, начиная с <начальная позиция> длиной в <число символов>. ? SUBSTR (‘база исходных данных’, 6,8) && исходных - Функции преобразования LTRIM (<выр С>) – удаление ведущих пробелов в (<выр С>) RTRIM (<выр С>) – удаление завершающих пробелов в (<выр С>) REPLICATE (<выр С>, <выр N>) – (<выр С>) повторяется (<выр N>) раз ? REPLICATE (‘+ -‘, 5) && +- +- +- +- + LOWER (<выр С>) – преобразует все прописные (большие) буквы в строчные (<выр С>) PRODER (<выр С>) – преобраазует в (<выр С>) первую букву каждого слова в прописную, а остальные в строчные UPPER (<выр С>) – преобразует все строчные буквы (<выр С>) в прописные (большие) - Функции работы с датами. CDOW (<выр D>) – возвращает имя дня недели по-английски Set daate German ? CDOW ({08.10.2002}) && Tuesday 39 CMONTH (<выр D>) – предъявляет название месяца по-английски ПРИМЕР: {создание индексных файлов} use tab 1 index on str (kod. kat) to kat use tab 2 index on str (kod. tov) tag tov of tab 2 index on str (kod. kat) tag katt index on str (kod. kat)+ str (kod. tov) tag kattov {расширение по областям} sele 1 use tab 1 index kat sele 2 use tab 2 в разных областях set order to tag tou переназначен главный тег sele 3 use tab 2 set order to katt sele 4 use tab 2 set order to kattov {I вариант, N:1} {1:M – не возможна!} sele 2 set relation to str (kod. kat) into 1 brows fields a. nam. kat, b. kod. tov, b. nam. tov [set skip to 1] – не нужен set relation to {закрыли связи} {II вариант 1:M} sele 1 set relation to str (kod. kat) into 3 brows c. set skip to 3 M:1 тоже самое что и др. область {Ш вариант 1:M} sele 1 set relation to str (kod. kat) into 4 brows fields a. nam. kat, d. kod. tov, d. nam. tov {категория и *** повторяющаяся категория для товаров} {IV вариант 1:M} sele 4 set relation to str (kod. kat) into 1 brows [set skip to 1] – не нужен 40