КАК РАБОТАТЬ С БАЗАМИ ДАННЫХ

Азы

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

Почему мы будем изучать РARADOX 3.5

Когда я писал эту главу, две проблемы мучили меня.

· Существует минимум четыре популярных СУБД, доступных пользователю-непрограммисту: Рaradox, FoxРro, Microsoft Access, Clarion. Какую из них Вам преподнести? Я остановился на Рaradox, потому что она наиболее популярна среди российских пользователей

· Существует масса версий Рaradox, и хотелось бы рассказать Вам о самой последней: Рaradox for Windows. Это, конечно, не программа, а сказка, но сказка эта станет былью только в том случае, если у Вас компьютер не менее чем с 4 мегабайтами памяти, винчестером мегабайт за 80 и скоростью не ниже 25 мегагерц. В нашей же стране пока наиболее распространены компьютеры с одним мегабайтом памяти. Даже Рaradox 4.0 на таких машинах не пойдет.Кроме того, пока я пишу и издаю эту книгу, корпорация Borland успеет выпустить пару новых версий, и все написанное все равно устареет.

Но я ставлю задачу не столько обучить Вас Рaradox, сколько показать, что такое база данных и что Вы можете с ее помощью сделать. Рaradox для этого вполне подходит. После этого Вы сможете освоить любую другую СУБД или свежую версию Рaradox очень быстро: ведь Вы знаете, что от нее ждать.

Как построен курс по Рaradox

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

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

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

Как создать таблицу

Напомню: база данных - это прямоугольная таблица, состоящая из строк и столбцов. Каждый столбец имеет имя (название) и тип: символьный (текстовый), числовой, или дата. В РARADOX слово "база данных" не употребляется, вместо этого говорят "таблица". Скоро Вы поймете, почему.

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

ФИО (текст, до 20 символов)

Пол (текст, 1 символ, М или Ж)

Оклад (число)

Дата приема на работу (дата)

Удержания (число)

На руки (число)

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

Запустите программу РARADOX на выполнение (РRUSS.BAT).

В верхней части экрана Вы видите главное меню:

Чтение Запрос Отчет Новая Изменить Вид и т.д.

Укажите, что Вы хотите создать новую базу данных:Новая

То есть, двигаясь стелками [<-], [->] по горизонтали, Вы должны достичь в горизонтальном меню позиции Новая, а затем - нажать клавишу [ВВОД], чтобы указать, что Вы выбрали именно эту позицию меню.

Укажите, что Вы хотите назвать ее так: KADR

Наберите KADR и нажмите [ВВОД]. На экране появилась табличка вида:

Имя поля Тип поля

Теперь нужно описать каждое поле, т.е. ввести его имя, указать его тип, (число, текст или дата), а для текстов - указать их длину. Сделайте это.

введите: ФИО [ВВОД]

введите тип и длину поля: А20 [ВВОД]. Это означает, что фамилия может состоять не больше, чем из 20 букв. Не забудьте, что тип поля вводится в латинском алфавите!

Итак, поле ФИО описано. Опишите остальные поля.

Пол [ВВОД] А1 [ВВОД]

Должность [ВВОД] А10 [ВВОД]

Дата приема [ВВОД] D [ВВОД]

Оклад [ВВОД] N [ВВОД]

Удержания [ВВОД] N

На руки [ВВОД] N [ВВОД]

Предвижу Ваш удивленный вопрос: а почему оклад, удержания и на руки мы описали как число, а не как деньги ($)? Ответ Вы знаете и без меня: рубль пока не деньги. А если серьезно, денежный формат - это две цифры после запятой. У нас же копеек пока нет и не предвидится.

Закончите создание таблицы. Нажмите [F2] и попадете в главное меню.Что получилось? Теперь на диске есть файл под названием KADR.DB, который содержит описания столбцов (полей). Файл пока пуст, это как бы разграфленная ведомость, но скоро Вы занесете в него конкретные фамилии, оклады и прочее.

Итак, Вы в состоянии создать таблицу. Конечно, она не обязательно должна состоять из таких столбцов. Например, она может выглядеть так:

· дата проводки (дата),

· номер счета (число или текст),

· сумма-дебет (число)

· сумма-кредит (число).

Или так:

· автор (текст),

· название книги (текст),

· год издания (дата или число),

· код УДК (текст).

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

Как указать таблицу, с которой Вы хотите работать.

В реальной жизни на диске у Вас будет, конечно, не одна таблица, Их будет много, и Вы будете работать, то с одной, то с другой, то с несколькими одновременно. Но нужно указать, с какими именно. Для этого есть позиция меню Чтение. Выберите ее. РARADOX спрашивает у Вас имя таблицы. Можно, конечно, ввести KADR, но настоящий пользователь - это ленивый пользователь. Поэтому нажмите [ВВОД] и ы увидите перечень имеющихся таблиц. Выберите KADR и нажмите [ВВОД])

Как заполнить таблицу

Пока в Вашей таблице нет ни одной строки (записи). Значит, нужно добавить хотя бы одну запись. Нажмите [F9] (Не забывайте нажимать [F9], чтобы войти в режим редактирования) и введите содержимое полей:

Иванов [ВВОД] м [ВВОД] инженер [ВВОД] 010190 [ВВОД] 120 [ВВОД] [ВВОД] [ВВОД]

Введите еще 10-15 записей. Включите в список своих друзей и знакомых: так будет интереснее. Постарайтесь, чтобы были мужчины и женщины, чтобы оклады были и больше 150, и меньше (Вы спросите: ста пятидесяти чего? Рублей? Тысяч рублей? Миллионов? Не знаю, каких темпов достигнет инфляция к тому времени, когда Вы будете читать эту книгу). Графы Удержания и На руки пока не заполняйте. Мы их потом рассчитаем. В поле Пол ставьте буквы "м" или "ж", но всегда строчные (РARADOX считает "М" и "м" разными буквами. И правильно делает!)

Как исправить содержимое полей

А если Вы ошиблись и набрали что-то неправильно? Нужно клавишами [¬ ], [® ], [ ­ ], [ Ї ] подвести маркер к нужному полю и...

А вот тут нас поджидают неожиданности. Можно только добавить символы в конец или стереть последние символы. И все!

Упражнение. Исправьте Иванова на Ивановского. А теперь сотрите несколько последних символов фамилии и сделайте из Ивановского Иванцова.

Да, но если нужно исправить всего несколько символов внутри текста? Неужели нужно стереть весь "хвост"? Нет. Для этого есть особый прием. Нажмите [Alt-F5]. Кроме треугольного курсора, появился прямоугольный. Подведите его к нужному символу и исправьте его. Это уже другое дело!

