Единственный непонятный множитель этих выражений - это логическое поле, в котором определяется наличие или отсутствие телефона или телевизора. Действительно, заполняя таблицу "Этажи", мы заносили в эти поля слова "Да" или "Нет". Конечно же, умножение на слова - бессмыслица, если слово располагается в текстовом поле. Попробуйте умножить даже номер комнаты в таблице "Этажи", выбрав соответствующее поле, хотя бы на 2. Вместо удвоенного номера Вам тут же будет выдано сообщение: "Неоднозначная ссылка на поле [Номер комнаты]". И Access в этом случае абсолютно прав - нельзя умножать текст, пусть он даже выражает число. И слова "Да" и "Нет" умножать тоже нельзя.
Нельзя, если "Да" и "Нет" - текст. Но если это логические выражения, то можно. Потому что логическое поле - это нуль или единица. Поле это занимает не бит (как мы полагали раньше, создавая таблицу "Этажи"), а байт. Здесь "Нет" соответствует нулям, а "Да" единицам во всех разрядах байта. Соответствующие двоичные коды имеют вид: 00000000 и 11111111 (шестнадцатиричные 00 и FF).
Первый код - это чистый нуль, а второй - это минус единица в дополнительном коде (в этом коде кодируются все отрицательные числа, а не только единица). Мы подробнее остановимся на этом моменте во второй части учебного пособия. Теперь ясно, зачем потребовался минус в выражениях: минус на минус - дает плюс, а минус на нуль - нуль.
Для того, чтобы подтвердить сказанное, введите в запрос два поля "Телефон" и "Телевизор". Потом Вы удалите эти поля. Выполнив запрос, Вы увидите, что "Да" соответствует число, равное сумме оплаты за соответствующую услугу, а "Нет" - нуль.
После того, как сумма за пользование телефоном и телевизором получена, ее можно представить в денежном выражении. Для этого в контексто-зависимом меню (щелчок правой кнопкой при выборе соответствующего столбца, когда маркер - "стрелка вниз") выберите команду "Свойства..." и в окне "Свойства поля" задайте формат поля - денежный. Правда, этого достаточно для режима предварительного просмотра, а не для создаваемой таблицы (формат в ней можно изменить вручную - в режиме конструктора).
Остановимся здесь и чуть-чуть задумаемся. Неужели Вас нисколько не удивляет, что в одном запросе соединились данные из трех таблиц. Действительно, фамилия и даты берутся из таблицы "Гости", категория номера из таблицы "Номера", а признаки наличия телефона и телевизора - из таблицы "Этажи". Удивительно здесь не то, что одновременно присутствуют данные из всех трех таблиц, а то, что они не перепутываются. Конечно же мы в схеме данных задали связи таблиц, но, согласитесь, как красиво и незаметно отслеживает эти связи Access. Проследим за ним эту цепочку.
Итак, по дате выезда выбирается запись из таблицы "Гости" и переносятся соответствующая фамилия, инициалы, а также подсчитывается число дней проживания. Затем по номеру комнаты отслеживается связь с таблицей "Этажи", где берутся сведения о телефоне и телевизоре, а заодно и код категории, по которому связываемся с таблицей "Номера", где хранятся стоимость и категория типа комнаты (номера).
Признайтесь же, что, имея на столе три таблицы. Вы вряд ли быстрее (а главное - без ошибок) разобрались бы с этими связями. Представив, что таблиц не три, а данных в них гораздо больше, Вы по достоинству оцените скромную трудягу Access.
Расставаясь с запросом, изменим его первое поле. Построим в нем следующее выражение:
ФИО: [Фамилия] &" "& [Инициалы]
После этого фамилия и инициалы, разделенные пробелом (в выражении он окружен двойными кавычками), полностью определят нашего гостя.
На этом мы можем распрощаться с запросом "Расчет" (при этом мы полагаем, что стоимость кабельного телевидения можно включить в стоимость номера люкс). После того, как этот запрос готов, мы можем пользоваться и запросом, удаляющим записи с истекшими датами выезда - гости оплатили все услуги и мы прощаемся с ними.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.