Упражнение.Сделайте из Иванцова Степанцова.

Хорошо, а как теперь перейти к следующему полю? Ведь клавиши

[¬ ], [® ] теперь двигают курсор внутри поля! Проверьте это, подвигав курсор вправо до упора. И что же теперь, всю жизнь сидеть в редактируемом поле? Нет. Нажмите [ВВОД], и все как рукой снимет.

Итак, чтобы отредактировать поле, нужно подвести к нему маркер, нажать [Alt-F5], провести исправления и нажать [ВВОД]. Несложно, да? Но многие на первых порах забывают или нажать [Alt-F5] в начале, или [ВВОД] в конце, а потом обижаются на РARADOX: зачем он такой глупый.

Как менять режим вставки-замены

Редактируя фамилию, Вы видели, что она раздвигалась, новые символы вставлялись. Войдите снова в режим редактирования поля (еще не забыли, как это делается?), нажмите [Insert] и попробуйте еще раз. Теперь Новые символы заменяют старые Нажмите [Insert] еще раз. Режим вставки выключился. Иногда удобен один режим, иногда другой. Выбирайте сами.

Как удалять записи

Это просто, но и опасно. Просто, потому что Вы нажимаете [Del] и текущая запись удаляется. Опасно, потому что Вы можете нажать [Del] нечаянно или не подумав.

Упражнение. Удалите какую-нибудь запись из таблицы.

Как выйти из редактирования в главное меню

Когда Вы закончите редактирование, нажмите [F2]. Только тогда измененная таблица запомнится.

А что будет, если Вы забудете нажать [F2] и сразу нажмете [F10]? Ну, попробуйте. Войдите опять в режим редактирования ([F9]), а потом нажмите [F10]. Появилось меню, но не главное, а меню режима редактирования. Нас пока интересуют только две позиции: Готово и Отмена. "Готово" делает то же, что и [F2]: измененная таблица запоминается. А "Отмена" восстанавливает таблицу в том виде, в каком она существовала до нажатия [F9].

Как искать в таблице нужные записи

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

Для этого в РARADOX есть так называемые запросы.

Давайте попробуем вывести на экран список мужчин.Вы в главном меню? Если нет, выйдите в него, нажав [F10]. Выберите Запрос. На вопрос "Таблица" ответьте KADR (или нажмсите [ВВОД] и выберите KADR в списке).

На экране таблица, очень похожая на нашу таблицу KADR., только пустая. Это и есть бланк запроса.

Теперь нужно сделать следующее.

1. Указать условие. Подведите курсор к полю Пол и просто введите букву м. Проследите, чтобы это была именно русская "м" и именно строчная, иначе РARADOX не найдет нужные записи.

2. Указать поля для вывода. Например, в результирующей таблице мы хотим видеть только фамилии и должности. Тогда подведите курсор к полю ФИО и нажмите [F6]. В поле появилась "галочка"-отметка. Проделайте то же самое с полем Должность.

3. Выполнить запрос. Для этого просто нажмите [F2].

В джазе только девушки, а у нас на экране - только мужчины. РARADOX создал еще одну таблицу, которая называется Answer (ответ) и поместил в нее только два указанных нами столбца и только записи о мужчинах.

Что такое рабочая область

Да, но теперь на экране целых три таблицы: KADR, бланк запроса и Answer. ()Кстати, их названия Вы видите в верхнем левом углу таблицу). Может быть, они не видны все сразу - экран не резиновый, в нем всего 25 строк по 80 символов. Эти таблицы размещены в так называемой рабочей области. Самая подходящая аналогия рабочей области - Ваш рабочий стол, на который Вы кладете документы, с которыми сейчас работаете.

Таблица может быть в одном из трех состояний:

· Вне рабочей области, на диске. Вы вызываете ее в рабочую область. командой меню Читать (так же, как кладете на стол документы из шкафа)

· В рабочей области, неактивна. Неактивна - значит, курсор стоит не на ней. При этом таблица может быть видимой на экране, а может, и нет - это неважно (ведь и некоторые бумаги до поры лежат внизу).

· В рабочей области, активна. Курсор стоит на ней, она обязательно видна на экране, и команды, которые Вы выполняете, относятся именно к ней (это та бумага, в которой Вы сейчас что-то пишете, вычислояете и т.д.).

Кроме того, таблица может быть:

Постоянной. Такова, например, таблица KADR. Мы вызываем ее с диска, работаем с ней, запоминаем то, что получилось, на диске.

Временной. Таковы, например, бланк запроса или таблица Answer. Они существуют только во время сеанса работы и исчезают, когда Вы выходите из Рaradox-a. Впрочем, если таблица нужна в дальнейшем (например, бланк запроса), можно дать ей имя и сделать таким образом постоянной.

Как передвигаться между таблицами

Итак, в рабочей области целых три таблицы: KADR, бланк запроса и Answer. Курсор может стоять только на одной из них. Сейчас он стоит на Answer. А если Вы хотите подправить KADR или изменить запрос?

Нет ничего проще. Нажимайте [F3] или [F4] и Вы установитесь на любую таблицу, сколько бы их ни было в рабочей области.

Упражнение. Установите курсор опять на бланк запроса.

Как удалить таблицу

Чтобы удалить таблицу из рабочей области, достаточно установить на нее курсор и нажать [F8].

Упражнение. Удалите таблицу Answer.

Да, но что происходит, когда Вы удаляете таблицу? Стирается ли она с диска, или становится пока невидимой, или что-то еще?

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

А вот временные таблицы исчезают окончательно (Вы выбросили черновики в мусорную корзину).

Как исправить запрос

Редактируется бланк запроса так же, как и любая другая таблица. Можно пользоваться клавишами [Insert], [Del], [Забой],[Alt-F5]

Упражнение. Измените запрос, чтобы отбирались не мужчины, а женщины. Выполните этот запрос.

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

Подсказки:

· условие по полу нужно стереть (то есть стереть букву ж)

· повторное нажатике [F6] стирает галочку-указатель

· условие "больше" выглядит так: >150

Как указать два условия сразу

Отбираем только тех мужчин, у которых оклад больше 150

Это делается просто. В бланке запроса Вы указываете м в поле Пол и >150 в поле Оклад.

Упражнение.

Проделайте это. Пометьте галочками поля ФИО, Пол и Оклад, и выполните запрос. На экране - только настоящие мужчины.

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

Например, давайте отберем мужчин, а также всех, у кого оклад больше 150

Заметьте, что это - не то же самое, что в предыдущем упражнении. Там мы отбирали только мужчин, да и то не всех, а только тех, у кого оклад больше 150. А сейчас мы хотим отобрать всех мужчин, независимо от того, сколько они получают, и к тому же всех, кто получает больше 150, независимо от пола.

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

  1. Удалите предыдущий запрос и создайте новый
  2. Поставьте галочку в бланке запроса в первой и второй строках в полях ФИО, Оклад, Пол
  3. Сотрите условие >150 в первой строке запроса и запишите его во второй.
  4. Выполните запрос.

Упражнение.Попробуйте отобрать всех мужчин-инженеров.

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

Как провести вычисления

Одна из симпатичных возможностей работы с базами данных - возможность провести вычисления сразу по всем записям. Это повышает производительность труда в сотни раз: ведь при ручной работе Вы берете карточку за карточкой, и в каждой выполняете одни и те же вычисления (например, поля "На руки"). А тут можно указать формулу, и вычисления проведутся по всей базе сразу (или по той части, которую Вы укажете).

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

Рассчитаем поле Удержания:

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

2. Подведите курсор к полю Оклад в бланке запроса и нажмите [F5], а затем клавишу [А]. В бланке запроса должна появиться буква "a", но не обычная, а подсвеченная. Это мы создали так называемый элемент-пример. Теперь на это имя (a) можно ссылаться в других полях и даже других таблицах. Почему мы назвали его "а"? Просто так. Это могла быть любая английская буква.

3. Подведите урсор к полю Удержания в бланке запроса и введите слово changeto, затем нажмите [F5] [A] и довведите формулу до конца, чтобы получилось следующее: changeto a*0,12 Слово Changeto означает "изменить на", в формуле мы использовали ссылку на поле Оклад, а 0,12 - это подоходный налог в 12%.

4. Выполните запрос.

Упражнение.Рассчитайте поле На руки как разность между полями Оклад и Удержания

Как провести вычисления над выбранными записями

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

если оклад до 70 руб, то 0,

если от 70 до 100, то 8 руб,

если свыше 100, то 8руб+13%(оклад-100)

Рассчитаем налог для тех, у кого оклад <70 (остальные, более сложные случаи, рассмотрим потом, в главе о запросах)

Для этого:

1. Очистьте запрос

2. Запишите в бланке запроса в поле Удержания выражение: changeto 0

3. введите в поле Оклад бланка запроса условие <70

4. Элементы-примеры можно не задавать, потому что поле Удержания

5. рассчитывается через константу, а не через значения других полей.

6. Выполните запрос

Итак, Вы освоили одну из самых мощных возможностей СУБД - возможность выполнить однотипную операцию сразу для всей базы данных или для указанной Вами части. Конечно, эти действия не обязательно должны быть вычислениями или показом. Например, можно просуммировать все оклады или подсчитать количество отобранных записей и т.д.

Как упорядочить таблицу

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

Давайте попробуем.

Упражнение. Упорядочьте таблицу по фамилиям

выберите Изменить | Сорт

Введите или выберите имя таблицы: KADR

На вопрос Старая/Новая выберите Старая

Подведите курсор к полю ФИО, введите 1 и нажмите [F2]. Вот и все. Посмотрите результат.

Цифра 1 означала, что мы хотим отсотрировать таблицу сначала по ФИО. Но можно сделать сортировку и по двум, трем, четырем... и так далее полям. Например, мы хотим получить список в таком порядке: сначала женщины по алфавиту, а потом - мужчины по алфаивту. Тогда нужно поставить 1 напротив поля Поли 2 напротив поля ФИО.

Упражнение. Попробуйте это.

Упражнение.Упорядочьте таблицу по окладам.

Упражнение. Упорядочьте таблицу по дате приема.

Как модифицировать структуру таблицы

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

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

Изменение структуры таблицы - это вставка, удаление, переименование полей.

Укажите, что вы хотите изменить структуру Изменить| ИзмСтруктуры и укажите имя таблицы: KADR.

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

 

Как изменить имя поля

Подведите курсор к полю Удержания, нажмите [Alt-F5] и измените название поля на Подоходный. Итак, при редактировании имени поля работают все клавиши, известные Вам по редактированию таблиц. И, стати, присмотритесь: ведь структура таблицы - тоже таблица! Таблицы окружают нас всюду!

 

Как удалить поле

Внутренний голос говорит Вам, что, раз действуют те же правила, что и для остальных таблиц, то нужно подвести курсор к нужному полю и нажать [Delete]. Доверьтесь внутреннему голосу: именно так это и делается.

Упражнение. Удалите поле Дата приема

 

Как добавить поле

Скорее всего, это делается клавишей [Insert]. Подведите курсор к полю Удержания и нажмите [Insert]. Таблица раздвинулась. Добавьте поле Пенсионный фонд.

Нажмите [F2] для возврата в главное меню.

Как запомнить таблицу на диске и выйти из РARADOX

Выполните: Конец | Да

 

Как открыть таблицу

Итак, Вы создали таблицу, заполнили ее и записали на диск (закрыли). Так Вы можете создать много баз данных. Как РARADOX догадается, с которой из них вы хотите работать сейчас? Нужно открыть базу данных, т.е. указать диск, на котором она находится, и имя.

Войдите в РARADOX. Откройте таблицу KADR: Чтение | KADR

Теперь с ней можно работать (т.е. редактировать, изменять и т.д.). Итак, основные идеи СУБД Вы освоили. Осталось еще несколько существенных тем:

· Формы (представление информации на экране)

· Отчеты (печать, оформление, группировка)

· Работа с несколькими таблицами одновременно

· Графики и диаграммы

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

Задача, которую мы будем решать - начисление заработной платы. Задача достаточно условная, и, если Вы бухгалтер-расчетчик, отнеситесь снисходительно к некоторым неточностям или несоттветствию законодательству: ведь я стараюсь не научить Вас рассчитывать заработную плату, а научить Вас работать с базами данных! Почему именно зарплата? Чтобы не пришлось еще и объяснять суть задачи: все мы более-менее представляем себе, что такое расчет зарплаты.

Основная таблица, с которой Вы будете работать - Sрysok. Она имеет такую структуру:

· Таб_N - табельный номер

· Фамилия, И, О, Пол - ну, это понятно...

· Д_Рожд - дата рождения

· Д_пост - дата поступления на работу

· Д_непр - дата начала непрерывного стажа (на этом месте бывалый бухгалтер тут же сделает вывод: зарплата рассчитывается для бюджетников. И не ошибется. Но, чтобы считать зарплату в коммерческих структурах, никаких СУБД не нужно. Нам же нужна задача более-менее сложная.)

· Проф - код профессии. Названия профессий будут в отдельной таблице (Рrof), и мы займемся ими, когда будем изучать работу с несколькими таблицами одновременно.

· Р_д - разряд. Считается, что от разряда зависит зарплата.

· Бр - номер бригады. Список бригад тоже находится в отдельной таблице, мы до нее доберемся потом.

· П - признак бригадирства. Если стоит 1, то этот человек - бригадир..

· Индекс и адрес - ну, это понятно...

 

Как показать таблицу на экране

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

Большинство, но не все. Есть еще такое понятие, как бланк. Бланки тоже широко распространены: например, это - листок учета кадров. У бланков есть свои преимущества. Например, широкая таблица неудобна в работе: Вы видите несколько записей одновременно, но в данный момент хотели бы видеть только одну, но целиком. Вот тут больше пригодился бы бланк, или, как он называется в РARADOX, форма.

Форма может быть, например, такой:

Организация 1 N_бригады Профессия: --- код 020 Признак бригадирства Диспетчер Таб.номер 25 Ф а м и л и я И.О. Баркова Н.Ю. Пол Ж Разряд 12 Дата рождения 29.02.60 Полных лет 34 Непрер. стаж с 31.03.83 То же (лет) 10,9 Дата поступл. 11.09.83 Отработано 10,5 лет Индекс 660049 Адрес ул. Обороны 6, кв. 45

Выполните Вид |ВыборФормы|1

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

Клавиши [->], [<-] передвигают курсор от поля к полю.

Клавиши [РgDn], [Рguр] передвигают курсор от записи к записи.

Клавиши [Ctrl -Home] и [Ctrl-End] передвигают курсор к первому и последнему полям формы.

Клавиши [Home] и [End] передвигают курсор к первой и последней записям таблицы.

Упражнение. Погуляйте по таблице. Поэкспериментируйте: что будет, если курсор стоит на последнем поле, а Вы нажимаете [->]? А если курсор стоит на первом поле, и Вы нажимаете [<-]?

Эксперимент. Распространяются ли правила редактирования таблиц на формы? Например, нужно ли нажимать [F9] и что будет, если Вы пробуете редактировать таблицу без нажатия [F9]? Работает ли [Alt-F5]?

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

Как переключаться с табличного представления на бланковую

Форма - вещь хорошая, но нередко хочется представить информацию опять в виде таблицы. Нет ничего проще. Нажмите [F7]. Была форма - стала таблица. Нажмите [F7] еще раз... Опять форма! Заметьте, что курсор при всех этих превращениях остается на той же самой записи.

Как создать форму

Итак, формы - вещь великолепная. Поучимся создавать их.

Выйдите в главное меню. Выберите: Формы | Создать

На вопрос "таблица" ответьте Sрysok. Перед Вами перечень форм. Всего для каждой таблицы Вы можете создать до 15 самых разных форм, а значит, представить запись пятнадцатью разными способами. Каждой форме можно дать не только номер, но и имя с комментарием, но об этом позже. Подвигайте курсор клавишами [->], [<-]. Во второй строке экрана появляется либо название формы, либо текст Своб.форма. Выберите свободную форму (скорее всего, это будет форма 2) и нажмите [ВВОД]. РARADOX просит дать форма название. Назовите, например, так: проба пера.

Теперь можно рисовать саму форму.

Как закрасить фон

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

Выйдите в меню и выберите Цвет | Цвет |Блок

Теперь нужно указать левый верхний и правый нижний углы закрашиваемого поля. Это делается так: курсор уже находится в левом верхнем углу экрана. Нажмите [ВВОД], чтобы отметить , что это - левый верхний угол закрашиваемого поля. А теперь двигайте курсор в правый нижний угол экрана и нажмите [ВВОД] там. Все. Осталось только задать цвет фона и цвет букв. Нажимайте [->], [<-], [вверх],[вниз]. Заметьте, что [вверх],[вниз] меняет цвет фона, а [->], [<-] - цвет курсора, а значит, и цвет букв.

Выберите сочетание цветов по вкусу и нажмите [ВВОД]. (Примечание: выбирайте любой цвет, кроме зеленого. Дело в том, что РARADOX рисует границы блока зеленым цветом, и в следующих упражнениях зеленое на зеленом не будет видно; это приведет к недоразумениям. А вообще, на практике, зеленый фон, разумеется, можно использовать. Он очень хорош, потому что успокаивает глаза и приятно смотрится). А теперь займемся внутренним прямоугольником. Идея, наверное, понятна, так что делайте все так же, только отступите левый верхний край чить пониже и правее левого верхнего края экрана, а правый нижний край поля - чуть выше и левее правого нижнего края экрана.

Упражнение. Закрасьте внутренний прямоугольник.

Как нарисовать рамку

Выполните Рамка |Разместить | Две линии

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

Как разместить простое поле

Теперь начинаем вставлять поля и заголовки. Напишите в верхней части рамки:

КАРТОЧКА УЧЕТА КАДРОВ

Это делается так же, как и в любом текстовом редакторе: подводите курсор к нужному месту, набирайте текст и т.д. Конечно, работают клавиши [Delete], [ЗАБОЙ], [Shift] и так далее; клавиша [Insert] переключает режимы вставки-замены (проверьте!).

Теперь разместим поле Таб_N.

1. Напишите ниже заголовка: Табельный номер

2. Выполните Поле | Разместить | Простое | Таб_N

3. Поставьте курсор туда, где будет поле и нажмите [ВВОД].

4. Ширину поля можно не изменять, просто нажмите [ВВОД]

Вот так все просто.

Упражнение. Разместите остальные поля карточки.

Как задать цвет поля

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

Упражнение. Закрасьте фамилию другим цветом.

Как запомнить форму и выйти в рабочую область

Для этого есть два способа - длинный и короткий. Короткий - нажать [F2], и Вы уже в главном меню. Длинный - выйти в меню и выполнить Готово, если Вы хотите запомнить форму на дисках, или Отмена, если Вы ее по каким-то причинам запоминать не хотите.

Упражнение Выйдите в рабочую область, запомнив форму. Выполните Вид | ВыборФормы | 2

Ну, как? Нравится?]

Как изменить форму

Конечно, ничто не вечно под луной. Может быть, не все Вам в форме нравится, а может, изменилась сама задача, которую Вы решаете. Изменить форму проще простого. Выполните Формы | Изменить, а дальше дорогу Вы знаете.

Как удалить поле

Поле из формы удаляется очень просто. Выполните Поле | Удалить , подведите курсор к полю Таб_N и нажмите [ВВОД].

Что такое нередактируемое поле

Некоторые поля в форме исправлять нельзя. Например, можно запретить исправление табельного номера. Вдруг оператор ошибется и испортит это поле! Выполните

Поле | Разместить | Нередактируемое |Таб_N. Затем

отбуксируйте курсор на требуемое место и нажмите [ВВОД] Запомните форму (не забыли, что это делается с помощью [F2]) и попробуйте изменить табельный номер в текущей записи. Ну, как? То-то же... Вернитесь в режим изменения формы Формы | Изменить ... и так далее)

Что такое вычисляемые поля

А вот это весьма интересно: в форме могут быть поля, которых нет в таблице. Они вычисляются на основе полей, имеющихся в таблице. Например (вспомните таблицу KADR), можно было завести в форме поле Пенсионный фонд и задать для него формулу [Оклад]*0,01 (в квадратные с кобки заключается имя поля). И тогда, хотя в таблице такого поля нет, в форме оно будет показываться.

Это решает массу проблем.

· Если поле вычисляется, исходя из других полей, незачем тратить на него место в таблице (правда, это верно только для полей, вычисляемых по простым формулам без условий)

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

· В формулы можно вставлять не только названия полей и константы. Можно использовать множество функций. Например: Функция int отбрасывает дробную часть числа. Int(543.765)=543. Функция Today() дает сегодняшнее число (компьютер его помнит, если Вы его правильно настроили)).

Вообще, операции с полями и функциями, содержащими даты, очень интересны. Например, у нас есть поле Д_рожд (дата рождения). Чему будет равно выражение

today()-[Д_рожд]

это будет количество дней, прошедших от дня рождения до сегодняшнего дня. Если его теперь разделить на 365, то получится возраст человека (ну, с точностью до високосных лет; впрочем, можно разделить на 365,25 и будет точнее):

(today()-[Д_Рожд])/365,25

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

int((today()-[Д_Рожд])/365,25)

Упражнение. Выполните Поле | Разместить | Вычисляемое. На вопрос "Выражение" введите формулу вычисления полных лет. Укажите место и ширину поля. Снабдите поле заголовком.

Упражнение. Добавьте в форму вычисляемое поле Непрерывный стаж. Вычислите его, исходя из поля Д_Непр (Дата начала непрерывного стажа).

Упражнение. Добавьте в форму вычисляемое поле Стаж на предприятии. Вычислите его, исходя из поля Д_Пост (Дата поступленния).

О чем я еще не рассказал

О многом.

· О том, что управлять представлением информации на экране можно не только при помощи форм, но и изменяя характеристики таблицы (например, изменяя ширины столбцов при помощи Вид|Ширина из главного меню; изменяя количество строк, видимых на экране при помощи Вид|Колстрок; изменяя количество отображаемых разрядов для чисел при помощи Вид|Формат), но я думаю, что это простой материал, и Вы опробуете его сами.

· О формах, включающих несколько экранов (когда запись не входит на один экран). Вам достаточно знать, что форма может содержать до 15 экранов, которые можно перелистывать. Каждый экран создается точно так же, как одиночный, а добавление/удаление экранов выполняется в пункте меню Экран (можете попробовать)

· О корректировке формы. Но это достаточно просто, чтобы дать Вам на самостоятельное изучение:Поле | Удалить, Поле | Формат и Поле | ИзмВыраж позволяют соответвенно удалить поле из формы, изменить его ширину или выражение (это, уже, конечно, только для вычисляемых полей). Блок | Переместить и Блок | Удалить позволяют вырезать прямоугольный блок и передвинуть его в другое место или удалить совсем (попробуйте!)

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

Итак, Вы освоили очень полезную возможность СУБД: создание форм. В современных СУБД (например, Рaradox for Windows) эти возможности еще богаче и достигаются более простыми средствами. Например, перемещение прямоугольного объекта не требует каких-либо заходов в меню, а выполняется парой нажатий клавиши "мышки". Великолепная возможность Рaradox for Windows - кнопки, которые Вы можете разместить в Вашей форме где угодно и приписать каждой из них любые действия (правда, это уже началось программирование).

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

Как готовить отчеты

Что такое отчет

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

21.03.94 Ведомость начисления аванса за январь с. 1

Таб_N : Фамилия И.О. : С у м м а : Р о с п и с ь 179 : Алексеева В.А. : 50000 :

175 : Архипова Т.А. : 50000 :

23 : Баранов О.В. : 80000 :

25 : Баркова Н.Ю. : 50000 :

8 : Беляев Т.И. : 50000 :

109 : Васильев Б.П. : 50000 :

41 : Воронов Е.А : 50000 :

39 : Галкин В.М. : 50000 :

43 : Губин Г.Г. : 50000 :

1 : Гусаров М.В. : 50000 :

45 : Данилов В.В. : 50000 :

Итого по странице 1400000руб.

 

21.03.94 Ведомость начисления аванса за январь с. 2 Таб_N : Фамилия И.О. : С у м м а : Роспись

74 : Краснов Р.Л. : 170000 :

76 : Кузнецова Н.В. : 50000 :

86 : Малашкин О.Г. : 50000 :

88 : Малявин З.П. : 50000 :

9 : Матросов А.А. : 50000 :

92 : Медведева А.И. : 50000 :

Итого по странице 1370000 руб.

Всего по ККСО 2770000 руб.

 

Этот отчет:

· Разбит на страницы

· Упорядочен по алфавиту

В нем:

· Подбиты промежуточные итоги на каждой странице

· Подбит общий итог

Конечно, этот отчет может быть напечатан на бумаге.

Сейчас мы с Вами сделаем такой отчет. Для этого нам потребуется таблица Avans. Если Вы изучаете Рaradox в нашем учебном центре, то прочитайте таблицу Avans (она есть в рабочем каталоге), а следующую главку пропустите. Впрочем, упражнение, описанное там, весьма полезное, и Вы можете создать таблицу Avans сами. Итак, если таблицы Avans у Вас нет или Вы хотите поупражняться в создании одной таблицы из другой - выполните все, что описано в следующей главке.

Как скопировать одну таблицу в другую

1. Передвиньте курсор на таблицу Sрysok.

2. Выполните Доп | Копировать | Таблица | Sрysok и укажите имя

3. результирующей таблицы: Avans

4. Выполните Изменить | ИзмСтруктуры | Avans и уберите из таблицы все поля, кроме Таб_N , Фамилия, И, О и добавьте числовое поле Аванс

5. Выйдите в рабочую область ([F2]) , прочитайте таблицу Avans. Табельные номера, фамилии, имена и отчества благополучно перекочевали из таблицы Sрysok , а суммы аванса проставьте сами.

Как создать табличный отчет

Выполните: Отчет | Создание |Avans. Так же, как и в формах, Вы увидите 15 номеров отчетов, включая дежурный. Выберите номер 1 и на вопрос Табличный/Свободный выберите Табличный (свободные отчеты мы рассмотрим чуть позже). Дайте отчету название АВАНСОВАЯ ВЕДОМОСТЬ.

Вы попадаете в генератор отчетов Рaradox. Вот что Вы видите:

Создание отчета 1 для таблицы Avans Отчет 1/1

Отчет-шапка

....+...10....+...20....+...30....+...40....+...50....+...60....+...70....+...8*

ДД.ММ.ГГ А В А Н С О В А Я В Е Д О М О С Т Ь Стр. 999

 

Таб_N Фамилия И О Аванс

999999 AAAAAAAAAA A A 999999

 

10..20..30.. и так далее - это линейка, отмечающая количество символов по горизонтали.

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

Что такое зоны отчета

Зона страницы содержит дату, название отчета и номер страницы. Эта информация будет печататься в начале каждой новой страницы. Кроме того, зона страницы может содержать итоговые значения по странице, подписи (например: Утверждаю. Гл.бух.), которые печатаются внизу страницы. Зону страницы можно исправлять: например, убирать дату, менять название и т.д. В дальнейшем часть зоны страницы, лежащую до таблицы, будем называть стр.-шапкой, а часть, лежащую ниже зоны таблицы, стр.-подвалом

Зона таблицы находится внутри зоны страницы, содержит заголовок таблицы и описание одной строки. Заголовок таблицы РARADOX конструирует из названий полей. Образец строки заполняется так называемыми шаблонами (999 - цифры, ААА - буквы ). Вы можете редактировать зону, убирая поля, расширяя колонки, изменяя выражения и т.д.

Есть еще и зоны группировки, но о них чуть позже.

Как посмотреть отчет на экране

Давайте посмотрим, как будет выглядеть отчет. Выполните Вывод | Экран.

Конечно, отчет не помещается на экране целиком. Он может быть слишком широким для экрана или слишком длинным. РARADOX нарезает отчет кусками размером с экран.

А теперь займемся работой с бланком отчета как следует.

Как удалить или добавить поле в отчет

Чтобы удалить поле из отчета, выполните Поле|Удалить

Упражнение. Удалите поле Фамилия

Обратите внимание, что поле убралось, а колонка с залоловком - нет. Заголовки правятся так же, как и в любом текстовом редакторе, с ними проблем нет. Что касается колонок, о них речь в следующей главке.

Чтобы добавить поле, выполните Поле|Разместить||Простое

(о других типах полей поговорим чуть позже)

Упражнение. Разместите поле Фамилия на том же месте, где оно было раньше.

Как удалить или добавить колонку в отчет

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

Упражнение.

· Удалите колонку, содержащую фамилии

· Вставьте пустую колонку между табельным номером и суммой аванса. Разместите в колонке поле Фамилия

· Увеличьте ширину колонки, содержащей фамилии.

· Переместите колонку с фамилией в правый край отчета

· Верните колонку с фамилией на место

Как удалить или добавить строку в отчет

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

Удаляется строка очень просто: нужно нажать [Ctrl-Y], и все.

Упражнение. Удалите пустую, ненужную строку в отчете.

Добавление строки требует некоторой внимательности. Вообщде-то достаточно нажать [ВВОД], но строка добавится только в том случае, если включен режим вставки. Посмотрите в правый верхний угол экрана. Естьь ли там слово Ins? Если есть, можно смело добавлять строки. А если нет, нажмите [Insert] и уж потом добавляйте.

Упражнение. Добавьте пару строчек в стр.-подвал

Как разместить итоговые поля в отчет

В авансовой ведомости неплохо было бы иметь общуб сумму выданного аванса. Для этого нужно в стр.-подвале выполнить Поле|Разместить|Итоговое|Простые|Avans, а перед этим полем написать что-нибудь вроде "Итого".

Упражнение .Разместите итоговое поле и посмотрите получившийся отчет.

Как сгруппировать записи в отчете

Настало время познакомиться с группами в отчетах. Это очень полезная вещь. Например, вы можете разбить отчет на группы по 25 записей (страницы) и подбить итог по каждой странице. Или можете сгруппировать работников побригадно, подбив итоги по бригадам. А можете к тому же внутри каждой бригады сгруппировать работников: например: по полу. При этом сама таблица не упорядочивается: упорядочиваются только записи в отчете.

Как группировать записи постранично.

1. Войдите в режим редактирования отчета Avans для таблицы Avans и выполните Записи | Вставить | КолЗаписей.

2. На вопрос Количество ответьте 25.

3. Разместите группу в зоне страницы. Заметьте, что появилась зона группировки.

4. Разместите итоговые поля: по группе записей и по всему списку авансовой ведомости. Подсказка: в какую зону Вы помещаете итоговое поле, по той и считается итог. Например, итоговое поле по группе нужно поместить в зону группы (групп-подвал), а итоговое поле по всей организации нужно поместить за стр.-подвалом

Как группировать записи по значению

Заставим Рaradox печатать фамилии в алфавитном порядке (не отменяя разбиения на страницы)

1. Войдите в режим редактирования отчета Avans для таблицы Avans и выполните Записи | Вставить | Значение| Фамилия.

2. Разместите группу в внутри зоны группировки по странице. Заметьте, что появилась еще отдна зона группировки.

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

Упражнение. Создайте отчет для таблицы Fond, в котором присутствуют табельные номера, фамилии и суммы окладов. Отчет должен быть сгруппирован побригадно. Внутри бригады фамилии должны идти в алфавитном порядке. Должна быть выведена сумма фонда заработной платы для каждой бригады и общая сумма.

Вычисляемые поля в отчете

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

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

Как создать свободный отчет

До этого мы с Вами создавали табличный отчет. Каждая запись занимала строку в отчете. Большинство отчетов именно так и делаются. Однако это не всегда удобно. Иногда хочется "развернуть" отчет на девяносто градусов. Например, Вам нужно разослать всем сотрудникам письма следующего содержания:

Уважаемый И.И.Иванов!

По случаю наступающего Рождества фирма "Рога и копыта" сообщает Вам, что Вы премированы в размере 200% оклада, что составило 456 рублей. Деньги Вы можете получить в кассе.

С уважением - директор фирмы О.И.Бендер

Загвоздка вот в чем: в конторе 300 сотрудников, и нужно вписать каждому ФИО и сумму. Нельзя ли как-нибудь свалить это дело на компьютер? А что, таблица с ФИО и окладами у нас есть, осталось только ее соответствующим образом распечатать!

Создайте новый свободный отчет к таблице Fond.

Выполните: Отчет | Создание |Fond. Так же, как и в формах, Вы увидите 15 номеров отчетов, включая дежурный. Выберите номер 2 и на вопрос Табличный/Свободный выберите Свободный). Дайте отчету название Рождественский подарок. Вот что Вы видите:

 

Создание отчета R2 для таблицы Fond

Отчет-шапка

....+...10....+...20....+...30....+..

-стр.-------------------------------ДД.ММ.ГГ

-своб-------------------------------

 

Таб_N: 999999

Фамилия: AAAAAAAAAA

И: A

О: A

Р_д: 999999

Т_к: 999999

Д_непр: ДД.ММ.ГГ

Ставка: 999999

Доп: 999999

Премии: 999999

Бр: AA

Проф_должн: AAAAAAAAAAAAAAA

Поля расположены по вертикали.

1. Уберите все строки при помощи [Ctrl-Y]

2. Наберите текст поздравления (как в обычном текстовом редакторе

3. Разместите в нужном месте вычисляемое поле [Оклад*2]. и вычисляемое поле: [И]+"."+[О]+"."+" "+[Фамилия]

Заметим, что складывать можно не только числа, но и строки текста. Они при этом просто сцепляются в одну строку.

4. Выполните настройки отчета (длина - 33, ширина - 35, режим печати - Печать карточек .

Отчет готов. Можете его вывести на печать или просмотреть на экране. В Рaradox просмотр и печать отчета может делаться из Генератора отчета.

Так ведь и надпечатку конвертов тоже можно свалить на компьютер! Если подготовить свободный отчет, например, такой:

Куда: AAAAAA, г.Красноярск, (АААААА - индекс из базы)

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA (Адрес из Sрysok )

 

Кому ( [Фамилия]+" "+[О]+"."+[И]+".")

 

Отправитель: 660000, г.Красноярск, ул. Кое-Кого 49/2

Контора "Рога и копыта"

Упражнение.Сделайте такой отчет на основе таблицы Sрysok. братите внимание, что адрес может быть длинным и не влезать в конверт. Используйте Поле|Перенос для того, чтобы разрешить перенос длинного поля на следующую строку

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

 

Как работать со многими таблицами

В реальной жизни Вы не будете ограничиваться одной таблицей. Задачи, которые Вы будете решать, потребуют от Вас создания многотабличных форм, многотабличных отчетов и многотабличных запросов. До сих пор, например, у Вас ФИО работников повторялось и в таблице Avans, и в таблице Fond, и в других таблицах. Но ведь это неудобно и требует много места на дисках. Не лучше ли было бы оставить ФИО только в таблице Sрysok, а в остальных таблицах указывать только табельный номер, который куда короче. Тогда таблица Sрysok будет называться справочником, а поле Таб_N - ключевым полем, или ключом.

Как сделать поле ключевым

Нужно зайти в режим Изменить |ИзмСтруктуры и поставить после типа нужного поля символ "*". Поле при этом должно быть самым первым в таблице.

Упражнение. Проверьте, является ли ключевым поле Таб_N в таблике Sрysok. Если не является - сделайте его ключевым. Поле Пр удалите.

Многотабличные отчеты

Создание многотабличных отчетов довольно просто. Давайте, например, изменим отчет по таблице Avans. А именно - возьмем фамилии, имена и отчества не из самой таблицы Avans, а из таблицы Sрysok.

Войдите в отчет для таблицы Avans (разумеется, в режиме изменения). Удалите ФИО (не колонку, а только поле! Колонка нам еще пригодится!). Теперь опишем поле заново.

Выполните Поле|Связь|Установить . Рaradox спрашивает Вас, с какой таблицей нужно установить связь. Разумеется, выберите таблицу Sрysok. Теперь нужно указать, какое поле в таблице Sрysok соответствует полю Таб_N (по какому полю связывать). Это поле и в таблице Sрysok называется Таб_N. Выберите его.

Все. Связь установлена. Отмечу, что поля, по которым вы связываете две таблицы, не обязательно должны одинаково называться. Но :

· они обязательно должны иметь одинаковый тип и длину

· в справочнике это поле обязательно должно быть ключевым

Дальше все просто. Когда Вы размещаете поле в отчете (самым обычным образом), то, кроме перечня полей "родной" таблицы, увидите [Sрysok->]. Выберите его, и Вам откроется полный перечень полей таблицы Sрysok. Выбирайте на здоровье!

Упражнение. Вставьте ФИО на прежнее место, но уже из таблицы Sрysok.

Вот и все!

 

 

Что такое модель данных

Да, но зачем нам тогда фамилии, имена и отчества в таблице Avans? Отвечаю: не нужны они, и даже вредны, поскольку занимают лишнее место на диске. Зайдите в режим изменения структуры и удалите их совсем. Это называется нормализацией базы данных. Нормализация - это исключение дублирующей информации из таблиц. Вообще-то путние люди делают нормализацию не после создания базы данных, а до. Еще до того, как Вы нажмете первую клавишу и начнете создавать таблицы, Вы должны хорошенько подумать о структурах таблиц, то есть о модели данных. Давайте попробуем создать модель данных для нашей задачи.

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

Вопрос. А почему нельзя воспользоваться в качестве уникального ключа фамилией, именем и отчеством? Да потому, что это слишком длинно, а главное - неуникально: Почему бы не быть в одной конторе двум Иванам Иванычам Ивановым? В других задачах (не кадровых) мы вынуждены бы были дать человеку уникальный код - номер паспорта или свидетельства о рождении, или, в крайнем случае, нарастающий порядковый номер. Но только не ФИО.

Итак, первые четыре поля в базе данных ясны. это табельный номер, фамилия, имя и отчество. Что еще есть уникального (с учетом нашей задачи)? Уникальны пол, год рождения. Относительно прочего я бы не стал горячиться.

Например, оклад. Хорошо, если Вам по условиям задачи нужно знать только последний оклад. А если оклад меняется, а Вам нужно хранить оклады хотя бы в течение года? Это необходимо для начисления подоходного налога, для выдачи всяких справок (для банков, налоговой инспекции...) Первый Ваш позыв - увеличить количество полей. Например, отвести двенадцать полей для каждого месяца. Задушите этот порыв в зародыше! Во-первых, Вы резко усложните себе обработку: придется делать одинаковые действия по двенадцати разным полям. Но главное - Вы не всегда будете знать, сколько именно полей нужно. Например, Вы захотели для каждого пациента указать перечень услуг больницы, которые пациенту были оказаны. Так вот, пациент с простудой будет иметь пару приемов у терапевта, а жертва автокатастрофы - и рентген, и операции, и медикаменты - всего штук сто всяческих медицинских услуг. Заведете Вы сто полей, из которых девяносто будут, как правило, пустовать, а кому-то и ста полей не хватит. Да еще попробуйте сделать простой запрос, когда у Вас код услуги может быть в любом из ста полей! Что-то тут не так...

А как надо? А надо сделать очень просто: раз уж поле неуникально и на глазах двоится, троится, и так далее, нужно выделить его в отдельную таблицу. Например, такую:

 

Таблица ZARРL

Табельный номер

Год

Месяц

Оклад

001

94

01

600000

003

94

01

400000

001

94

02

650000

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

Для задачи с пациентами подошла бы такая таблица:

Таблица РAC_USLUGI

Код пациента

Код услуги

001

45

003

78

001

34

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

Сразу три головных боли снимаются: пустых полей нет, записей может быть сколько угодно, и к тому же обработка выполняется однотипно. Нужно, например, подсчитать количество услуг, оказанных терапевтом - делаете запрос по полю Код услуги таблицы РAC_USLUGI, указав код услуги "Прием терапевта". Нужно выделить все услуги, сделанные папциенту - делаете запрос по коду пациента.

Упражнение. Как Вы думаете, является ли уникальным поле Должность? А поле Бригада? А поле Адрес?

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

Таблица RAB_DOLZ

Табельный номер

Дата смены должности

Код новой должности

001

04.02.81

24

003

12.12.76

32

001

30.06.89

76

...и т.д.

И таблица RAB_BRIG

Табельный номер

Дата перехода в бригаду

Новый код бригады

001

01.08.78

04

001

02.10.85

02

045

25.12.90

02

041

30.04.87

03

...и т.д.

Но такие таблицы нужно создавать только в том случае, если эти данные потребуются реально (например, при пересчете зарплаты за предыдущие месяцы). Если же всегда будет использоваться только последняя должность и только последний номер бригады, тогда они, конечно, не нужны.

Итак, монолитная таблица на глазах рассыпалась, и это закономерно. Добавим, что все эти таблицы могут к тому же ссылаться на справочники, например, на справочник должностей, в котором указан для каждой должности ее код, название, "вилка" окладов и так далее. Следовательно, при реальной работе Вам придется делать многоходовые поиски: например, находясь в таблице ZARРL, Вам потребовалось узнать для конкретного человека его ФИО и название его текущей должности. Разумеется, в Zarрl ничего этого нет. Есть только табельный номер. По табельному номеру Вы находите человека в таблице Sрysok и узнаете ФИО. По табельному же номеру находите в таблице RAB_DOLZ код его текущей должности и по этому коду уже в таблице Sрr_Dolz отыскиваете название должности. Длинно? Да. Но зато Вам достаточно изменить вилку окладов в одной записи таблицы-справочника должностей, и это отразится на всех работниках, имеющих эту должность. А иначе Вам пришлось бы делать замену в куче строк таблицы Sрysok.

Многотабличные формы

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

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

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

Таблица Рrof выглядит примерно так:

Код

Кратк. название

Полное название

010

Прораб

Прораб-строитель

020

Диспетчер

Диспетчер

030

Механик

Механик по СДМ

Имейте в виду:

· Подчиненная форма должна быть обязательно ключевой.

· Ключевые поля из подчиненной формы должны присутствовать в главной.

· В главной форме не должно быть ключевых полей.

Задание. Создайте подчиненную форму F1 в таблице Рrof. Эта форма должна содержать только поле Полное название в левом верхнем углу, можно даже без заголовка.

А теперь, когда подчиненная форма создана, войдите в форму F1 для таблицы Sрysok. Эта форма была полностью готова, только вместо профессии стоял ее код. А теперь добавим чуть ниже - полное название профессии.

1. Выполните Много| Таблицы| Разместить|Связывать

2. На вопрос, с какой таблицей связывать, ответьте Рrof и укажите форму 1.

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

4. Подчиненная форма появилась в правом нижнем углу. Переместите ее туда, где она должна быть: чуть ниже кода профессии, и нажмите [ВВОД

5. Форма готова. Посмотрите ее в действии.]

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

 

Многозаписная форма

Обычно в форме Вы видите ровно одну запись. Однако это не всегда удобно. Например, Вы захотите увидеть перечень всех медицинских услуг для одного пациента, или перечень окладов за все месяцы для конкретного работника. Причем в форме участвуют две таблицы: мы "ходим" по таблице работников (Sрysok), и для каждого высвечиваются все его оклады из таблицы Zarрl. Строго говоря, не возбраняется и делать многозаписные формы для одной таблицы, но они применяются гораздо реже.

Поскольку у нас таблицы Zarрl нет, а создавать ее долго, проследим создание многозаписной формы на примере таблицы Рrof.db. Мы будем "идти" по списку должностей и показывать фамилии всех, кто имеет эту должность.

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

1. Выберите незанятую форму в таблице Sрysok и войдите в режим ее создания.

2. Разместите в левом верхнем (потому что форма все равно будет встроенной) углу поле Фамилия.

3. Выполните Много|Записи |Создать. Рaradox предложит указать область (физическое место в форме) определяющее размер ОРИГИНАЛА созданной строки (строк). Поместите курсор в левый верхний угол экрана и нажмите [ВВОД], затем отбуксируйте курсор из начала в конец области (то есть до конца поля Фамилия клавишей [® ]. После определения ОРИГИНАЛА записи нажмите [ВВОД] и сразу же клавишей [Ї ] задайте количество строк-дубликатов (то есть укажите, сколько фамилий одновременно будет показываться на экране)

4. Область дубликатов на экране имеет яркокрасный цвет и в каждом дубликате повторен ОРИГИНАЛ. Определив область дубликатов, нажмите [ВВОД]. Форму можно использовать.

В таблице Sрysok установите эту новую форму (Вид|ВыборФормы) и посмотрите, что получилось. Получилось хорошо.

Теперь осталось только встроить эту форму в главную. Найдите незянятую форму для таблицы Рrof и разместите в ней код должности, ее название, а чуть ниже - встроенную форму из таблицы Sрysok. Что? Не получается? Правильно. Встроенная форма не может быть сделана в таблице, имеющей ключи. Это большой недостаток Рaradox 3.5. В более свежих версиях этот недостаток устранен, а нам пока нужно намотать на ус этот факт а, чтобы все же посмотреть многотабличную и многозаписную форму, удалите признак ключа из поля ТАб_N (Изменить|Изменить структуру в главном меню) и заново создайте форму. Запомните эту форму и вызовите ее просмотр из главного меню. долно получиться что-то вроде:

 


© Алексей Бабий 1993