©УЧИТЕЛЬ Microsoft
Юрий Бекаревич Нина Пушкина Проектирование и создание баз данных Технология разработки приложений пользователя Язык SQL, макросы и VBA Доступ к базам данных SQL Server Публикация баз данных в Интернете
Орий Бекаревич Нина Пушкина
Microsoft
Санкт-Петербург «БХВ-Петербург» 2004
УДК 681.3.06 ББК 32.973.26-018.2
Б42 Б42
Бекаревич Ю. Б., Пушкина Н. В. Самоучитель Microsoft® Access 2003. - СПб.: БХВ-Петербург, 2004. 752 с.: ил. ISBN 5-94157-405-3 Самоучитель предназначен для освоения инструментальных средств разработки баз данных и приложений пользователя. Изложены основы проектирования и конструирования таблиц, схем базы данных, запросов, форм, отчетов и интерактивных страниц доступа к данным, программирования на языке Visual Basic для приложений. Показаны возможности создания интерфейса, обеспечивающего подготовку и работу с документами предметной области. Рассмотрены средства многоаспектного анализа данных. Дается описание многопользовательской технологии при работе с базами данных Microsoft SQL Server и базами данных, публикуемыми на Web-серверах корпоративной сети и Интернета. Детальное описание примеров из области управленческого учета позволяет пользователю получить практические навыки работы с СУБД и самостоятельно разрабатывать базы данных и приложения пользователя. Для широкого круга пользователей и программистов УДК 681.3.06 ББК 32.973.26-018.2 Группа подготовки издания: Главный редактор Зам. главного редактора Зав. редакцией Редактор Компьютерная верстка Корректор Дизайн обложки Зав. производством
Екатерина Кондукова Евгении Рыбаков Григорий Добин Дарья Веселова Натальи Смирновой Наталия Першакова Игоря Цырулышкова Николай Тверских
Лицензия ИД No 02429 or 24.07.00. Подписано в печать 23.07.04. Формат УОхЮО'Лб. Печать офсетная. Усл. печ. л. 60,63, Тираж 5000 экз. Заказ Na 835 "БХВ-Петербург". 190005, Санкт-Петербург, Измайловский пр., 29. Гигиеническое заключение на продукцию, товар NB 77.99.02.953.Д.001537.03.02 от 13.03.2002 г. выдано Департаментом ГСЭН Минздрава России. Отпечатано с готовых диапозитивов в ОАО "Техническая книга" 190005, Санкт-Петербург, Измайловский пр., 29. ISBN 5-941 57-405-3
® Бекаревич Ю. Б., Пушкина Н. В., 2004 © Оформление, издательство "БХВ-Петербург", 2004
Содержание Введение
II
ЧАСТЬ I. Основы ТЕХНОЛОГИИ MICROSOFT ACCESS
5
Глава 1. Введение в Access
7
СУБД Microsoft Access и ее реляционная база данных Система управления базой данных Требования к системе Реляционная база данных Определения и понятия Схема данных Объекты Access Сводные таблицы и сводные диаграммы Размещение базы данных Интерфейс Access Средства конструирования объектов Мастера Access Мастера баз данных Средства программирования Интеграция и использование внешних данных Поддержка технологий корпоративных сетей Многопользовательская база данных Access Работа Access с базой данных SQL Server Интернет-технологии Начало работы в Microsoft Access Запуск Access Окно Access Строка заголовка окна Строка меню Панели инструментов Область задач Строка состояния Диалоговые окна Окно базы данных Справка Access Глава 2. Проектирование реляционной базы данных Этапы проектирования и создания базы данных Построение информационно-логической модели данных Информационные объекты Выделение информационных объектов предметной области
7 7 10 11 11 14 15 17 19 2U 21 22 27 28 29 31 32 34 35 37 37 38 38 39 39 43 43 43 44 46 5(1 50 52 53 5.5
IV
Содержание^ Информационный анализ и определение логической структуры информации Выделение информационных объектов на примере предметной области "Поставка товаров" Связи информационных объектов Тип связи информационных объектов Определение связей между информационными объектами Информационно-логическая модель предметной области Логическая структура реляционной базы данных
Глава 3. Создание базы данных Создание файла базы данных Access Создание таблицы базы данных Определение структуры новой таблицы в режиме конструктора Определение полей таблицы Определение первичного ключа Создание таблиц базы данных "Поставка товаров" 1 Создание структуры таблицы Непосредственный ввод данных в таблицы Макет таблицы Ввод данных в таблицы БД "Поставка товаров" Размещение объекта OLE Ввод логически связанных записей Использование поля со списком при вводе записей Схема данных в Access Создание схемы базы данных "Поставка товаров" Включение таблиц в схему данных Создание связей между таблицами схемы данных Обеспечение целостности данных Каскадное обновление и удаление связанных записей Объединение записей взаимосвязанных таблиц Выбор способа объединения записей Отображение записей подчиненных таблиц в главной таблице Модификация структуры базы данных Изменение структуры таблиц Изменение схемы данных Глава 4. Запросы Назначение и виды запросов Инструментальные средства Панель инструментов конструктора запросов Конструирование запросов Схема данных запроса Бланк запроса Поля бланка запроса
56 59 71 71 73 75 76 81
84 87 88 89 93 94 95 101 103 304 106 107 109 116 117 117 118 120 121 123 125 128 133 133 134 137 137 139 140 141 142 143 144
Содержание
у
Модификация запроса 144 Условия отбора записей 145 Использование логических операций в условии отбора 146 Вычисляемые поля 148 Использование функций в вычисляемых полях 150 Параметры запроса 153 Использование групповых операций в запросах 154 Назначение групповых операций 154 Порядок создания запроса с использованием групповых операций 155 Запрос с функцией Sum 155 Запрос с функцией Count 159 Задание условий отбора в запросах с групповыми операциями 160 Режим SQL для запроса 162 Просмотр инструкции SQL в запросе 164 Многотабличные запросы 165 Формирование схемы данных запроса 166 Подготовка бланка запроса 167 Ввод значений в условия отбора записей 167 Формирование записей результата при выполнении запроса 168 Параметры объединения записей таблиц в инструкциях SQL 169 Ввод параметров в запрос 172 Групповые операции в многотабличном запросе 173 Ссылки на имена полей различных таблиц в условии отбора 175 Решение задач на основе нескольких запросов 176 Пример решения задачи последовательно выполняющимися запросами...177 Создание новой таблицы с помощью запроса 186 Корректировка данных средствами запроса 187 Запрос на обновление 187 Пример обновления полей значениями, рассчитанными в запросе с группировкой 189 Запрос на добавление 191 Добавление данных в связанные таблицы 193 Добавление данных из нескольких таблиц 195 Запрос на удаление 197 Удаление записей из таблиц, связанных с указанием каскадного удаления записей 198 Удаление записей из таблиц, связанных без указания каскадного удаления записей 199 Мастера создания запросов 2(11 Мастера запросов на выборку 201 Простой запрос • 201 Запрос для поиска повторяющихся записей 203 Запрос для поиска записей, не имеющих подчиненных 203 Мастер перекрестных запросов 204 Конструирование перекрестного запроса 207
VI
Содержание
Глава 5. Формы Инструментальные средства создания форм Мастера создания формы ввода/вывода Режим конструктора форм Разделы, объекты и элементы формы в режиме конструктора Создание однотабличной формы Способы построения однотабличной формы Создание однотабличной формы в режиме Автоформы Редактирование однотабличной формы Создание заголовка Перемещение и форматирование связанных элементов Изменение свойств формы и ее элементов Сохранение формы после редактирования Работа с данными таблицы в режиме формы Создание многотабличных форм Способы построения многотабличной формы Явное включение подчиненной формы Вызов связанной формы по кнопке Многотабличная форма без подчиненных и связанных форм Многотабличная форма на основе запроса Создание мастером формы для работы с двумя взаимосвязанными таблицами „ Создание и редактирование многотабличной формы в режиме конструктора Создание новой формы конструктором Включение полей в форму Добавление подчиненной формы и ее редактирование Вычисления в форме Вычисления в каждой записи формы Вычисление итоговых значений Ограничения доступа к данным через форму Защита данных поля от изменений Установка ограничений на корректировку записей через форму Защита данных подчиненной формы от изменений Глава 6. Разработка интерфейса для ввода, просмотра и корректировки данных документов
212 212 212 214 215 225 226 226 229 230 231 231 231 233 234 235 235 236 236 236 236 243 244 245 248 253 254 256 259 259 259 260 266
Технология загрузки базы данных из документов 267 Последовательность загрузки данных 26S Разработка технологии загрузки базы данных 269 Проектирование интерфейса пользователя для загрузки и редактирования данных документа 272 Проектирование формы 272 Определение подсхемы данных для формы 273 Определение проекта макета формы 273
Содержание Создание интерфейса для загрузки и редактирования данных документа Подготовка формы мастером Доработка интерфейса средствами конструктора форм Создание кнопок для перехода к другой записи и закрытия формы Ограничение доступа к данным таблиц базы Создание полей со списком Использование календаря для ввода дат Установка режима работы с записями подчиненной таблицы Загрузка, просмотр и редактирование данных документа Установка текущей записи в форме Выборка документов Глава 7. Сводные таблицы и диаграммы. Анализ данных Режим сводной таблицы Разработка сводной таблицы для таблицы базы данных Размещение полей в макете сводной таблицы Вычисление итоговых значений Разработка сводной таблицы для запроса Работа с датами в сводных таблицах Использование нескольких полей в областях сводной таблицы Добавление полей в источник записей сводной таблицы Форматирование элементов сводной таблицы Вычисляемые итоги и поля в сводной таблице Режим сводной диаграммы Глава 8. Разработка отчетов Основы конструирования отчетов Окно конструктора отчетов Разделы отчета Элементы разделов отчета Панель инструментов конструктора отчетов Однотабличные отчеты Создание однотабличного отчета с помощью мастера Доработка однотабличного отчета в режиме конструктора Группировка и сортировка данных отчета Размещение данных в разделах отчета Включение вычисляемого поля для расчета итоговых значений Просмотр и печать отчета Просмотр отчета Печать отчета Многотабличные отчеты Разработка отчета с помощью мастера Выбор таблиц для отчета Источник записей отчета
VII 276 276 278 278 280 281 287 288 289 291 292 30(1 301 301 302 304 306 30S 309 310 310 310 314 32(1 320 321 321 32'2 322 323 324 326 326 328 330 33 3 333 33 J 335 336 337 340
VIII Доработка отчета в режиме конструктора Определение параметров в отчете Составные отчеты Создание главной части составного отчета Создание подчиненного отчета Доработка составного отчета Вывод значений нарастаюшим итогом
ЧАСТЬ II. МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ТЕХНОЛОГИИ БАЗ ДАННЫХ Глава 9. Совместное использование баз данных Access в сети Защита базы данных Access Защита на уровне пользователей Активизация системы защиты Защита объектов базы данных Выбор режима доступа к общей базе данных Установка режима доступа по умолчанию Работа с базой данных, открытой для общего доступа Блокировка записей Параметры блокировки записи, используемые по умолчанию Файл сведений о блокировках Отображение на экране последней версии данных Автоматическое обновление отображения записей Изменение объектов базы данных в сети Разделение базы данных на таблицы и другие объекты Глава 10. Работа Access с данными на SQL-сервере Microsoft SQL Server Microsoft SQL Server 2000 Desktop Engine Язык структурированных запросов — SQL Работа Access с SQL Server через ODBC Определение внешних источников данных в ODBC Типы источников данных Создание источника данных Запросы на языке SQL к базам данных SQL-сервера Создание запросов SQL к серверу Определение источника данных для запроса SQL Примеры запросов SQL к серверу Связь с таблицами баз данных SQL-сервера Создание связи с таблицами сервера Примеры запросов со связанными таблицами Импорт объектов из базы данных SQL-сервера в Access Экспорт объектов Access в базу данных SQL-сервера
Содержание 341 343 344 346 347 350 353
359 361 363 364 365 370 370 373 374 375 376 377 377 378 379 380 384 384 386 388 390 391 393 393 399 400 400 402 404 404 409 411 412
Содержание Глава П. Разработка проекта Access — приложения Microsoft SQL Server Проект Access 2000 Интерфейс доступа к данньга OLE DB Создание проекта Access Создание проекта для существующей на сервере базы данных,, Создание проекта и новой базы данных на сервере Подключение проекта Access к Microsoft SQL Server 2000 Desktop Engine Создание проекта с помощью мастера преобразования Импорт базы данных Access на SQL-сервер Объекты базы данных SQL-сервера Таблицы .-'. Схемы баз данных Запросы Сохраненные процедуры Конструктор сохраненной процедуры Ввод сохраненной процедуры Глава 12. Публикация данных в Интернете и корпоративной сети Типы Web-страниц, создаваемых в Access Создание Web-страницы путем экспорта данных Создание статических Web-страниц Создание статической Web-страницы на основе таблицы Создание Web-страницы на основе запроса Создание Web-страницы на основе формы Создание Web-страницы на основе отчета Создание динамических Web-страниц Экспорт объектов в Web-страницу формата HTX/IDC Экспорт объектов в Web-страницу формата ASP Публикация Web-страниц , Страницы доступа к данным базы Сохранение объекта как страницы доступа к данным Сохранение формы как страницы доступа к данным Сохранение очета как страницы доступа к данным Сохранение сводной таблицы как страницы доступа к данным Режим автономного доступа к странице Создание страниц доступа к данным Подключение страницы к базе данных Создание страницы доступа к данным мастером Создание страницы доступа к данным в режиме конструктора Создание страниц с многоуровневой группировкой Создание гиперссылки на другую страницу базы данных Создание гиперссылки на существующий файл Добавление гиперссылки для создания сообщений электронной почты : Создание многостраничного Web-узла
/х 416 416 417 419 421 423 425 428 433 434 434 43') 442 448 450 451 457 45S 459 460 460 465 466 467 469 469 47-! 474 476 477 47S 479 481 481 482 482 48>J 497 502 506 507 507 50S
X
Содержание
ЧАСТЬ III. РАЗРАБОТКА ПРИЛОЖЕНИЯ ПОЛЬЗОВАТЕЛЯ
511
Глава 13. Проектирование задач приложения
513
Глава 14. Создание макросов
518
Конструирование макроса Формирование макрокоманд в окне макроса -. Формирование макроса с помощью мыши Формирование макрокоманды Формирование значений аргументов макрокоманды Создание группы макросов Вызов макроса из другого макроса Использование условий в макросе Структурирование программы с помощью условий Примеры логических выражений в условии выполнения макрокоманды Использование в макросах ссылок на объекты Ссылки на объекты Ссылки на свойство объекта -. Ссылки на элементы управления и их свойства Ссылка на подчиненную форму или отчет Создание ссылок построителем выражений Организация выполнения макросов Запуск макроса Выполнение макроса с наступлением события Порядок выполнения макросов, вызываемых событиями Создание кнопки запуска макроса в форме Создание кнопки запуска макроса с помощью мыши Создание кнопки запуска макроса мастером Использование макросов при решении задач Создание макроса для решения задачи, использующей запросы Макрос синхронной обработки данных двух форм Макрос для оперативных расчетов при вводе данных в базу Организация диалога в макросе Управление отображением элемента в форме Глава 15. Программирование на языке Visual Basic для приложений Общие сведения о языке VBA Объекты и коллекции Модель объектов Access Модель объектов доступа к данным ОАО Модель объектов ADO Модули VBA Структура модулей
-.
520 520 521 521 522 522 523 524 524 526 527 527 528 528 529 531 532 532 533 535 535 536 536 537 537 541 544 548 551 554 556 558 558 560 562 564 566
Содержание
XI
Процедуры 568 Процедуры-подпрограммы 568 Процедуры-функции 570 Выполнение процедур VBA 571 Инструкции 572 Методы 572 Инструкции описания переменных и констант 573 Инструкции описания переменных 574 Соглашения об именах процедур, переменных и констант 575 Типы данных переменной 576 Присваивание значения объектной переменной 577 Инструкции описания констант 579 Инструкции управления выполнением программ 580 Инструкция GoTo 5ВО Инструкция Call. 5SI Инструкция If...Then...Else 581 Инструкция DoLoop 583 Выполнение макрокоманд с помощью объекта DoCmd. 584 Разработка приложения на VBA 585 Окно редактора VBA 586 Окно проекта 586 Окно свойств 588 Окно модуля 589 Окно просмотра объектов 589 Создание процедур 591 Подготовка текста программ 594 Компиляция 595 Отладка программы 595 Программы на VBA 596 Анализ процедуры обработки события, формируемой мастером 596 Корректировка процедуры, созданной мастером 599 Выполнение запросов в процедуре обработки события 601 Фильтрация записей формы по значению, выбранному из списка другой формы 605 Использование формы с календарем для ввода дат 607 Поиск данных с использованием индексов 608 Процедура поиска по первичному ключу 609 Расчет в текущей записи однотабличной формы и обновление таблицы ...613 Расчеты в текущих записях многотабличной формы и обновление таблиц 614 Обновление связанных записей подчиненной таблицы при изменении записи в главной 615 Создание формы 621 Создание новой таблицы 624 Создание таблицы с помощью инструкции SQL 627 Создание таблицы и заполнение ее записями 628
XII
Содержание
Глава 16. Управление приложением пользователя Создание кнопочной формы с помощью диспетчера Создание главной кнопочной формы приложения Создание подчиненных к н о п о ч н ы х форм приложения Редактирование имени и формирование элементов кнопочной формы Формирование элементов управления в главной кнопочной форме Создание элементов управления в подчиненных кнопочных формах Добавление рисунка в кнопочную форму Запуск Access с открытием приложения пользователя Создание меню приложения Запуск приложения с рабочего стола Использование конструктора форм для создания интерфейса управления приложением Глава 17. Пример практического приложения в сфере торговли Общие сведения о приложении Функции приложения Документы приложения Справочная информация , Оперативно-учетная информация Технология учета продажи и покупки товаров Учет отпуска товаров покупателям Учет поступления товаров Учет оплат товаров Информационный анализ и выделение информационных объектов Анализ справочных документов Информационные объекты справочных документов Анализ документов по отпуску товаров Расходная накладная Выдаваемый счет-фактура Анализ документов по поступлению товаров Приходная накладная Счет-фактура получаемая Анализ документов по оплате Счет на оплату Выписка из банка Платежное поручение Структура базы данных приложения Разработка интерфейса приложения "Покупка-продажа товаров" Технология подготовки документов по отгрузке товаров Подготовка новой расходной накладной Таблицы — источники основной и подчиненной частей формы РН Вычисление и сохранение итоговых сумм Просмотр текущих остатков для товаров накладной на складах
638 640 640 642 643 644 648 651 652 653 657 658 661 661 662 662 662 663 664 666 667 667 667 ..668 669 670 670 674 676 676 678 679 679 681 682 684 686 686 687 688 690 692
Содержание Расчет и обновление текущих остатков товаров накладной (проводка) Подготовка документа "Расходная накладная" на основе оплаченного счета Интерфейс документа "Счет" Журнал счетов ; Алгоритм подготовки расходной накладной на основе данных документа "Счет" Печать расходной накладной — отчет Ввод нового счета-фактуры по расходной накладной,..., Формирование окна приложения "Покупка-продажа товаров" Параметры запуска приложения .• Формирование меню приложения ,
ХШ
694 696 697 700 701 703 705 708 70S 708
ПРИЛОЖЕНИЯ
711
Приложение 1. Параметры структуры таблиц базы данных "Поставка товаров"
713
Таблицы справочных данных Таблицы плановых данных Таблицы оперативно-учетных данных Приложение 2. Пример заполненных документов для загрузки в базу данных "Поставка товаров" Справочная информация Плановая информация Оперативно-учетная информация Предметный указатель
713 71.5 716 718 718 719 720 721
Введение В процессе подготовки самоучителя по новой версии Access перед авторами стояла задача ознакомить пользователей с ее особенностями, сформулировать и осмыслить тенденции развития. Вместе с тем самоучитель должен дать целостное представление о программном продукте, обеспечить его изучение во взаимосвязи всех компонент от традиционных инструментальных средств до перспективных технологий. Важнейшей целью книги остается демонстрация функционирования всех рассматриваемых средств на конкретных примерах. Каждое издание — это шанс для автора выполнить то, что в предыдущем издании так и осталось на уровне нереализованных планов. Одной из проблем изложения материала книги является обучение пользователя максимально эффективным путем при минимальных затратах его труда. Одним из важнейших факторов эффективности изложения материала является его структурирование. Здесь всегда приходится выбирать между многоуровневым иерархическим принципом построения материала и простотой структуры, для которой характерна ограниченная глубина иерархии. В новом издании отдано предпочтение второму подходу. Кроме того, в данном издании произведено более четкое разделение материала на основы по инструментальным средствам и описание технологии их применения для решения практических задач. При описании новой версии был осуществлен переход от системы примеров по учебному процессу к предметной области организационно-экономических систем. Теперь в качестве сквозного примера рассматривается база данных, содержащая сведения о плановых и фактических поставках товаров гипотетического предприятия. Такой выбор продиктован запросами широкого круга обучающихся пользователей в сфере экономики. Авторы книги преподают технологии баз данных в Санкт-Петербургском государственном университете экономики и финансов и Санкт-Петербургском государственном университете на экономическом факультете. При этом в лекциях и на практике широко используются примеры работы с данными документов справочной, плановой, оперативно-учетной информации. СУБД Access имеет наибольшее применение именно в сфере организационно-экономических систем. Переход на новую систему примеров в ряде случаев позволил более наглядно показать возможности инструментальных средств конструирования объектов, средств программирования при разработке приложений и интерфейсов пользователя, организации диалога при -решении экономических задач. Показана возможность использовать среду Access при разработке
_2
Введение
профессиональных приложений, обеспечивающих подготовку системы взаимосвязанных документов, их сохранение в базе данных с возможностью оперативно получать аналитические оценки при дополнении базы новыми данными. Книга рассчитана на широкий круг пользователей: от студентов, изучающих основы технологии баз данных, до разработчиков практических приложений в среде СУБД. Особое внимание уделяется многопользовательской технологии, которая неизбежна при работе с базами данных в условиях не только больших предприятий, но также средних и малых. В очередной версии Access нашли дальнейшее развитие средства взаимодейстния пользователей в информационном пространстве, не ограниченном рамками локальной или корпоративной компьютерной сети. Рассмотренная в книге технология публикации баз данных показывает широкие возможности по использованию Access в создании Web-приложений, которые делают доступными корпоративные базы данных пользователям глобальной сети Интернет. С применением этой технологии взаимодействие заказчиков и поставщиков услуг становится более оперативным и комфортным. Остановимся на содержании самоучителя. В книге уделяется в н и м а н и е традиционным вопросам: реляционному подходу, проектированию нормализованной базы данных, конструированию ее таблиц и других объектов: форм, запросов, отчетов, макросов и модулей. Предлагаемое издание раскрывает возможности инструментария новой версии Access 2003 и описывает технологию работы пользователя от проектирования и создания базы данных до реализации задач и приложений пользователя как в локальной, так и многопользовательской среде. Проведен анализ тенденции развития технологии баз данных, прогрессивные решения в технологии анализа данных, размещении баз данных на серверах корпоративной сети и обеспечении совместной работы пользователей с данными. Особая роль отводится концепции "клиент-сервер", обеспечивающей существенное повышение эффективности обработки данных при большом числе пользователей. В книге также представлены сведения о работе Access в роли клиента SQL-сервера. В издании рассмотрены возможности Access по созданию Web-страниц доступа к данным базы и публикации данных базы на Web-сервере; показано, что с развитием Web-технологий и использованием универсального интерфейса браузеров, работающих с Web-страницами, доступ пользователей к данным базы из Интернета становится простым и не требует специальных средств. Большое внимание уделяется технике разработки приложений, созданию макросов и программированию процедур на языке VBA, созданию удобных интерфейсов для управления приложением пользователя.
Введение
3
Материал книги сгруппирован в три части соответственно главным этапам освоении технологии Access. Первая из них дает представление об основах технологии баз данных. Вторая часть посвящена многопользовательским технологиям. Третья часть содержит описание средств программирования при разработке приложений пользователя, создания интерфейсов приложения. Книга ориентирована на широкий круг пользователей, как начинающих осваивать Access, так и имеющих опыт работы с Access предыдущих версий, т. к. концепции разработки базы данных и ее объектов, основные инструментальные средства и технология работы сохраняют преемственность. База данных, разработанная в Access предыдущих версий, легко конвертируется для работы в Access 2003. Кроме того, предусмотрена возможность работать с базами данных в формате предыдущих версий. Переход на новую версию Access 2003 открывает для пользователя новые возможности технологии работы как с локальными версиями баз данных, так и базами данных, размещенными на серверах компьютерной сети, а также возможности по публикации своих данных из базы Access на Webсерверах, делая их доступными для внешнего пользователя. Для новичка, впервые открывающего книгу из этой серии, самоучитель будет не только источником основных сведений по СУБД Access и его инструментальным средствам, но также станет удобным практическим пособием при освоении средств на компьютере, т. к. большинство примеров содержит подробное описание действий пользователя при решении конкретных задач. Поскольку вся книга строится на примерах, реализованных на компьютере. читатель, выполняя действия, описанные в книге, может легко освоить технологию локальных и многопользовательских баз данных при использован и и Access 2003.
ЧАСТЬ I Основы ТЕХНОЛОГИИ MICROSOFT ACCESS
Глава 1
•н-т^ет-о
Введение в Access СУБД Microsoft Access и ее реляционная база данных Система управления базой данных СУБД (система управления базой данных) является универсальным программным инструментом создания и обслуживания баз данных и приложений пользователя в самых разных предметных областях. СУБД обеспечивает многоаспектный доступ к данным и использование одних и тех же данных различными задачами и приложениями пользователей. СУБД поддерживаются различные модели данных. Модель данных— это метод (принцип) логической организации данных, используемый СУБД. Наиболее известными являются иерархическая, сетевая и реляционная модели. В СУБД для персональных компьютеров (настольных СУБД) поддерживается преимущественно реляционная модель, которую отличает простота и единообразие представления данных простейшими двумерными таблицами. Реляционная модель обеспечивает возможность использования в разных СУБД операций обработки данных, имеющих единую основу — алгебру отношений (реляционную алгебру), и универсального языка структурированных запросов — SQL (Structured Query Language). Основной логической структурной единицей манипулирования данными является строка таблицы — запись. Структура записи определяется составом входящих в нее полей. Совокупность полей записи соответствует логически связанным реквизитам, характеризующим некоторую сущность предметной области. Типовыми функциями СУБД по манипулированию данными являются выборка, добавление, удаление, изменение данных. Выборка данных — выборка записей из взаимосвязанных таблиц в соответствии е заданными условиями.
8
Часть I. Основы технологии Microsoft Access
Добавление и удаление данных — добавление новых записей в таблицы и удаление существующих. Изменение данных — модификация значений данных в полях существующих записей. Данные из одной или нескольких взаимосвязанных таблиц могут подвергаться обработке. К. операциям обработки относятся, например, расчеты в пределах каждой записи, группировка записей в соответствии с заданным критерием группировки и обработка записей выделенных групп с помощью статистических функций, таких как суммирование, определение максимального, подсчет числа записей в группе и т. п. СУБД Microsoft Access является системой управления реляционной базой данных, включающей все необходимые инструментальные средства для создания локальной базы данных, общей базы данных в локальной сети с файловым сервером или базы данных на SQL-сервере, а также для создания приложения пользователя, работающего с этими базами данных. База данных Access, создаваемая на локальном компьютере, отличается от баз данных других настольных СУБД. В ее файле могут храниться не только данные, но и объекты интерфейса: формы, отчеты, а также программный код. Благодаря этому можно создать приложение, целиком хранящееся в одномединственном MDB-файле, что существенно упрощает как создание, так и распространение приложений баз данных. СУБД Access включают разнообразные и многочисленные относительно автономные программные средства, ориентированные на создание объектов базы данных и приложений пользователя. Средства графического конструирования позволяют пользователю создавать объекты базы данных и объекты приложения с помощью многочисленных графических элементов, не прибегая к программированию. Диалоговые средства представлены разнообразными мастерами, которые в режиме ведения диалога с пользователем позволяют создавать объекты и выполнять разнообразные функции по реорганизации и преобразованию баз данных. Среди многочисленных средств графического конструирования и диалоговых средств Access следует выделить средства для создания: П таблиц и схем баз данных; "3 запросов выборки, отбирающих и объединяющих данные нескольких таблиц в виртуальную таблицу, которая может использоваться во многих задачах приложения; П запросов на изменение данных базы; П экранных форм, предназначенных для ввода, просмотра и обработки данных в диалоговом режиме;
Глава 1. Введение в Access
Г\ отчетов, предназначенных для просмотра и вывода на печать данных из базы и результатов их обработки в удобном для пользователя виде; П страниц доступа к данным, обеспечивающим работу с базами данных в локальной сети или Интернете; П интерфейса управления приложением пользователя: меню, кнопочных форм, панелей управления приложением, — позволяющих объединить различные операции по работе с базой в единый технологический процесс. Средства программирования СУБД включают язык структурированных запросов SQL, язык макрокоманд и язык объектно-ориентированного программирования для приложений Microsoft Visual Basic for Applications (VBA). VBA является частью семейства Microsoft Visual Basic, которое входит в состав Visual Studio. VBA является базовым компонентом Microsoft Office: он интегрирован в Access, Excel, FrontPage, Outlook, PowerPoint и Word. Все эти приложения, в том числе и локализованные на русском языке, используют англоязычный вариант VBA (включая справку). VBA входит во все варианты поставок Microsoft Office. VBA представляет собой базовую платформу программирования не только в среде Microsoft Office, но и во многих других приложениях. VBA содержит средства доступа не только к базам данных Access, но и к базам данных архитектуры "клиент-сервер", таким как Microsoft SQL Server, Oracle и др. Работа с базами данных обеспечивается через ODBC-интерфейс (Open Database Connectivity — открытый интерфейс подключения к базам данных) или интерфейсы модели составного объекта (Component Object Model), называемые OLE DB. В программах VBA доступ к данным через OLE DB реализуется в объектах данных ActiveX (ADO). Диспетчером данных, выполняющим загрузку и сохранение данных в пользовательской базе данных и системных базах данных Access, является ядро базы данных Microsoft Jet. Версия Microsoft Jet 4.0 имеет высокую производительность и улучшенные сетевые характеристики. Jet 4.0 обеспечивает поддержку двухбайтового представления символов Unicode, позволяющего использовать символы нескольких национальных алфавитов. Чтобы скомпенсировать возрастающий при работе с Unicode объем памяти, применяется сжатие данных, сохраняемых в Unicode. Для лучшей совместимости Microsoft Jet и Microsoft SQL Server и соответствия языка SQL спецификации SQL 92 были внесены изменения в реализацию Microsoft Jet 4.0 SQL. В Access активно развиваются технологические направления, составляющие основу корпоративных многопользовательских баз данных: Э технология "клиент-сервер"реализуется в Access средствами создания клиентских приложений — проектов, работающих с базами данных SQL Server. Подключение к серверу реализуется с помощью интерфейса
10
Часть I. Основы технологии Microsoft Access
OLE DB без использования ядра баз данных Microsoft Jet. Благодаря возможности разрабатывать клиентские приложения для доступа к данным сервера Access стал активно применяться на средних и крупных предприятиях. Разработка клиентских приложений — одно из самых распространенных применений Access. Для мягкого перехода к технологии "клиентсервер" в Access включены многочисленные и разнообразные средства. Они обеспечивают преобразование объектов локальной базы данных и приложения в объекты базы данных сервера и проекта, удобный графический интерфейс создания объектов базы данных сервера и сохраняют интерфейс создания объектов приложения. Кроме того, в поставку Microsoft Office включен Microsoft SQL Server Desktop Engine (ранее Microsoft Data Engine, MSDE), который обеспечивает как локальное хранение данных в формате, совместимом с Microsoft SQL Server 2000, так и удаленное, рассчитанное на небольшое число пользователей. Установка этого сервера не требует лицензирования и позволяет освоить технологию "клиент-сервер" при работе на компьютере, не подключенном к сети. ~3 Интернет-технология позволяет эффективно распространять и получать доступ к разнородной информации в глобальных и корпоративных сетях. Эта технология обеспечивает унифицированный доступ к данным различных приложений в разнородных сетях. Для реализации интернеттехнологии в Access включены интерактивные средства конструирования Web-страниц доступа к данным в базах Access и SQL-серверов. При этом Web-браузер используется как универсальный интерфейс для доступа и работы с данными баз из внешней среды вне зависимости от аппаратнопрограммной платформы компьютера пользователя и компьютера — источника данных. Страницы могут использоваться подобно формам Access для ввода и редактирования данных, подобно отчетам Access — для отображения иерархически сгруппированных записей.
Замечание Для разработки и использования страниц доступа к данным в локальной сети или Интернете достаточно иметь браузер Microsoft Internet Explorer 5.01 с пакетом обновления SP2, однако Microsoft Internet Explorer 5. 5 или более поздние версии обеспечивают дополнительные возможности разработки и просмотра. При использовании Internet Explorer 5. 5 или более поздних версий расширяются возможности конструирования страниц и появляется режим предварительного просмотра страницы доступа к данным.
Требования к системе Access 2003 входит в состав Microsoft Office 2003 (в варианты поставок Professional, Professional with FrontPage, Professional Special Edition и Developer). Для работы с Access 2002 рекомендуется использовать компьютер с процессором Pentium III и 128 Мбайт RAM, работающий под управлением опера-
Глава 1. Введение в Access
ционной системы Windows XP или более поздней версии. Windows XP это самая насыщенная функциональными возможностями система семейства Windows; в сочетании с пакетом Office 2003 она дает пользователю возможность наиболее эффективно применять компьютер, но ее установка не является обязательным условием для работы с пакетом Office 2003. Возможна работа в среде Windows 2000 с пакетом обновления 3, а также Windows ME, 98 или NT, которые перед установкой Microsoft Office 2003 необходимо обновить. Практическим минимумом, предъявляемым Access 2003 к персональному компьютеру, является процессор Pentium 233 МГц или более быстрый и 64 Мбайт оперативной памяти. При одновременном выполнении нескольких приложений Office 2003 необходимо для каждого приложения иметь дополнительную память. При стандартной установке Office 2003 Professional и Professional Special Edition требуется примерно 250 Мбайт на жестком диске, включая 115 Мбайт на том диске, где установлена операционная система. В зависимости от конфигурации приложений требования к объему жесткого диска изменяются. Пользователям, у которых не установлена Windows 2000/XP, потребуется дополнительно 50 Мбайт свободного места на жестком диске для обновления системных файлов. В процессе установки на диске необходимо иметь помимо пространства для Office дополнительное пространство примерно такого же объема. Для работы рекомендуется монитор Super VGA (800x600). или с более высоким разрешением с поддержкой как минимум 256 цветов. При установке приложений Office 2003 на локальном компьютере требуется дисковод CD-ROM.
Реляционная база данных Определения и понятия База данных является организованной на машинном носителе совокупностью взаимосвязанных данных и содержит сведения о различных сущностях одной предметной области — реальных объектах, процессах, событиях пли явлениях. Реляционная база данных представляет собой множество взаимосвязанных двумерных таблиц — реляционных таблиц, называемых также отношениями, в каждой из которых содержатся сведения об одной сущности автоматизируемой предметной области. Совокупность реляционных таблиц, между которыми установлены логические связи, образует логическую структуру реляционной базы данных. В таблицах базы должны сохраняться все данные, необходимые для решени^ задач предметной области. Причем каждый элемент данных должен хра-
12
Часть I. Основы технологии Microsoft Access^
ниться в базе только в одном экземпляре. Для создания таблиц, соответствующих реляционной модели данных, используется процесс, называемый нормализацией данных. Нормализация — это удаление из таблиц повторяющихся данных путем их переноса в новые таблицы, записи которых не содержат повторяющихся значений. Минимальное дублирование данных в реляционной базе обеспечивает высокую эффективность поддержания базы данных в актуальном и непротиворечивом состоянии, однократный ввод и корректировку данных. Структура реляционной таблицы определяется составом полей. Каждое поле отражает определенную характеристику сущности. Для поля указываются тип и размер элементарного данного, размещаемого в нем, и ряд других свойств. Содержимое поля отображается в столбце таблицы. Столбец таблицы содержит данные одного типа. Содержание таблицы заключено в ее строках, однотипных по структуре. Каждая строка таблицы содержит данные о конкретном экземпляре сущности и называется записью. Для однозначного определения (идентификации) каждой записи таблица должна иметь уникальный (первичный) ключ. По значению ключа таблицы идентифицируется единственная запись в таблице. Ключ может состоять из одного или нескольких полей таблицы. Значение уникального ключа не может повторяться в нескольких записях. Логические связи между таблицами дают возможность объединять данные из разных таблиц. Связь каждой пары таблиц обеспечивается одинаковыми полями в них — ключом связи. Таким образом обеспечивается рациональное хранение недублированных данных и их объединение в соответствии с требованиями решаемых задач. В нормализованной реляционной базе данных связь двух таблиц характеризуется отношениями записей типа один~к~одному (1:1) или один-ко-многим (1:М). Отношение 1:1 предполагает, что каждой записи одной таблицы соответствует одна запись в другой. Отношение 1:М предполагает, что каждой записи первой таблицы соответствует много записей во второй, но каждой записи второй таблицы соответствует только одна запись в первой. Для двух таблиц, находящихся в отношении типа 1:М, устанавливается связь по уникальному ключу таблицы, представляющей в отношении сторону "один", — главной таблицы в связи. Во второй таблице, представляющей в отношении сторону "многие" и называемой подчиненной, этот ключ связи может быть либо частью уникального ключа, либо не входить в состав ключа. В подчиненной таблице ключ связи называется еще внешним ключом, На рис. 1.1 показаны две таблицы со списком покупателей и перечнем заключенных договоров, которые находятся в отношении типа 1:М и логически СВЯЗанЫ С ПОМОЩЬЮ Общего ПОЛЯ (столбца) Код покупателя — КЛЮЧ
Глава 1. Введение в Access
13
связи. Это поле является уникальным ключом в главной таблице — ПОКУПАТЕЛЬ, и неключевым полем в подчиненной таблице — ДОГОВОР. Уникальный ключ
П001 П002 П004 П005 П006 Запись: И
Связь 1:М по одинаково!,^ полю Запись -
Поле
778957651111 789889*98798 456575675677 : таблиц
Главная таблица
Компьютер маркет Перспектива Монитор
Подчиненная таблица
, Москва Москва Санкг-Петербур
ЕЖИ
у л Код покупател: Номер договора Дата заключен Сумма по дс^ 1 1 1ППП-1 ГИ 1 1 ГМ Ш 1ПП » 1 Л 1C .1ПГ1 ПП Д111 01.01.2004 135400,00 T1DD1 Д222 29.02.2004 773 024,00П001 Д777 14.05.2004 250 000,00 па • ДЗЗЗ 01.01 2004 75 160,00 П002 Д555 12.01.2003 Запись: Н
Рис. 1.1. Взаимосвязанные таблицы реляционной базы данных
Размещение сведений о каждой сущности в отдельной таблице и связывание таблиц позволяют избежать повторения значений данных в разных таблицах. При этом обеспечивается однократный ввод данных при загрузке и корректировке базы данных. Если данные двух таблиц в приведенном примере разместить в одной таблице, то каждая запись будет соответствовать одному договору. Данные о покупателе (наименование, ИНН, адрес и др.) будут повторяться во всех записях о договорах одного покупателя, что усложняет ввод, корректировку и обеспечение актуального состояния базы данных. При хранении данных в двух таблицах повторяются только значения ключевых полей. Начиная с версии Access 2000, было реализовано средство, просмотра и редактирования связанных записей из нескольких таблиц. При этом данные отображаются в иерархическом виде. При раскрытии одного уровня иерархии рядом с записью главной таблицы отображаются связанные записи подчиненной. Для записи подчиненной таблицы также могут быть открыты связанные записи и т. д. Иерархический просмотр записей возможен также для таблиц запросов и для форм в режиме таблицы. Например, для таблиц ПОКУПАТЕЛЬ, ДОГОВОР (рис. 1.2), связанных отношением один-ко-многим, для каждой записи таблицы ПОКУПАТЕЛЬ могут быть отображены и отредактированы связанные записи в таблице ДОГОВОР,
.
Часть I. Основы технологии Microsoft Access
• ПОКУПАТЕЛЬ : таблица
EBB
Код покупателя ИНН Наименование Адрес * ГТО1 778957651111 Компьютер марк.ет Москва Номер договора Дата заключения Сумма по договору 01.01.2004 + Д111 1 135400,00р. * . 29.02 2004 Д222 77В 024 ,00р. i Д777 14.06.2004 250000,00р. 0,00р. L*_ П002 789809798798 Москва Перспектива Номер договора Дата заключения Сумма по договору 01.01.2004 дззз 75 160 ,00 р Д555 12.01.2003 1 2 000, 00 р 23.05.2004 30 000, OQp. J ДВ88 12.09.2004 Д999 450000,00р. О.ООр * П004 456575675(577 Монитор Санкт-Петербург П005 7712435Б7822 Компьютер лзнд Санкт-Петербург П006 587879879123 Компьютерная техм Ярославль , •:
'
-
За
ь: ЛLJ!
1
> ]H|t* из 3
Рис. 1.2. Отображение в записях главной таблицы связанных записей подчиненной таблицы
Схема данных В СУБД Access процесс создания реляционной базы данных включает создание схемы данных. Схема данных наглядно отображает логическую структуру базы данных: таблицы и связи между ними, — а таюке обеспечивает использование установленных в пей связей при обработке данных. Для нормализованной базы данных, основанной на одно-многозначных и одно-однозначных отношениях между таблицами, в схеме данных для связей таких таблиц по первичному ключу главной таблицы или уникальному индексу могут устанавливаться параметры обеспечения связной целостности. При поддержании целостности взаимосвязанных данных не допускается нал и ч и я записи в подчиненной таблице, если в главной таблице отсутствует связанная с ней запись. Соответственно при первоначальной загрузке базы данных, а также корректировке, добавлении и удалении записей система допускает выполнение операции только в том случае, если она не приводит к нарушению целостности. Связи, определенные в схеме данных, автоматически используются для объединения таблиц при разработке многотабличных форм, запросов, отчетов, существенно упрощая процесс их конструирования.
Глава 1. Введение в Access
75
В схеме данных связи могут устанавливаться для любой пары таблиц, имеющих одинаковое поле, позволяющее объединять эти таблицы.
Объекты Access База данных Access включает следующие сохраняемые в одном файле с расширением mdb объекты: П таблицы, запросы, схемы данных, непосредственно имеющие отношение к базе данных; D формы, отчеты, страницы доступа к данным, макросы и модули, называемые объектами приложения. Формы, отчеты и страницы доступа к данным предназначены для типовых процессов обработки данных — просмотра, обновления, поиска по заданным критериям, получения отчетов. Эти объекты приложений конструируются из графических элементов, называемых элементами управления. Основные элементы управления служат для связи объектов с записями таблиц, являющихся источниками данных. Для автоматизации доступа к объектам и их взаимодействия используется программный код. Только с помощью программного кода получается полноценное приложение пользователя, функции которого доступны через меню, панели инструментов и формы. Для создания программного кода используются модули, написанные на языке программирования Visual Basic for Applications (VBA), и макросы. Каждый объект и элемент управления имеет свои свойства, определяя которые, можно настраивать их. С каждым объектом и элементом управления связывается набор событий, которые могут обрабатываться макросами или процедурами VBA, входящими в состав модулей. Объекты представлены в окне базы данных Access. Все операции по работе с объектами собственно базы данных и приложений начинаются в этом окне. Таблицы (Tables) создаются пользователем для хранения данных об одчой сущности — одном информационном объекте модели данных предметной области. Таблица состоит из полей (столбцов) и записей (строк). Каждое поле содержит одну характеристику информационного объекта предметной области. В записи собраны сведения об одном экземпляре информационного объекта. База данных Access может включать до 32 768 объектов (включая формы, отчеты и т. д.). Одновременно может открываться до 2048 таблиц. Таблицы можно импортировать из баз данных dBase, FoxPro, Paradox и других приложений, из баз данных архитектуры "клиент-сервер", таких как Microsoft SQL Server, или из электронных таблиц, таких как Excel и Lotus 1/2/3. Таб-
16
Часть I. Основы технологии Microsoft Access
лицы перечисленных источников можно использовать, организуя связь с ними в базе данных Access. Запросы (Queries). Запросы на выборку служат для выбора нужных данных из одной или нескольких связанных таблиц. Результатом выполнения запроса является таблица. В запросе можно указать, какие поля выбранных таблиц требуется отобрать, как на их основе сформировать записи и отобрать нужные. Таблица запроса может быть использована наряду с другими таблицами базы при обработке данных. Запрос может формироваться с помощью конструктора запросов или инструкции SQL — языка структурированных запросов. Запросы действия позволяют обновлять, удалять или добавлять данные в таблицы, а также создавать новые таблицы на основе существующих. Схема данных (Relationships) определяет, с помощью каких полей таблицы связываются между собой, как будет выполняться объединение данных этих таблиц, нужно ли проверять связную целостность при добавлении и удалении записей, изменении ключей таблиц. Схема данных на панели объектов в окне базы данных отображается только в проектах Access, работающих с базами данных сервера. Для отображения схемы данных в базах данных Access используется команда Сервис|Схема данных (Tools Relationships). Формы (Forms) являются основным средством создания диалогового интерфейса приложения пользователя. Форма может создаваться для ввода и просмотра взаимосвязанных данных базы на экране в удобном виде, соответствующем привычному для пользователя документу. Кнопочные формы могут использоваться для создания панелей управления в приложении. В формы могут вставляться рисунки, диаграммы, звуковые фрагменты, видео. Форма может включать подчиненные формы. В форму могут входить процедуры обработки событий, которые позволяют управлять процессом ввода, просмотра и корректировки данных. Такие процедуры хранятся в модуле формы. Отчеты (Reports) предназначены для формирования выходных документов любых форматов, содержащих результаты решения задач пользователя, и вывода их на печать. Как и формы, отчеты могут включать процедуры обработки событий. Использование графических объектов позволяет дополнять данные отчета иллюстрациями. Страницы доступа к данным (Data Access Pages) являются диалоговыми Webстраницами, которые поддерживают динамическую связь с базой данных и позволяют просматривать, редактировать и вводить данные в базу, работая в окне браузера. Макросы (Macro) являются программами, состоящими из последовательности макрокоманд, которая выполняется при наступлении некоторого события в объекте приложения или в его элементе управления. Макросы позволяют автоматизировать некоторые действия в приложении пользователя. Создание макросов осуществляется в диалоговом режиме путем выбора
Глава 1. Введение в Access
нужных макрокоманд и задания параметров, используемых ими при выполнении. Модули (Modules) содержат процедуры на языке Visual Basic for Applications. Могут создаваться процедуры-подпрограммы, процедуры-функции, которые разрабатываются пользователем для реализации нестандартных функций в приложении пользователя, и процедуры для обработки событий. Использование процедур позволяет создать законченное приложение, которое имеет собственный графический интерфейс пользователя, позволяющий запросить выполнение всех функций приложения. В Access для удобства пользователя объекты в окне базы данных могут быть объединены в группы по функциональному или иному признаку. Группы содержат ссылки на объекты базы данных различных типов. В окне базы данных Access наряду со списком созданных объектов представлены ярлыки (shortcuts), которые предназначены для быстрого запуска конструктора или мастера создания нового объекта.
Сводные таблицы и сводные диаграммы Сводная таблица представляет собой интерактивную таблицу, с помощью которой можно анализировать данные, быстро объединяя большие объемы данных и рассчитывая итоги (рис. 1.3). С помощью сводных таблиц выполнение сложного анализа данных становится простым. е* Отгрузка товаров : запрос на выборку
-
Длтл отгрузки па месяцам * : 2004 Наименование покупателя " : Номер договорл ' ' :Б Перспектива В Компьютер шркет И
"
! Общие итоги ТОГИ
Д111 Д222 " ; Итоги" 'ддзз '7 ~ + +* + , -1 .+ .. + -.' - ; + :-' Наименование товарат Сумма "Кол, Сумма "Кол! Сумма "Кол Сумма "Кол: Сумма "Кол Сумма "Кол :м 40 CD-ROM Panasonic IDE 24 16 1 1 Б 5 DIMM64MPC100 i " 5 15 15 FDD3j5 • 15 3 11 8 HDD Maxtor 20GB ",-, 8 3 3 13 10 Зв' Карта Genius Liv ~"in 10 4 4 23 13 Монитор 17LG !• 12 12 12 23 11 Скане'рАсег ]| 1 10 Г
Рис. 1.З. Сводная таблица для анализа суммарного количества отгруженного для любого из товаров по различным покупателям и договорам по всем или некоторым месяцам, кварталам, годам
*"
Часть I. Основы технологии Microsoft Access
Для получения различных итогов по исходным данным достаточно в созданном макете сводной таблицы выбирать значения в поле строк (Наименование товара), поле столбцов (Наименование покупателя, Номер договорами поле страницы (фильтра) (Дата отгрузки по месяцам).
Сводные таблицы позволяют динамически изменять макет для анализа данных различными способами. Существует возможность для достижения желаемой структуры изменять заголовки строк, столбцов, а также полей, определяющих страницу. Создавать и быстро модифицировать макет можно, выбирая и перетаскивая поля из раскрывающегося списка полей в рабочую область. При каждом изменении макета сводная таблица'немедленно выполняет вычисления заново в соответствии с новым расположением данных. Сводные диаграммы служат для наглядного графического представления анализируемой информации, облегчая для пользователей сравнение и выявление тенденций и закономерностей в данных (рис. 1.4). Дата отгрузки по иеслцлм 2004""" Сумма "Количество отгружено
Наименование покупателя Номер договора
CD-ROW Panasonic
IDE
DIMM 64M
PCI 00
FDD 3,5
HDD Maxtor 3e K.spra 20GB Genius Liv
Монитор 1TLG
Наименование товара '
Рис. 1.4. Сводная диаграмма для анализа суммарного количества отгруженного для любого из товаров по различным покупателям и договорам по всем или некоторым месяцам, кварталам, годам
Access позволяет открывать таблицы, запросы, представления, сохраненные процедуры, функции и формы » режимах сводной таблицы и сводной диаграммы; сохранять представления в режимах сводной таблицы и сводной диаграммы в качестве страниц доступа к данным, которые может просмот-
Глава 1. Введение в Access
^^^
/9
реть любой пользователь, на компьютере которого установлен Microsoft Internet Explorer 5.1 с пакетом обновления SP2 или более поздняя версия. Таким образом, источником записей для режима сводной таблицы и режима сводной диаграммы может быть не только таблица, но и базовый источник данных для формы, отчета или страницы доступа к данным. В базе данных Access источником записей может быть таблица, запрос или инструкция SQL; в проекте Access — таблица, представление, инструкция SQL или сохраненная процедура. Сводная таблица является способом представления интерактивной аналитической обработки данных — OLAP (OnLine Analytic Processing), созданной с помощью Microsoft OLAP Service для SQL Server.
Размещение базы данных Все таблицы базы данных, а также другие объекты Access: формы, запросы, отчеты, макросы и модули, построенные для этой базы, и внедренные объекты — могут размещаться на диске в одном файле формата MDB. Это упрощает технологию ведения базы данных и приложения пользователя. Обеспечиваются высокая компактность размещения всех объектов базы данных на диске и эффективность обработки данных. Страницы доступа к данным Access сохраняются в отдельных файлах, в файле базы данных размещаются только ссылки на них. Приложение базы данных может быть скомпилировано и сохранено в файле формата MDE, проект— в файле формата ADE. При этом исходный текст программ на VBA удаляется, а база данных сжимается, что значительно сокращает размер файла, оптимизирует использование памяти и, как следствие, повышает быстродействие. В базе данных форматов МОЕ и ADE невозможен просмотр, изменение или создание форм, отчетов или модулей в режиме конструктора. Для преобразования базы данных или проекта в этот формат предназначена команда Сервис|Служебные программы[Создать MDE-файл. При работе с базой данных в сети с файловым сервером и размещении на нем базы данных для коллективного использования Access предоставляет возможность отделить от нее объекты, составляющие приложение пользователя, в отдельный файл. Этот файл может быть размещен на всех компьютерах пользователей, которые будут работать с общей базой данных, и приложение может модифицироваться в соответствии с потребностями пользователя. Проекты Access, являясь клиентскими приложениями пользователя, позволяют подключаться к базам данных MSDE, размещенным на вашем компьютере, или к базам данных SQL-сервера, размещенным в сети. Проект размещается в файле с расширением adp на компьютере пользователя. В проекте пользователь может создавать базу данных на SQL-сервере или использовать существующую.
20
Часть /^рсновьггехнологии Microsoft Access
Интерфейс Access Access имеет характерный для всех приложений Microsoft Windows удобный графический интерфейс, ориентированный на комфортную работу пользователя. Для работы с таблицами базы данных и другими объектами Access предоставляет многочисленные команды меню и контекстно-зависимые панели инструментов. Поскольку интерфейс приложений Microsoft Office унифицирован, пользователю требуется меньше времени на освоение приложения. В Access, как и других приложениях Microsoft Office, часто выполняемые задачи вынесены в область задач, которая отображается вместе с базой данных. Область задач Создание файла (New Fi]e) позволяет быстро создавать новые базы данных, страницы доступа к данным или проекты, область задач Поиск файлов (Search File) — выполнять обычный или расширенный поиск файлов, область задач Буфер обмена (Clipboard) — временно сохранять и выбирать объекты для вставки. Сразу после запуска Access открывается область задач Приступая к работе, в которой можно выполнить открытие базы данных или перейти к созданию новой. Здесь отображен список баз данных, которые были использованы последними. Область задач Справка Access обеспечивает доступ ко множеству различных возможностей справочной системы. Чтобы использовать помощника для получения справки и советов во время работы, в меню Справка выберите команду Показать помощника. Справочная система Access построена на основе HTML, и поэтому работа с ней не отличается от работы в программах просмотра Интернета. При вызове справки ее окно не заслоняет окна Access, которое автоматически изменяет размер, освобождая пространство для окна справки. Начиная с Access 2002, обеспечивается более удобный доступ к справочной системе через поле Введите вопрос, расположенное в строке меню. Всплывающие подсказки кратко описывают назначение кнопок панели инструментов при установке курсора мыши на них. Пользователь сам может создавать всплывающие подсказки для элементов управления форм и отчетов. Подсказки задаются простым заполнением строки свойств этих элементов управления. Кроме того, могут быть созданы контекстные справки и меню, привязанные к элементам управления форм и отчетов. Быстро выполнить некоторые задачи (действия), для которых обычно предназначены другие программы, в Access 2003 можно с помощью смарт-тегов. В Access 2003 можно добавить смарт-тег к полю таблицы, запроса или элементу управления формы, отчета или страницы доступа к данным базы с помощью установки свойства Смарт-теги. После добавления смарт-тега при
Глава 1. Введение в Access
активизации ячейки этого поля или элемента управления появляется кнопка, открывающая меню действий, которые доступны для смарт-тега. Например, если в форме, отображающей сведения о покупателе, имеется поле с его электронным адресом, добавленный в это поле смарт-тег позволит перейти к подготовке письма покупателю в Outlook Express. С помощью смаргтега имени покупателя можно добавить имя в папку Outlook Контакты. В Access представлена л и ш ь малая часть смарт-тегов. Дополнительные смарт-теги, созданные в корпорации Microsoft или независимыми разработчиками, можно найти в Интернете. В Microsoft Office 2003 панель Microsoft Office недоступна. Для быстрого открытия программы, файла или папки можно использовать меню Пуск Windows XP или панель быстрого запуска Windows в Windows XP/2000. Пользователь посредством технологии Drag and Drop имеет возможность переносить объекты базы данных и их элементы с помощью мыши. Например, любую таблицу или запрос можно перенести из окна базы данных в окно схемы данных. Для установления связи между объектами можно в схеме данных переместить поле из одной таблицы в другую. Для размещения подчиненной формы в главной достаточно перенести в нее ранее созданную форму или даже просто таблицу-источник в конструируемую форму. С помощью мыши можно переносить объекты между различными базами данных. При этом необходимо запустить две задачи Microsoft Access. Возможен перенос таблиц и запросов Access в другие приложения, например, в Microsoft Word и Microsoft Excel. Можно выделить нужные данные в форме или в объекте в режиме таблицы и перенести только их. Можно создать таблицу путем переноса с помощью мыши диапазона ячеек Microsoft Excel в окно базы данных Microsoft Access. Объекты других приложений могут быть перенесены в поле объекта OLE в таблице или форме в режиме формы, а также в форму или отчет в режиме конструктора. В Access предусмотрено широкое использование технологии IntelliSense, которая помогает пользователю ориентироваться в выборе необходимых действий и обеспечивает высокую производительность пользователя за счет автоматизации выполнения основных функций. Выдача помощником (Office Assistant) контекстно-зависимой справочной информации помогает принять решение, как лучше выполнить то или иное действие, или найти нужный инструмент в Access.
Средства конструирования объектов Access располагает разнообразными диалоговыми средствами пользователянепрограммиста, которые позволяют создавать приложения для решения задач, не прибегая к разработке запросов на языке SQL или к программированию макросов или модулей на языке Microsoft Visual Basic for Applications.
22_
Часть I. Основы технологии Microsoft Access
Для автоматизации процесса создания объектов базы данных: таблиц, запросов, схемы базы данных, и объектов приложения: форм, отчетов, страниц доступа к данным — используются специализированные диалоговые графические средства, называемые конструкторами (Design). Конструктор предоставляет пользователю набор инструментов, с помощью которых объект быстро создается и модифицируется. Для конструирования макета формы, отчета и страницы доступа к данным используется панель элементов, которая появляется при вызове конструктора. В проекте Access конструкторы таблиц, представлений, сохраненных процедур, определяемых пользователем функций позволяют работать с базами данных сервера в простом привычном для пользователя локальных баз данных графическом режиме. Предусмотрено конструирование форм, запросов, отчетов, страниц и их элементов с помощью программ-мастеров и автокоманд. Для упрощения внесения изменений в объекты базы данных Access предлагает технологию интеллектуальной замены имен объектов в базе дойных. При этом автоматически исправляются ошибки, вызванные переименованием таблиц, полей, форм, отчетов, запросов, текстовых блоков или других элементов управления. Реализуется эта технология за счет того, что каждый именуемый объект (или элемент) базы данных имеет внутренний уникальный идентификатор, а имя является только псевдонимом. При переименованиях изменяется лишь псевдоним и при необходимости в других объектах корректируются все ссылки на объект. Для применения этой технологии следует до создания объектов установить соответствующие параметры в разделе Автозамена имен (Name AntoCorrect) на вкладке Общие (General), открываемой командой меню Сервис) Параметры (Tools|Options).
Мастера Access Множество мастеров Access позволяют автоматизировать процесс создания таблиц базы данных, форм, запросов, отчетов и страниц доступа к данным; анализировать таблицы базы данных и выполнять многие другие работы. Практически для любых работ существует мастер (Wizard), который поможет их выполнить. Мастер подстановок (Lookup Wizard) создает в поле таблицы раскрывающийся список значений из полей другой таблицы для выбора и ввода нужного значения.
Замечание Для создания поля со списком нужно в режиме конструктора таблицы выбрать тип данных этого поля — Мастер подстановок (Lookup Wizard). Мастер подстановок можно вызвать в режиме таблицы командой меню Вставка] Столбец подстановок (lnsert|Lookup Column).
Глава 1. Введение в Access
Мастера запросов позволяют создавать простые запросы на выборку или запросы на выборку, в которых выполняются групповые операции над данными из одной или нескольких таблиц. Мастер перекрестных запросов (Crosstab Query Wizard) формирует из взаимосвязанных таблиц или запросов базы данных таблицу, подобную электронной, в которой одно поле используется в качестве заголовков строк, второе -- столбцов, а на их пересечении размещаются итоговые данные, рассчитываемые по значениям третьего поля. Мастера по созданию форм и отчетов упрощают и ускоряют процесс создания однотабличных и многотабличных форм и отчетов. В диалоге с мастером пользователю достаточно выбрать таблицы и поля, которые необходимо включить в форму, выбрать источник основной и подчиненной частей формы. Мастера по разработке форм и отчетов автоматически создают инструк-. цию SQL, описывающую источник записей для формы или отчета, что избавляет пользователя от подготовки специального запроса. Созданные в полях таблиц списки наследуются при включении этих полей в форму или отчет (поле со списком). Новая форма или отчет могут-наследовать примененный к таблице — источнику записей фильтр.
Код товара Наименование товара Цена
T001
ОТГРУЗКА
Монитор17|_6 [1 000,00р. 15
п сем • с оз
COJ
Запись: Н
M
из Ю
Рис. 1.5. Форма с диаграммой, построенной мастером
Мастер по созданию диаграмм (Chart Wizard) обеспечивает создание в формах и отчетах диаграмм, базирующихся на данных в таблицах или запросах. На рис. 1.5 приведена форма, позволяющая просмотреть в справочнике данные о товаре и синхронно отобразить диаграмму с количеством отгру-
24
Часть I. Основы технологии Microsoft Access /
женного по складам. Вызвав мастер командой Вставка [Диаграмм а и ответив на ряд элементарных вопросов, мы получили диаграмму, связанную с выбранными в форме данными. Мастер условного форматирования позволяет устанавливать разные виды форматирования поля в зависимости от значений данных в поле или других формируемых пользователем условий. Мастер вызывается в режиме просмотра формы командой Формат]Условное форматирование (Conditional Formatting). Например, для цены товара, превышающей заданную, можно задать другой стиль отображения — красный цвет и полужирное начертание. Для выбора фона формы, отчета и оформления отдельных элементов управления из предлагаемого списка может быть использован мастер, вызываемый из режима конструктора командой Формат|Автоформат (AutoFormat). Мастер кнопок (Command Button Wizard и Page Command Button Wizard) создает командные кнопки — элементы управления в форме и на страницах доступа к данным. При построении кнопки мастер предлагает большой набор действий, которые могут быть выполнены при щелчке на кнопке. Для выбранного действия мастер строит процедуру обработки события на языке VBA. Формы с командными кнопками, связанными с процедурами Visual Basic, позволяют создать удобный интерфейс пользователя для управления приложением. Диспетчер кнопочных форм (Switchboard Manager) позволяет создать многоуровневую панель управления приложением, которая объединяет его разрозненные компоненты и позволяет структурировать их по функциональному назначению. Мастер по анализу таблиц (Table Analyzer Wizard) позволяет выполнить нормализацию данных базы. Мастер разделяет ненормализованную таблицу с дублированными данными на две или несколько таблиц меньшего размера, в которых данные сохраняются без повторений. Наряду с мастером по анализу таблиц в меню Сервис|Анализ (Tools Analyze) представлены: П анализатор Быстродействия (Performance), который позволяет проанализировать основные характеристики объектов базы данных или базы в целом и выдает рекомендации по их изменениям для улучшения ее эффективности; П Архивариус (Documenter), который позволяет вести документирование БД — создать полное описание любого из объектов базы данных или базы целиком и распечатать или передать его в Word. Мастер сводных таблиц (PivotTable Wizard) в Access 2002/2003 позволяет открыть существующие таблицы, запросы, формы в режиме сводной таблицы и создать макет для этого режима.
Глава 1. Введение в Access
25
Мастера по импорту таблиц и объектов (команда Файл|Внешние данные|Импорт (File Get External Data|Import)) позволяют импортировать их из внешнего файла в текущую базу, выполнив элементарные действия по выбору файла и нужных объектов. Импортировать данные можно из файла другой базы данных Access, а также из файлов Excel, Lotus, Paradox, dBase и других баз данных. Возможен импорт текстовых файлов и HTML-таблиц и списков из локальной сети или Интернета в таблицу Microsoft Access. Возможен импорт данных и схем, описывающих структуру данных, файлов формата XML в базу данных Access, Microsoft SQL Server или Microsoft SQL Server Desktop Engine. При импорте файлов XML данные могут быть преобразованы в формат Access. Импортированные из файлов XML данные могут быть добавлены в существующие или новые таблицы. Мастер связанных таблиц (команда Файл|Внешние данные|Связь с таблицами (File Get External Data Link Tables)) создает в текущей базе данных таблицы, связанные с таблицами во внешних файлах, но, в отличие от мастера гто импорту, не размещает новую таблицу в файле базы данных, а только устанавливает связь с источником данных этой таблицы. Эта таблица наряду с другими таблицами отображается в окне базы данных и также доступна для обработки. Однако связанная таблица доступна только до тех пор, пока связь не разрушена по каким-либо причинам. Внесенные в связанную таблицу изменения переносятся и сохраняются во внешнем файле, и наоборот: внесенные в файл изменения доступны в связанной таблице. Этот мастер, как и мастер по импорту, работает со многими внешними источниками данных. Мастера по экспорту (команда Файл|Экспорт (File|Export)) позволяют экспортировать объекты (одновременно только один объект) базы данных в другие базы данных Access, в проекты Access, в базы данных многих других СУБД. Объекты могут быть экспортированы в текстовые файлы, различные электронные таблицы, опубликованы на статических и динамических страницах локальной сети и Интернета. Поддерживается экспорт таблиц, запросов и базовых данных форм и отчетов из базы данных Access (файлы с расширением mdb), а также таблиц, представлений, сохраненных процедур, функций и базовых данных форм и отчетов из проекта Access (файлы с расширением adp) в XML-файлы данных и схемы, описывающие структуру данных. В процессе экспорта допускается также преобразование данных в другой формат презентации с помощью языка XSL. Экспорт данных и объектов базы данных в файл XML является удобным способом перемещения и сохранения структурированных данных в формате, подходящем для использования в Интернете. Мастер наклеек (Label Wizard) автоматизирует процесс создания почтовых наклеек на основе данных таблицы или запроса и предлагает многочисленные шаблоны наклеек различных типов. Этот мастер входит в группу мастеров создания отчетов.
26
Часть I. Основы технологии Microsoft Access
Мастер защиты (User-Level Security Wizard) позволяет определить новые параметры защиты базы данных. Мастер создает новую незащищенную базу данных, в которую копируются все объекты из исходной базы данных, снимаются все права, присвоенные членам группы пользователей, и затем организует защиту базы данных. После завершения работы мастера администратор может присвоить новые права доступа пользователям и группам. Мастер по разделению базы данных (Database Splitter Wizard) позволяет разделить базу данных на два файла, в первый из которых помещаются таблицы, а во второй — формы, отчеты, страницы доступа к данным, макросы и модули. При этом пользователи, работающие в сети, могут иметь общую базу данных и, в то же время, использовать индивидуальные приложения, изменяя по своему усмотрению формы, отчеты и другие объекты, используемые для обработки общих данных. Мастер преобразования в формат SQL Server (Upsizing Wizard) разделяет базу данных Access (файл с расширением mdb) на базу данных Microsoft SQL Server и клиентское приложение — проект Access (файл с расширением adp). Мастер преобразования значительно упрощает переход к новой для пользователя технологии. Таблицы и запросы преобразуются в объекты базы д а н н ы х SQL-сервера, а другие объекты перемещаются в файл проекта Access. Преобразование осуществляется с учетом требований новой среды при сохранении основных свойств объектов. Так, типы данных полей таблиц преобразуются в адекватные, запросы на выборку — в представления, запросы действия — в сохраненные процедуры. Подробный отчет о преобразовании позволяет уточнить и отредактировать те объекты, с которыми не смог справиться мастер. Мастер создания баз данных на Microsoft SQL Server (Microsoft SQL Server Database Wizard) позволяет при создании нового проекта Microsoft- Access подключиться к SQL-серверу и создать там новую базу данных. Служебная программа (Database Utilities) Преобразовать базу данных (Convert Database) позволяет конвертировать базу данных из предыдущих версий в текущую (к текущей версии базы данных Access — To Current Access Database Version). Кроме того, можно конвертировать базу данных из текущей версии в предыдущую (к предыдущей версии базы данных Access — To Prior Access Database Version). В Access 2003 существует возможность работы с файлами Access 2000/2002 и редактирования их без преобразования формата файла. Файлы в формате Microsoft Access 2002/2003 можно открывать только в Microsoft Access 2003. По умолчанию в Access 2003 используется формат Access 2000. Для изменения формата выполните команду Сервис|Параметры, перейдите на вкладку Другие (Other) и в группе Формат файла по умолчанию выберите необходимый формат файла Access.
Глава 1. Введение в Access
27
Служебная программа (Database Utilities) Сжать и восстановить базу данных (Compact and Repair Database) реорганизует базу данных на диске с целью улучшения объемно-временных характеристик. Утилита перезаписывает фрагментированный в результате удаления и добавления объектов файл базы данных и сокращает его размер, а также восстанавливает поврежденную базу данных. Реализована функция автоматического сжатия при закрытии базы данных. При попытке открытия, сжатия, шифрования или дешифрования базы данных Access определяет, что она повреждена, и предоставляет возможность восстановить ее.
Мастера баз данных В работе особую роль играют мастера баз данных, которые предлагают ншблоны многих типовых приложений. С их помощью можно практически сразу приступить к работе с базой данных выбранного приложения. Для этого после выбора шаблона приложения необходимо выполнить автоматическую генерацию этого приложения. Типовое приложение может быть при необходимости доработано пользователем. Access содержит шаблоны типовых баз данных, включающих все необходимые таблицы, формы, запросы и отчеты для предметных областей различных сфер деловой и личной жизни. Мастер баз данных создает на основе выбранного шаблона базу данных и приложение в диалоге с пользователем.. Для отображения списка шаблонов типовых баз данных, с которыми работает мастер, нужно нажать кнопку Создать (New) в окне Access, в области задач Создание файла (New file) в разделе Шаблоны выбрать ссылку На моем компьютере. В окне Шаблоны на вкладке Базы данных (Database) (рис. 1.6) выбирается нужная база данных. Дополнительные шаблоны можно получить, открыв библиотеку шаблонов на Web-узле обновления Microsoft Office, воспользовавшись ссылкой Шаблоны на узле Office Online. Мастер, создавая базу данных в соответствии с шаблоном, предлагает включить в таблицы базы данных дополнительные поля, выбрать оформление экрана в формах и отчетах. Пользователю остается только ввести данные. Мастера баз данных максимально упрощают разработку типовой базы данных, автоматически создавая ее. Типовые базы данных позволят начинающему пользователю познакомиться с основными принципами построения таблиц базы данных, связей между ними, получить навыки практической работы в среде Access. Работая с типовой базой, пользователь научится просматривать и изменять данные через формы, делать запросы для получения сведений из связанных таблиц, создавать отчеты. Однако, используя типовую базу данных, трудно рассчитывать, что она и полной мере удовлетворит потребности пользователя. Базу данных, создан-
26
Часть I. Основы технологии Microsoft Access
ную мастером, можно изменить и расширить, но эта работа требует от пользователя практически тех же знаний, что и создание новой базы данных.
Общие
Базы данных
Главная книга
Заказы на работы
Контакты
Основные фонды
Прием заказов
Проекты
Расходы
-i Ресурсы
Склад
Шаблоны на узле Office Online
Рис. 1.6. Окно выбора шаблона базы данных на локальном компьютере
Средства программирования Наряду с диалоговыми средствами создания объектов базы данных и объектов приложения, которые позволяют решить многие задачи пользователя, Access располагает мощными средствами программирования. Эти средства могут использоваться как для доработки приложений, созданных диалоговыми средствами, так и для реализации сложных задач и создания приложений в целом с необходимым пользователю интерфейсом. Без использования программного кода практически невозможно получить законченное автоматизированное приложение пользователя. Одним из средств программирования в Access является язык \такрокоманд. Программы, созданные на этом языке, называемые макросами, позволяют легко связывать отдельные действия, реализуемые с помощью форм, запросов, отчетов. Макросы управляются событиями, которые вызываются действиями пользователя при диалоговой работе с данными через формы, например: нажатие кнопки, изменение данных в поле — или системными событиями.
Глава 1. Введение в Access
29
Макросы позволяют разработать меню приложения, содержащее команды для выбора и выполнения функциональных компонентов приложения. Простой язык макрокоманд и диалоговая среда разработки макросов позволяют при малой трудоемкости интегрировать объекты приложения и организовать процесс обработки данных. Наряду с языком макрокоманд Access включает развитую интегрированную среду объектно-ориентированного программирования Visual Basic for Applications (VBA) 6.4, позволяющую реализовать любые программные решения. Программы на VBA реализуются процедурами, которые объединяются в объектах, называемых модулями. В VBA база данных рассматривается как совокупность объектов (таблиц, форм, отчетов, их элементов и т. д.), имеющих свойства и методы, реализующие заранее определенные действия над объектами. Структурированность объектов базы данных упрощает освоение этого языка и создание приложений. Управление выполнением программ в диалоговых приложениях VBA осуществляется событиями, вызываемыми действиями пользователей или системы. Среда VBA объединяет разнообразные наглядные графические инструменты: редактор VBA, окно разрабатываемого проекта, окно свойств объектов проекта, окно просмотра объектов, отладчик и др. Все инструменты унифицированы и являются общими для всех приложений Microsoft Office, Visual Basic, а также продуктов ряда других фирм. Такая практически единая для различных приложений Office среда позволяет совместно использовать их объекты. Приложения, разрабатываемые на VBA, могут выполняться только в той среде, в которой поддерживается VBA, в то время как Visual Basic ориентирован на полностью самостоятельную разработку автономно выполняющихся приложений. Язык VBA является производным от самостоятельной системы программирования Visual Basic и имеет с ним много общего. Их синтаксис и интерфейс практически одинаковы. В Access макросы могут быть преобразованы в программы на языке VBA. Это позволяет упростить подготовку программ на VBA, которые затем могут быть усовершенствованы при использовании более мощных средств VBA.
Интеграция и использование внешних данных Access поддерживает технологию OLE (Object Linking and Embedding — связь и внедрение объектов), обеспечивающую возможность интеграции даншлх различных приложений в составной документ. С помощью OLE пользователь может внедрять объекты другого приложения в базу данных или устанавливать с ними связи. Активизация внедренного объекта открывает про-
30
Часть I. Основы технологии Microsoft Access
грамму, которая его создала, и пользователь может изменить объект. При установлении связи с объектом он по-прежнему сохраняется в файле другого приложения, а не в базе данных. За счет этого он может обновляться независимо, а в базе данных всегда будет представлена последняя версия объекта. Надо иметь в виду, что при изменении местоположения файла пользователю необходимо обновить связь объекта с базой данных. Внедряемыми или связываемыми объектами могут быть документы различных приложений Windows: рисунки, графики, электронные таблицы, звуковые или видеофайлы. Например, в таблице, наряду с обычными реквизитами, характеризующими информационный объект, может храниться любая графическая информация о нем: схемы, чертежи, диаграммы, рисунки и- т. п. Таким образом, в Access расширяется традиционное понятие данных. хранимых в базе и представляющих информационные объекты. Access предусматривает использование данных различных внешних источников. Внешними источниками данных могут служить таблицы других баз данных Access, dBase, Paradox, Oracle и Microsoft SQL Sewer, электронные таблицы Microsoft Excel, Lotus 1/2/3, таблицы и списки HTML и файлы XML, находящиеся на сервере в локальной, корпоративной сети или в Интернете, данные из других приложений, таких как Microsoft Exchange. Для взаимодействия с внешними источниками данных используется специальное программное обеспечение — интерфейсы. Широко используемыми интерфейсами являются ODBC (Open Database Connectivity), который применяется, прежде всего, для доступа к базам данных, и OLE DB, разработанный как средство универсального доступа к данным по локальной сети и через Интернет, основанное на модели составных объектов COM. OLE DB позволяет подсоединяться к источникам данных многих типов, в том числе реляционным источникам данных, почтовым файлам, неформатированным текстовым файлам и электронным таблицам. К источникам данных ODBC могут отправляться запросы, таблицы таких источников данных могут использоваться в базе данных Access, как связанные. Связанные таблицы можно использовать при создании запросов, форм, отчетов, причем можно объединять их данные с данными из локальных объектов Access. При работе с Microsoft SQL Server в Access можно разработать проект, полностью ориентированный на работу с данными, размещенными в базе данных сервера. При этом подключение к базе данных сервера осуществляется без использования ядра баз данных Microsoft Jet через интерфейс OLE DB. Данные самых различных приложений могут импортироваться в базу данных Access. Возможен экспорт объектов из базы данных Access в другие приложения.
Глава 1. Введение в Access
3i
Поддержка технологий корпоративных сетей Корпоративные сети или сети Интранет (Intranet) являются сетями уровня предприятия, которые базируются на технологиях Интернета и "клиентсервср". Эти сети могут подключаться или не подключаться к сети Интернет (рис. 1.7). Интранет позволяет получить доступ к информации всего предприятия со своего рабочего места, не заботясь о совместимости аппаратных и программных платформ, используя обычную программу просмотра — браузер. Выход в Internet Общая база данных
Access
Internet Explorer Рис. 1.7. Корпоративная сеть с SQL- и Web-сервером
Access включает развитые средства, ориентированные на клиент-серверные технологии, которые позволяют создавать клиентские приложения для работы с базами данных SQL Server. При этом сохраняется знакомый интерфейс приложения Access. Разнообразные простые и удобные средства создания страниц доступа к данным — Web-страниц, связанных с базой данных, — позволяют организовать работу пользователей с базой данных с помощью браузера из любой точки сети. Пользователю достаточно открыть форму или отчет в виде страницы доступа к данным, чтобы просматривать и обновлять данные в базах Access и SQL Server.
32_
Часть /.Основы технологии Microsoft Access
Благодаря поддержке в Access языка XML разработчики получили возможность использовать в своих решениях XML-данные. Новые средства публикации позволяют экспортировать как данные, так и элементы форматирования для отображения в Web-пространстве с применением стандартных интернет-языков XML Extensible Markup Language) и XSL (Extensible Stylesheet Language). Таким образом можно, например, быстро публиковать отчеты из баз данных в Web, которые пользователи могут просматривать с помощью браузеров.
Многопользовательская база данных Access База данных, как правило, содержит данные, необходимые многим пользователям. Создание многопользовательской базы данных Access и получение одновременного доступа нескольких пользователей к общей базе данных возможно в одноранговой сети персональных компьютеров или в сети с файловым сервером. Под одноранговой понимается сеть, каждый компьютер которой может предоставлять остальным подключенным к сети компьютерам доступ ко всем или некоторым своим папкам, т. е. являться сервером и рабочей станцией одновременно. Одноранговая сеть может управляться встроенной сетевой операционной системой Windows 9* или Windows NT/2000/XP. Сети больших масштабов используют выделенные файловые серверы. В сети, поддерживающей концепцию файлового сервера, база данных Access размещается на компьютере, выделенном в качестве файлового сервера. СУБД Access может быть установлена или на файловом сервере, или на каждой рабочей станции, но выполняется она всегда на рабочей станции пользователя. Обработка данных базы в обоих случаях также осуществляется на рабочих станциях пользователей. Поэтому по сети передаются с сервера на рабочие станции большие объемы данных, что сильно загружает ее и делает невозможным одновременное обслуживание большого числа пользователей. Работа локальной сети с файловым сервером обеспечивается рядом сетевых операционных систем. Наиболее популярными являются Microsoft Windows NT/2000/XP и NetWare Novell. Windows NT/2000/XP имеют версию Windows NT/2000/XP Server, предназначеную для управления файловым и другими серверами сети, и версию Windows NT/2000/XP Workstation или Professional, которая устанавливается на рабочей станции и под управлением которой могут выполняться различные приложения, в том числе и Access. Сеть обеспечивает аппаратную и программную поддержку обмена данными между компьютерами. Сетевая операционная система обеспечивает защиту базы данных, размещенной в сети, предоставляя пользователям доступ к определенным сетевым ресурсам, например, папкам, только по предъявлению имени и пароля.
Глава 1. Введение в Access
33
Access следит за разграничением доступа разных пользователей к базе данных и обеспечивает защиту данных при одновременной работе пользователей с общими данными. Автоматически обеспечивается защита данных от одновременной их корректировки несколькими пользователями сети. Разграничение доступа осуществляется за счет повторной идентификации пользователя по новым именам и паролям. Для обеспечения защиты данных от одновременной их корректировки несколькими пользователями сети в Access предусматривается блокировка на уровне страниц, при которой блокируются все записи одной страницы диска. Дополнительно к блокировке страничного уровня Access поддерживает блокировку на уровне записи. Выбор режима блокировки на уровне записи в текущей базе данных производится параметром Блокировка записей при открытии базы данных (Open databases using record level locking) (меню Сервис|Параметры|Другие -• ToolsOptionsjAdvanced). Если флажок этого параметра не установлен, по умолчанию будет использована блокировка на уровне страницы. Для пользователей, которые совместно работают с приложением, но не всегда имеют возможность подключаться к сети, Access предлагает реплшщрованиую базу данных. Репликацией называют создание специальных копий — реплик общей базы данных Access, с которыми пользователи могут одновременно работать на разных рабочих станциях. Например, при работе в командировке или дома, когда невозможно подключиться к сети, или когда необходимо уменьшить загрузку сети. Отличие репликации от обычного копирования файлов баз данных заключается в том, что для копий базы данных возможна синхронизация изменений. При репликации базы данных ядро базы данных Microsoft Jet вносит в основную базу данных ряд изменений. Преобразование базы данных в реплицированную базу данных выполняется командой меню Сервис|Репликация)Создать реплику (Tools]ReplicationjCreate Replica). При этом Access присваивает базе данных статус основной реплики и создает одну новую реплику. После внесения изменений в реплики становится возможной их синхронизация. При проведении сеанса синхронизации изменения, сделанные одним пользователем, могут автоматически вноситься в общую реплику и реплики других пользователей, и наоборот. В процессе синхронизации производится обмен обновленными записями и объектами между репликами, Процесс синхронизации начинается с помощью команды Синхронизация (Synchronize Now). Если пользователи двух разных реплик по-разному изменили одну и ту же запись, то при синхронизации реплик создается конфликтная таблица. Для того чтобы просмотреть и'исправить конфликтующие записи, следует выполнить команду Устранить конфликты (Resolve Conflicts). Могут реплицироваться не все объекты базы данных. Часть объектов может использоваться локально. Часть объектов может реплицироваться группами
34
Часть I. Основы технологии Microsoft Access
пользователей. При проведении сеанса синхронизации работа с базой данных может продолжаться.
Работа Access с базой данных SQL Server Работа с общей базой данных в сети с файловым сервером становится неэффективной уже при одновременной работе 15 пользователей. На обеспечение эффективной работы большого числа пользователей с общей базой данных ориентирована технология "клиент-сервер". В этой технологии пользователь-клиент передает со своего компьютера запрос на машину сервера, там СУБД обрабатывает запрос и обратно посылает только результат выполнения запроса, Таким образом, значительно снижается объем передаваемых по сети данных. Приложение пользователя разрабатывается и выполняется под управлением СУБД Access на машине клиента. Общая база данных размещается на мощной машине, где функционирует сервер баз данных, управляемый СУБД SQL Server (см. рис. 1.7). Эта СУБД выполняет обработку данных, размещенных на сервере, и отвечает за их целостность и сохранность. Для управления базой данных на сервере используется язык структурированных запросов SQL (Stinctured Query Language). Широко известны серверы баз данных: SQL Server фирмы Microsoft, Oracle Server фирмы Oracle и NetWare SQL фирмы Novell. SQL-серверы баз данных являются самым мощным приложением для сетевой обработки данных. Подключение из Microsoft Access к серверам баз данных SQL может быть осуществлено с помощью драйверов ODBC. ODBC (Open Database Connectivity) — открытый доступ к базам данных — поддерживает стандартный протокол для серверов баз данных SQL. Каждому серверу баз данных соответствует свой драйвер ODBC. В комплект поставки MS Access включен драйвер ODBC для MS SQL Server и Oracle SQL Server. Использование унифицированного языка запросов SQL позволяет работать с одной и той же базой данных сервера разным пользователям из различных приложений. Данные из базы могут получать Access, Excel, FoxPro и многие другие приложения, использующие протокол ODBC, посылая запросы на языке SQL-серверу баз данных. Приложение Access взаимодействует с данными, расположенными на сервере, несколькими способами. Можно посылать на сервер запрос на языке SQL-сервера, чтобы получать необходимые данные в виде виртуальной таблицы — таблицы запроса и далее использовать эту таблицу в качестве источника данных в форме или отчете. Можно посылать на сервер обновленные данные, а также создавать или изменять таблицы в базе данных сервера. В локальной базе данных могут быть созданы связанные таблицы, отображающие данные из таблиц SQL-cepuepa. Эти таблицы обрабатываются в приложении наряду с локальными таблицами базы.
Глава 1. Введение в Access
__
_______
_
35
В Access реализована возможность создания приложения-проекта, в котором хранятся только объекты, составляющие приложение пользователя, а база данных, с которой работает приложение, размешается на SQL-сервере. Причем в проекте-приложении обеспечивается работа с объектами базы данных (таблицами, представлениями, сохраняемыми процедурами, счемами данных) в диалоговом режиме через интерфейс, аналогичный интерфейсу SQLсервера. Проект Access, являющийся клиентом SQL-сервера, позволяет напрямую, не используя ядро баз данных Microsoft Jet, подключаться к ба:;;ам данных Microsoft SQL Server с помощью интерфейсов OLE DB. Из проекта Access с помощью OLE DB обеспечивается доступ не только к базам данных SQL Server, ко и к базам данных Access, файлам электронной почты и источникам данных многих других типов. В Access 2002/2003 включена локальная версия SQL Server — Microsoft SQL Server Desktop Engine {ранее MSDE), которая позволяет создать проект, предназначенный для работы с базой данных SQL Server, работая на локальном компьютере, не подключенном к сети. При этом нет необходимости приобретать лицензию и устанавливать сетевой вариант сервера баз данных. Работа MSDE основывается на том же ядре базы данных, что и SQL Server. Созданное с использованием MSDE приложение будет полностью пригодно для работы с базой данных на большом сетевом SQL-сервере. После завершения разработки, переместив базу с локального компьютера на сервер и модифицировав информацию о соединении, проект можно подключить к удаленному SQL-серверу. Такой подход может быть удобен при разработке проекта для небольшого числа пользователей, когда в дальнейшем предполагается эксплуатация базы данных на SQL-сервере. Кроме того, использование локального варианта SQL-сервера позволяет изучить работу с базами данных сервера при наличии лишь одного компьютера.
Замечание MSDE устанавливается на компьютере с компакт-диска Microsoft Office 2(]03, если на компьютере установлена операционная система Microsoft Windows 98, Microsoft Windows 2000/XP или более поздняя версия. Для запуска MSDE может понадобиться стартовать программу SQL Server Service Manager. Обычно после установки MSDE на панели задач появляется значок MSSQLSen/er. Двойной щелчок по значку и щелчок по кнопке Start/Continue позволяет запустить сервер MSDE. Для автоматического запуска SQL Server Service Manager при каждом запуске операционной системы следует установить флажок Autostart service when OS starts.
Интернет-технологии Пользователи баз данных все больше ориентируются на уникальные возможности быстрого сбора и совместного использования информации, пре-
36
Часть I. Основы технологии Microsoft Access
доставляемые интернет-технологиями (см. рис. 1.7). Базы данных широко используются как в интернет-публикациях, так и в электронной коммерции. В Access 2003 получили дальнейшее развитие интернет-технологи и, обеспечивающие разработку Web-приложений для корпоративных баз данных. Access предлагает простые интерактивные средства разработки Web-страниц доступа к данным, связанных с базами данных Jet или SQL Server. При этом приложение баз данных становится доступным всем пользователям предприятия в браузере, что упрощает совместное использование корпоративной информации в среде настольных систем. Например, пользователь Access может не собирать информацию по электронной почте, чтобы затем ввести ее в базу данных для анализа. Достаточно опубликовать Web-страницу, через которую пользователи смогут сами вводить данные непосредственно в базу. Страницы доступа к данным так же, как формы и отчеты Access, обеспечивают взаимодействие пользователя с данными, но позволяют делать это в корпоративной сети и в Интернете. Фактически они выступают в роли форм и отчетов для Интернета. По своим функциям страницы доступа к данным очень похожи на классические формы и отчеты, однако они специально предназначены для просмотра, редактирования и вывода отчетов по данным базы в рамках Internet Explorer. Сохранение страниц доступа к данным не в файле базы данных, а в отдельных HTML-файлах позволяет легко размещать их на Web-серверах. На страницу несложно добавить гиперссылки, ведущие от одного документа к другому и объединяющие их в единое информационное пространство. Гиперссылки позволят создавать Web-узлы, ориентированные на работу с базой данных. Передача информации между различными программами через Интернет всегда была трудной задачей из-за различий в форматах и структурах данных разных разработчиков программного обеспечения. Стандартный язык описания и передачи данных в Интернете XML (Extensible Markup Language) решает эту задачу. Язык HTML, хорошо подходящий для отображения текста и изображений в браузерах, ограничен в своих возможностях определения данных и структуры данных. HTML описывает внешний вид Webстраницы, тогда как XML определяет данные и описывает их структурирование. Язык XML определяет формат обмена данными, обеспечивающий обмен данными между разными компьютерами и приложениями. XML позволяет разделить процессы определения и презентации данных. В результате данные XML могут представляться по-разному с помощью различных файлов презентации. Microsoft Access обеспечивает средства импорта и экспорта данных XML, a также преобразования данных в форматы и из форматов, используемых файлами XML.
Глава 1. Введение в Access
•-
Язык XML широко используется для создания презентаций, размещаемых в Web. Для публикации данных в формате XML достаточно экспортировать таблицу, отчет или запрос и связать с ним файл XSL для представления данных.
Начало работы в Microsoft Access Запуск Access Для работы с Access на локальном компьютере пользователя должна быть установлена одна из настольных операционных систем Windows 98/ME/ NT/2000/XP и СУБД Access. Кнопки окна Access Све|)ну1ь Развернуть Закрыть
Кнопка системного меню
•Строка заголовка Файл
Правка' ' '|ид
Ветерка
СЕРВИС
Окно
-Строка меню - Панель инструментов
Кнопка Создлть-
- ОЗласть задач
Всплывающэя подсказка f-J
."'-» Office Online Подключиться к веб-узлу .Microsoft Office OnSne Последние сведения об испоявзавании Access Лет о магически обновлять этот список чз Зебз
Пример: "Печать не скольких копий"
Открыть Оснавиая_БД,тс1Ь Осно ви.эя_Б Д_д ля проектирования. m db nO_2002.mdb 5ystemi.mdw
•Строка состояния
Рис. 1.8. Окно Microsoft Access
Часгь /. Основы технологии Microsoft Access
Для того чтобы начать работу в СУБД Access, необходимо после загрузки операционной системы запустить ее. Это можно сделать, например, так: в нижней части рабочего стола Windows XP на панели задач нажать кнопку Пуск, в открывшемся меню нажать кнопку Все программы. Из списка программ, установленных на данном компьютере, выбрать Microsoft Access и запустить его. Microsoft Access может быть запушен из списка недавно использовавшихся программ, также представленного в меню Пуск. Появившееся после запуска окно Microsoft Access, размер которого меньше полного экрана, представлено на рис. 1.8. Для быстрого запуска Access удобно иметь ярлык этой программы на рабочем столе Windows. Создать ярлык можно разными способами. Например, выберите программу Microsoft Access, как при ее запуске. Нажмите правую кнопку мыши. В контекстном меню выберите команду Отправить и в ее меню выполните команду Рабочий стол (создать ярлык). Ярлык будет создан и отобразится на рабочем столе в виде, представленном на рис, 1.9.
Рис. 1.9. Ярлык для запуска Access
Теперь запуск Access может быть выполнен щелчком мыши на ярлыке.
Окно Access Рассмотрим основные элементы окна Access.
Строка заголовка окна В строке заголовка (см. рис. 1.7) содержится кнопка системного меню, название- приложения — Microsoft Access — и три кнопки, управляющие представлением окна на экране. Кнопка Свернуть (Minimize) (l~J) позволяет свернуть окно Access, после чего Access наряду с другими выполняющимися программами представляется только в виде кнопки на панели задач Windows (рис. 1.10).
Рис. 1.10. Панель задач Windows
Глава 1. Введение в Access
39
В свернутом окне Access продолжает работать, и достаточно нажать его кнопку на панели задач, чтобы вернуть окно на экран. Кнопка Развернуть (Maximize) (И) в окне неполноэкранного размера юзволяет развернуть окно на весь экран. Кнопка Закрыть (Close) (I2SJI) позволяет закрыть окно. При этом работа Access завершается. В полноэкранном окне кнопка Развернуть (Maximize) заменяется кнопкой Восстановить (Restore) (ШУ1), которая позволяет уменьшить размер окна до размера, предшествующего развертыванию его на весь экран. Системное меню может открываться щелчком мыши на соответствующей кнопке в строке заголовка, а также нажатием клавиш <А11>+<Пробел> пли
+<—>. Его команды могут использоваться для управления размерами окна, его положением на экране с помощью клавиатуры. Системное меню содержит команду, позволяющую закрыть приложение.
Строка меню Строка меню включает несколько пунктов, каждый из которых содержит собственное выпадающее меню, открываемое щелчком м ы ш и на этом пункте. Выпадающее меню содержит список команд Access. Команды определяют операции, позволяющие пользователю выполнять нужную работу в диалоговом режиме. Многофункциональная система Access имеет несколько рабочих режимов. Каждый режим Access обеспечивается своей строкой ченю и соответственно своим набором команд, представляющим всю его функциональность.
Панели инструментов Панель инструментов состоит из значков-кнопок, представляющих наиболее часто используемые команды из меню. Кнопки панели позволяют выполнить, не обращаясь к командам, те же операции, но более быстрым и удобным способом. Набор команд и их графических представлений на панели инструментов является основой интерфейса пользователя, который позволяет в диалоговом режиме выполнить работы в среде Access. Чтобы просмотреть название кнопки на панели инструментов, задержите указатель м ы ш и на нужной кнопке, пока не отобразится ее название. Устанавливая курсор на кнопках, с помощью всплывающих подсказок можно найти нужную операцию. Для того чтобы начать ее выполнение, достаточно щелкнуть на кнопке мышью. Access имеет набор встроенных панелей инструментов, обеспечивающий удобный интерфейс пользователя при выполнении работ в каждом из режи-
ю
Часть I. Основы технологии Microsoft Access
мов базы данных. Эти панели выводятся в окне Access по умолчанию в соответствии с текущим режимом работы. Например, сразу после запуска Access (см. рис. 1.8) выводится панель инструментов База данных (Database). Панель, так же как и меню, может быть перемешена курсором мыши в любое место экрана. Установите курсор мыши на рамку панели слева, где курсор примет вид пересекающихся двунаправленных стрелок, и, нажав кнопку мыши, перетащите панель в нужное место. При этом она представляется отдельным окном (рис. 1.11), которое может находиться в любом месте экрана. Добавить или удалить кнопки -
Добавить или удалить кнопки -
-
Ваза данных
Создать,..
Ctrl+N
Настройка..,
Открыть. , .
Ctrl+0
Сохранить
Ctrl+5
Поиск фай лов,., Печать Предварительный просмотр
F7
Орфография... Вырезать Копировать
Ctrl+C
Вставить
CtH+V
Отменить Связи с Office
V
Анализировать Программа Редактор сценариев Свойства
Alt+Shift+Fl t AIM-ENTER
Схема данных... Создать объект Справка: Microsoft Office Access Ft
-
Импорт,.. Связь с таблицами. , . Сброс панели
Рис. 1.11. Окно панели инструментов База данных и список ее команд
Глава 1. Введение в Access
41
В заголовке окна панели находятся название панели и кнопка, которая открывает доступ к команде Добавить или удалить кнопки (Add or Remove Buttons). С помощью этой кнопки открывается список доступных для этой панели команд (рис. 1.11). Двойной щелчок мыши на заголовке перемещенной панели возвращает ее на первоначальное место. В каждом режиме доступно несколько панелей инструментов. Просмотреть список доступных в текущем режиме панелей и вывести нужные на экран можно через контекстное меню, открывающееся щелчком правой кнопки мыши на строке меню или любой выведенной на экран панели. Список доступных панелей инструментов можно получить и по команде Вид|Панели инструментов (View|Toolbars). Команда Настройка (Customize) в списке панелей инструментов открывает окно настройки, в котором на вкладке Панели инструментов (Toolbars) представлен список всех панелей Access, в том числе и созданных пользователем (рис. 1.12). Для вывода нужной панели на экран достаточно отметить галочкой ее строку. Настройка Панели инструментов
Команды
Параметры
Панели инструментов: База данных Г™ Веб-узел Г" Выравнивание и размер Г Запрос в режиме таблицы Р Конструктор запросов Г" Конструктор макросов Г" Конструктор отчетов Г"° Конструктор таблиц Г~ Конструктор форм Г" Контекстные меню Г" Макет страницы Г? Область задач Г" Панель элементов Г" Предварительный просмотр Г" Работа с исходным текстом Г" Разметка страницы
Создать..
Рис. 1.12. Окно выбора и настройки панелей инструментов
В любой момент пользователю предоставляется возможность настроить панели инструментов по своему усмотрению — изменить состав и вид кнопок на панели.
Часть I, Основы технологии Microsoft Access
Настройка производится в соответствующем окне на вкладке Команды (Commands) (рис. 1.13). На вкладке выбирается категория команд, из которой выбирается команда для добавления на панель. Затем кнопка команды перетаскивается на панель инструментов. Заметим, что панель инструментов, на которую нужно перенести кнопку, должна быть выведена в окне Access. Важно также, чтобы в режиме, для которого предназначена эта панель, могла выполняться функция, реализуемая кнопкой. Для удаления кнопки с панели ее нужно переместить в группу кнопок одной из категорий окна настройки. База данным
Настройка Панели инструментов
Команды
Параметры |
Чтобы добавить команду на панель инструментов, выберите категорию и перетащите команду из этого окна на панель. Категории: Файл * 2MMWHM НинЯШЯВ-'- ШШЗ Г^ Зид Вставка Режим таблицы Записи Сводная таблица и дмОкна и справка <онструктор таблиц Конструктор запросов.^
Команды:
3
i^j' Вставить . Специальная вставка, , . .;
I Вставить как гиперссылку i Добавить из буфера _*г Буф-ер обмена Office, . , п
а , Дублировать
Изменить выделенный объект * 1
;
Упорядочить команды...
Закрыть
Рис. 1.13. Диалоговое окно настройки открытых панелей инструментов
Выбрав нужную кнопку на панели инструментов или в окне настройки, можно получить ее описание, нажаи соответствующую кнопку на вкладке Команды. Кнопка Изменить выделенный объект (Modify Selection) становится доступной только после выбора одной из кнопок, размещенных на панели инструментов. По щелчку по этой кнопке открывается список возможных преобразований кнопки. При этом можно изменить текст всплывающей подсказки кнопки, выбрать новый значок, отображаемый на ней, отредактировать вид значка, изменить свойства кнопки и т. д.
Глава 1. Введение в Access
43
Внимание Для того чтобы на панелях инструментов отображались всплывающие подсказки кнопок, в окне Настройка (Customize) на вкладке Параметры (Options) должен быть установлен флажок Отображать подсказки для кнопок (Show Screen Tips on toolbars).
Для большинства компонентов Access щелчком правой кнопки мыши может быть вызвано динамическое контекстное меню, содержащее наиболее часто используемые команды.
Область задач В окне Access вне зависимости от режима работы, как и в других приложениях Microsoft Office, доступна панель, называемая областью задач. Область задач содержит часто используемые команды. Область задач Приступая к работе открывается уже при запуске Access (см. рис. 1.8).
Замечание Если нужно отключить вывод области задач при запуске, выполните команду Сервис|Параметры (ToolsjOptions). На вкладке Вид (View) окна Параметры в группе Отображать снимите флажок область задач при запуске.
В Access доступны следующие области задач: Приступая к работе, Справка Access, Поиск, Обычный и расширенный поиск файлов. Буфер обмена, Создание файла, Справка по шаблону и Зависимости объектов. Кнопка в заголовке области задач обеспечивает их переключение. Область задач может быть отображена на экране в любой момент, например, через контекстное меню панелей инструментов.
Строка состояния Строка состояния предназначена для вывода текста сообщения, связанного с текущим режимом, состоянием объекта, выполняющейся программой. Сообщение Готово (Ready) означает, что Access готов принять команду пользователя. В клетках, представленных в правой части строки состояния, отображается состояние клавиш , , <ScrollLock> и некоторые режимы.
Диалоговые окна Выполнение практически любой команды начинается с вывода диалогового окна, которое позволяет уточнить операцию, передать параметры для выполнения запрашиваемой команды. При открытом диалоговом окне нельзя перейти к выполнению других действий в данном приложении. Диалоговое окно имеет постоянные размеры, но может быть перемещено в другое место.
'
Часть I. Основы технологии Microsoft Access
Окно базы данных После запуска Microsoft Access в его окне выводится область задач Приступая к работе, позволяющая открыть существующую базу данных или перейти в область задач Создание файла, в которой \южно начать создание новой базы данных (см. рис. 1.8). Открыть существующую базу данных можно, выбрав ее из списка в области задач. Список содержит базы данных, которые открывались последними. Кроме того, список включает строку Дополнительно, щелчок на которой приводит к выводу окна Открытие файла базы данных. Открыть базу данных можно и с помощью команды меню Файл|Открыть (FilejOpen) или кнопки Открыть (Open) на панели инструментов. Окно открытой базы данных представлено на рис. 1.14. Ярлыки создания новых объектов
Кнопки выбора режима работы с объектом
I
таблицы в режиме конструктора Создание таблицы с помощью мастера Создание таблицы путем ввода данных
Панель объектов базы данных
БАНК ВЫТИСКА ДОГОВОР ЗАКАЗЧИК
Значки таблиц
Мак рисы Модули
Гру ты
ОТГРУЗКА
Область размещения списка объектов
ПГЦТОРУЧЕНИЕ ПОСТАВКА_ППАН СКЛАД
Избранное Архивная
Рис. 1.14. Окно базы данных Access
Все операции по обработке объектов базы данных начинаются в окне базы данных.
Глава 1. Введение в Access
45
Окно базы данных, как и окно Access, имеет строку заголовка, содержащую слева кнопку системного меню, название - <омя БД>: база данных (Database) и справа три кнопки управления размерами окна. Поскольку Access может работать с базами данных в формате предыдущих версий, в строке заголовка указывается формат. В левой части окна базы данных представлен список всех типов объектов Объекты (Objects), которые могут создаваться в базе данных Access: Таблицы (Tables), Запросы (Queries), Формы (Forms), Отчеты (Reports), Страницы (Pages), Макросы (Macros), Модули (Modules). Кроме того, здесь размещается раздел Группы (Groups). Изначально в разделе Группы (Groups) существует единственная группа Избранное (Favorites). Возможно создание пользовательских групп объектов. Группы позволяют в больших БД объединить объекты одной темы. В группах сохраняются ссылки на объекты различных типов. Для создания новой группы необходимо нажать правую кнопку на строке группы Избранное (Favorites) и выбрать из контекстного меню команду Новая группа (New Groups), Для внесения объектов в грУ п п У выделяется нужный объект, вызывается контекстное меню, выбирается команда Добавить в группу (Add to Group) и в ней группа, в которую включается объект. Объект представляется в группе ярлыком, ссылающимся на включенный в группу объект. При выполнении этой команды также можно создать новую группу. Рабочее поле окна базы данных предназначено для отображения списка объектов выбранного типа. Кроме того, здесь размещены ярлыки, предоставляющие возможность сразу приступить к созданию объекта в основных режимах. В верхней части окна представлены кнопки выбора режима работы с объектом: П первой является либо кнопка Открыть (Open), если выбрана таблица, запрос, форма или страница, либо кнопка Просмотреть (Preview), если выбран отчет, либо кнопка Запустить (Run), если выбран макрос или модуль; G вторая кнопка Конструктор (Design) позволяет перейти в режим доработки любого ранее созданного объекта; О третья кнопка Создать (New) позволяет приступить к созданию нового объекта любого выбранного типа. Остальные кнопки панели инструментов окна базы данных предназначены для удаления выбранного объекта и выбора вида отображения объектов в окне. При создании объекта предоставляется возможность выбора режима его разработки. Это может быть мастер, конструктор или некоторый другой режим, зависящий от выбранного типа объекта.
46
'
Часть I. Основы технологии Microsoft Access
При открытии окна базы данных (см. рис. 1.14) по умолчанию выводится панель инструментов База данных (Database). Эта же панель инструментов выводится в окне Access до открытия базы данных, но тогда большинство ее кнопок являются недоступными.
Справка Access Справочная система Access позволяет получить недостающие сведения и ответы на возникающие в ходе работы вопросы несколькими способами. Электронный справочник Access, так же как справочники других приложений Microsoft Office и самой операционной системы Windows, имеет гипертекстовую структуру. Верхним уровнем этого гипертекстового документа является оглавление. Справочной системой обеспечивается несколько вариантов поиска по ключевым словам и подготовка списка разделов, отвечающих на введенный запрос. Чтобы быстро получить справку по возникшему вопросу, воспользуйтесь полем Введите вопрос в строке меню. Результатом поиска ответа на введенный вопрос является список гиперссылок, представленный в области задач Поиск. Ответы представлены в порядке релевантности, т. е. первым отображается наиболее подходящий ответ на вопрос. Выбор любой из гиперссылок приводит к открытию содержимого раздела в окне справки. Поиск ответа на вопрос производится в автономной справке. Если вы подключены к Интернету, в области задач Поиск могут быть выбраны другие разделы для поиска, размещенные на Web-узле www.Microsoft.com. Для получения доступа к основным возможностям справочной системы Access предназначена команда меню Справка|Справка: Microsoft Access Fl (HelpjMicrosoft Access Help Fl). Выполнение этой команды приводит к открытию области задач Справка Access. Здесь можно осуществить поиск разделов автономной справки по ключевым словам. Ввод дополнительных ключевых слов сужает список найденных разделов. В этой области задач может быть осуществлен переход к просмотру оглавления автономной справочной системы. Выбор гиперссылки оглавления приводит к отображению содержимого раздела в отдельном окне справки. Окно справки имеет кнопки перехода вперед и назад по просмотренным разделам и кнопку, вывода раздела на печать (рис. 1.15). Если на компьютере установлено подключение к Интернету, в области задач Справка Access отображаются ссылки на ресурсы Web-узла Microsoft Office Online. Этот Web-узел обеспечит доступ к статьям, советам, коллекциям картинок, шаблонам, интерактивным средствам обучения, файлам для загрузки и службам. Предлагаемые курсы обучения включают в себя изучение возможностей и обучение эффективному использованию продуктов Office. Небольшие курсы
Глава 1. Введение в Access
'
по 20—50 минут для самостоятельного обучения со звуком, графическими и анимационными возможностями позволяют приобрести практические павы ки работы.
: Файл
Правка
Вставка
Сервис
"~
С_кно
Справка .I_-*jiV ! • • Справка Access
Про с мо тр и т е ин тер акти вне е or п ав ле ни е, (&й Дополнительные сведение
Базы данных Access База данных —это набор сведений, относящихся к определенной теме или задаче, такой как отслеживание заказов клиентов или хранение коллекции звукозаписей, Если база данных хранится не на компьютере или на компьютере хранятся только ее части, приходится отслеживать сведения из целого рада других источников, которые пользователь должен скоординировать и организовать самостоятельно. Предположим, например, что телефоны поставщиков сохраняются в разных местах: в катапоге телефонов поставщиков, в картотеке сведений о товарах и в электронной таблице, содержащей сведения о заказах, Если телефон поставщика изменился, придется обновить эти данные в трех местах. В базе данных достаточно обновить информацию только в одном месте — телефон поставщика будет автоматически обновлен при его дальнейшем использовании в базе данных.
Оглавление ^Запуск и параметры •*( Печать файлов
*
^Создание баз данных и объектов "и работа с i -1^'Базы данных Access >i>i Разработка базы данных ^Создание базы данных Microsoft Access ^Улучшение производительности базы дан» ^Использование анализатора быстродейсп -г/Р'абота с файлами Microsoft Access •^Преобразование баз данных Microsoft Ассе f Объекты баз данных : И Работа с элементами управления и диагра •м»? Просмотр сведений о зависимости -•;#? Поиск ошибок в формах и отчетах ^Работа с окном базы данных •Vf Разрешение вопросов, связанных с базами -$•'Работа с данными
> Файлы баз данных Microsoft Access k Таблицы и связи !> Запросы )• Формы ^ Отчеты * Страницы доступа к данным
Рис. 1.15. Область задач с оглавлением справки и окно справки
Для загрузки через Интернет на Web-узле доступны многочисленные технические файлы, в том числе драйверы устройств, пакеты обновлений продуктов, файлы с исправлениями, а также полные продукты. Узел регулярно обновляется, а содержание узла формируется на основе обратной связи и определенных запросов пользователей Office.
48
Часть I. Основы технологии Microsoft Access
Если необходимые справочные сведения не найдены, можно отправить запрос или отзыв, воспользовавшись ссылкой Свяжитесь с нами в области задач Справка Access или подключившись к Web-узлу Microsoft Office Online. Для получения справки можно воспользоваться и помощником, который отображается на экране командой Показать помощника из меню Справка. Двойным щелчком на помощнике открывается возможность для ввода вопроса. Сформулировав помощнику вопрос, вы так же, как и в предыдущих случаях, получите в области задач Поиск список ссылок на подходящие разделы автономной справки. Щелкнув на одной из них, вы откроете справку на соответствующей странице. Чтобы временно скрыть помощника, выполните в меню Справка команду Скрыть помощника. Для отключения помощника на весь сеанс работы в Access выполните в контекстном меню помощника команду Параметры и на вкладке Параметры снимите флажок Использовать помощника. При многократном повторении команды помощник вступает в диалог с пользователем, выдавая выноску, представленную на рис. 1.16. Здесь также можно отключить помощника. Чтобы Езернуть помощника, выберите команду Показать помощника.
Отключение помощника по Office. Ц^ Вы скрыли меня несколько раз подряд. Вы хотите отключить меня совсем или просто скрыть еще раз? * Нет, просто скрыть меня; в Да, отключить меня
Рис. 1.16. Выноска помощника при повторении действий
Легкодоступные подсказки также помогут пользователю при работе в Access. Чтобы получить подсказку к параметру диалогового окна, нажмите в диалоговом окне кнопку с вопросительным знаком, а затем щелкните по нужному параметру. Чтобы просмотреть название кнопки на панели инструментов, задержите указатель мыши на нужной кнопке, пока не отобразится всплывающая подсказка.
Глава 1. Введение в Access
49
Контрольные вопросы 1. Изменяются ли строка меню и набор его команд при изменении режима базы данных Access? 2. Для чего предназначена панель инструментов? 3. Какие панели инструментов выводятся по умолчанию? 4. Как просмотреть список доступных в текущем режиме панелей инструментов? 5. Можно ли управлять выводом панелей инструментов и набором кнопок на них? 6. Как получить всплывающую подсказку для кнопки панели инструментов? 7. Какая команда позволяет изменить состав кнопок на панели инструментов? 8. В каком случае всплывающие подсказки не отображаются для кнопок? Ответы
1. Да. 2. Для более удобного и быстрого выполнения часто используемых команд меню. 3. Соответствующие режиму работы. 4. Шелкнув правой кнопкой мыши на панели инструментов или меню.
5. Да. 6. Переместить на кнопку курсор. 7. Настройка. 8. Если в параметрах настройки не установлен флажок Отображать подсказки для кнопок.
Глава 2
Проектирование реляционной базы данных База данных Access является реляционной базой данных. Такая база данных состоит из взаимосвязанных реляционных таблиц. На этапе проектирования базы данных должна быть определена логическая структура базы данных для выбранной предметной области. Проект логической структуры БД устанавливает состав реляционных таблиц, их структуру и логические связи между таблицами. При формировании структуры каждой таблицы определяется совокупность полей (столбцов), для каждого из которых даются описание типа, размера данных и других свойств. Кроме того, должен быть указан уникальный ключ таблицы, который может состоять из одного или нескольких полей. При проектировании базы данных, отвечающей требованиям нормализации, между таблицами определяются логические связи типа 1:М. Такие связи позволят осуществлять в Access автоматическое поддержание связной целостности и непротиворечивости данных в базе.
Этапы проектирования и создания базы данных Для проектирования базы данных необходимо располагать описанием выбранной предметной области, которое должно охватывать реальные объекты и процессы, определять все необходимые источники информации для обеспечения предполагаемых запросов пользователя и решаемых в приложении задач. Следует заметить, что чаще всего базы данных создаются средствами СУБД в области организационно-экономического управления. Определение состава и структуры данных, которые должны быть загружены в базу данных, осуществляется на основе анализа предметной области. Структура данных предметной области может отображаться информационнологической моделью (ИЛМ). Если при построении такой модели обеспечены требования нормализации данных и она соответственно представлена в каноническом виде, далее легко определяется проект логической структуры
Глава 2. Проектирование реляционной базы данных
5,7
нормализованной базы данных. На основе канонической модели можно создать реляционную базу без дублирования данных. При разработке модели данных предметной области могут использоваться два подхода. В первом подходе (аналитическом или процессном) сначала формулируются основные задачи, для решения которых строится база, выявляются информационные потребности задач приложения пользователя, и соответственно определяются состав и структура информационных объектов модели, а также связи между ними. При втором подходе (интуитивном) сразу устанавливаются типовые объекты предметной области и их взаимосвязи. Наиболее рационально сочетание обоих подходов. Это связано с тем, что на начальном этапе, как правило, нет исчерпывающих сведений обо всех задачах. Использование такой технологии тем более оправдано, что гибкие средства создания реляционной базы данных в Access позволяют на любом этапе разработки внести изменения в базу данных и модифицировать ее структуру без ущерба для введенных ранее данных. Этапы проектирования и создания базы данных Access иллюстрирует схема, приведенная на рис. 2.1. П
р
о е к г с 0 3
д а н и Р
Построение модели данных предметной области
Документы гЕ:А предметной ml] области
RP
илм у /
Проект структур таблиц базы данных 1 Л. ..!_.. 1.. 1
_ _
f i l l
Связи таблиц базы данных CIJ.:X.I 1 т 1 1
—
Определение структуры реляционной базы данных
Конструирование таблиц базы данных в Access
-
.ч • .
Создание схемы данных в Access
Таблицы базы данных 1°-ДГ"| В Access
г-» Ввод данных Исходные данные
Н»
в таблицы /создание записей/
RP If Проект структуры базы данных
1 1 1 I I l"'"l Т' 1 ' * ' -'JJ
Пустые таблицы базы данных (°Д~| а Access
Схема данных в Access
Записи I-— i в таблицах
Рис. 2.1. Этапы проектирования и создания базы данных Access 3 Зак. 835
52
Часть I. Основы технологии Microsoft Access
В процессе разработки канонической модели данных предметной области для проектирования реляционной базы данных необходимо выделить информационные объекты (ИО), соответствующие требованиям нормализации данных, и определить связи между ИО с типом отношений один-ко-многим (1:М). При определении проекта логической структуры реляционной базы данных каждый информационный объект канонической модели предметной области адекватно отображается реляционной таблицей, а связям между информационными объектами соответствуют логические связи между парой соответствующих таблиц. Такие связи устанавливаются по уникальному ключу одной из этих таблиц, которая является главной в связи. Во второй таблице, которая является подчиненной, поле связи может быть либо частью ее уникального ключа, либо быть неключевым. В процессе создания базы данных на компьютере сначала осуществляется конструирование ее таблиц средствами Access. Далее создается схема данных, в которой устанавливаются логические связи таблиц. В схеме данных базы могут быть заданы параметры поддержания связной целостности данных, если модель данных была разработана в соответствии с требованиями нормализации. Связная целостность данных означает, что в базе данных установлены и корректно поддерживаются взаимосвязи между записями разных таблиц при загрузке, добавлении и удалении записей в связанных таблицах, а также при изменении значений ключевых полей. При обеспечении связной целостности в подчиненной таблице не может существовать запись, для которой отсутствует связанная запись в главной таблице. После формирования в Access схемы данных можно приступать к вводу данных в базу — загрузке с документов предметной области, являющихся источниками данных. В практических приложениях пользователя обычно не используется ввод непосредственно в таблицы, а применяются создаваемые специально экранные формы, выполняющие роль интерфейса пользователя. Проектирование базы данных, основанное на построении нормализованной модели данных предметной области, позволяет легко получить логическую структуру реляционной базы данных Access, в которой автоматически поддерживается целостность и непротиворечивость данных.
Построение информационно-логической модели данных Информационно-логическая модель (ИЛМ) отображает данные предметной области в виде совокупности информационных объектов (ИО) и связей между ними. Эта модель представляет данные, подлежащие хранению в базе
Глава 2. Проектирование реляционной базы данных
данных. Каждый информационный объект в модели данных должен иметь уникальное имя.
Информационные объекты Информационный объект — это информационное описание некоторой сущности предметной области: реального объекта, процесса, явления или события. Информационный объект является совокупностью логически взаимосвязанных реквизитов, представляющих качественные и количественные характеристики сущности. Примерами сущностей являются: товар, поставщик, заказчик, поставка, отгрузка, сотрудник, отдел, студент, преподаватель, кафедра и т. п. Информационный объект имеет множество реализаций — экземпляров объекта. Например, каждый экземпляр информационного объекта ТОВАР содержит значения реквизитов по товару определенного наименования. Экземпляр объекта должен однозначно определяться среди всего множества экземпляров, т. е. идентифицироваться значением уникального (первичного) ключа информационного объекта. Уникальность ключа означает, что любое значение ключа не может повториться в каком-либо другом экземпляре объекта. Простой ключ состоит из одного реквизита. Составной ключ — из нескольких реквизитов. Таким образом, реквизиты информационного объекта подразделяются на ключевые и описательные, которые являются функционально зависимыми от ключа. Функциональные зависимости реквизитов. Информационные объекты могут быть выделены на основе описания предметной области путем определения функциональных зависимостей между реквизитами предметной области. Функциональная зависимость реквизитов информационного объекта устанавливает соответствие значений ключевых (определяющих) и неключевь:х (определяемых) реквизитов. Необходимость установления функциональных зависимостей связана с требованием баз данных по однозначной определяемое™ любых данных для их размещения и доступа к ним. Например, для однозначной и полной определяемости реквизита количество в поставке товара нужно указать, что поставляется, т. е. товар (его идентификатор), нужно указать, кем поставляется, т. е. поставщика (его идентификатор). Если возможны поставки одного товара поставщиком в разные сроки, то нужно также указать, когда осуществляется поставка, т. е. принять срок поставки как определяющий поставку. Если не будет выявлена полная функциональная зависимость, количество поставки останется не определенным однозначно. Например, если в функциональных зависимостях количества поставки не определен срок поставки, то нельзя отличить друг от друга несколько поставок одного и того же товара одним и тем же поставщиком, но в разные сро-
Часть I. Основы технологии Microsoft Access
54
ки. В этом случае имеет место неполная идентификация поставки на этапе проектирования. После реализации проекта это приведет к возможности загрузки в базу данных сведений о количестве только по одной поставке (первой введенной), т. к. для одного значения идентификатора код товара + + код поставщика в БД, т. е. одного товара и одного поставщика, может быть введено одно значение количества поставляемого. Наглядная иллюстрация этой ситуации, когда срок поставки не указан как ключевой (определяющий поставку), представлена в табл. 2.1. Таблица 2.1. Пример идентификации поставок товаров Реквизит
Код товара
Код поставщика
Роль в функциональной зависимости
ключевой
ключевой
Срок поставки
Количество поставки
Результат в БД
зависимый
Идентификатор поставки Поставка 1
Т1
П1
февраль
Н)
Введена
Поставка 2
Т1
П1
апрель
20
Не введена
(
Замечание"~~ ^
При выявлении функциональных зависимостей реквизитов не рассматриваются арифметические зависимости (например, стоимость от количества), поскольку устанавливается только функциональная зависимость, определяющая логические связи описательных и ключевых реквизитов.
При графическом изображении модели данных каждый информационный объект представляется прямоугольником с обозначением его имени и идентификатора — ключа. Пример такого изображения для информационных объектов ТОВАР и ПОСТАВКА показан на рис. 2.2. Здесь код_т (код товара) простой ключ объекта ТОВАР, а кодт + кпост (код поставщика) + СРОКП (срок поставки) — составной ключ объекта ПОСТАВКА.
ПОДСТАВКА КОДТ + КПОСТ + СРОКП
Рис. 2.2. Пример графического изображения информационных объектов с простым и составным ключами
Глава ^Проектирование реляционной базы данных
55
Требования нормализации. Реквизиты каждого информационного объекта канонической модели данных должны отвечать требованиям, соответствующим третьей нормальной форме реляционной модели данных: О информационный объект должен содержать уникальный идентификатор — ключ; О все описательные реквизиты должны быть взаимонезависимы, т. е. между ними не должно быть функциональных зависимостей; О все реквизиты, входящие в составной ключ, также должны быть взаимонезависимы; П каждый описательный реквизит должен функционально полно зависеть от ключа, т. е. каждому значению ключа должно соответствовать только одно значение описательного реквизита, а при составном ключе описательные реквизиты должны зависеть целиком от всей совокупности реквизитов, образующих ключ; О каждый описательный реквизит должен зависеть от ключа нетрапзитиено, т. е. не должен зависеть через другой промежуточный реквизит. (~
Замечание
^
В случае транзитивной зависимости между реквизитами информационного объекта можно выполнить расщепление совокупности реквизитов с образованием двух информационных объектов вместо одного.
Выполнение требований нормализации обеспечивает построение канонической модели данных и создание на ее основе реляционной базы данных без дублирования описательных данных, а также возможность автоматического поддержания связной целостности данных средствами СУБД при обноапении базы данных — добавлении и удалении записей, изменении значений в ключевых полях.
Выделение информационных объектов предметной области Процесс выделения информационных объектов предметной области, отвечающих требованиям нормализации, может производиться на основе интуитивного или формального (аналитического) подхода. При интуитивном подходе сразу легко могут быть установлены информационные объекты, соответствующие реальным объектам. Однако получаемая при этом информационно-логическая модель, как правило, требует дальнейших преобразований, в частности, преобразования много-многозначных связей между объектами. При отсутствии достаточного опыта использования такого подхода возможны существенные ошибки. Последующая проверка выполнения требований
56
Часть I. Основы технологии Microsoft Access
нормализации обычно показывает необходимость уточнения структуры информационных объектов. Теоретические основы аналитического полхода были разработаны и полно изложены известным американским ученым Дж. Мартином в его монографиях по организации баз данных. При аналитическом подходе в ходе исследования предметной области сначала необходимо выявить совокупность данных и различных сведений об объектах и процессах, характеризующих данную область, перечень документов, содержащих эти данные, а также комплекс задач и запросов, которые предполагается реализовать. Таким образом, определению структуры базы данных предшествует выявление информационных потребностей. Основным источником данных являются справочные, плановые и оперативно-учетные документы. На основе исследования составляется описание предметной области и документов, данные из которых нужно разместить в базе. Далее выполняется информационный анализ предметной области с целью формализации и моделирования данных. Такая формализация необходима для их организации и обработки данных во внутримашинной сфере. При этом должен быть произведен семантический анализ данных и на его основе выявлены информационные объекты и логические взаимосвязи. В результате данные будут структурированы.
Информационный анализ и определение логической структуры информации Информационный анализ включает: П структурирование информации предметной области; "3 формализацию и моделирование данных. Структура информации внемашинной сферы находит отражение в ее представлении отдельными структурными единицами — реквизитами, их группировке в доку ментах-источниках и упорядочении по классификационным признакам. Структурирование информации. Организационно-экономическая информация, которая, как правило, размещается в базах данных, имеет дискретный характер, и поэтому может быть структурирована, т. е. представлена как совокупность отдельных структурных единиц информации. Определим важнейшие виды структурных единиц информации; О реквизит — простейшая структурная единица информации, неделимая на смысловом уровне, отражающая количественную или качественную характеристику сущности (объекта, процесса и т. п.) предметной области.
Глава 2. Проектирование реляционной базы данных
Можно выделить реквизиты-признаки и реквизиты-основания: • реквизит-признак позволяет выделить (идентифицировать) объект из множества однотипных объектов (как правило, символьное представление); • реквизит-основание содержит количественную характеристику объекта, процесса или другой сущности, определяющую их состояние (как правило, числовое значение). Например, в плане поставок товаров реквизиты-признаки идентифицируют поставку, а реквизиты-основания определяют количество поставляемого товара, его стоимость; С] составная единица информации (СЕЙ) — логически взаимосвязанная совокупность реквизитов. Документ является примером составной единицы информации. Семантика и размещение реквизитов в форме документа определяют роль реквизитов в структуре информации, содержащейся в документе. В процессе информационного семантического (смыслового) анализа нужно выявить функциональную зависимость реквизитов и определить реквизитный состав информационных объектов. Для минимизации возможных ошибок целесообразно производить семантический анализ по каждой из форм документов в отдельности. Это связано с тем, что форма внемашинного документа уже отображает структуру данных, т. к. любой документ объединяет логически взаимосвязанные реквизиты. Функциональную зависимость реквизитов можно изобразить графически в виде линий со стрелками, идущих от ключевого (определяющего) реквизита к описательному реквизиту (определяемому). Ключевой реквизит обычно отмечается особо. Функциональную зависимость удобно отображать непосредственно в таблице, где представлен состав реквизитов каждого документа. Это показано на примере реквизитов документа "Справочник товаров" (рис. 2.3), где каждый из описательных реквизитов однозначно определяется ключевым реквизитом Код товара. Наименование реквизита
Имя реквизита
Код товара Наименование Цена за единицу Единица измерения
KODT NAIM CENA EI
Функциональные зависимости
Рис. 2.3, Функциональная зависимость реквизитов документа "Справочник товаров"
58
Часть I. Основы технологии Microsoft Access
Правила выделения информационных объектов На основе описания предметной области необходимо выявить документыисточники и их реквизиты, подлежащие хранению в базе данных. Затем надо перейти к информационному анализу этих документов для выявления информационных объектов. Рассмотрим формальные правила, которые могут быть использованы для выделения информационных объектов, отвечающих указанным ранее требованиям нормализации. 1. Определяются функциональные зависимости между реквизитами документа. Для этого анализируется роль реквизитов в структуре информации документа. Сначала целесообразно выявить реквизит (один или несколько), который выполняет роль общего идентификатора всей информации документа. Как правило, к таким реквизитам относятся номер документа, идентификатор подразделения (предприятия), выпускающего документ, период действия оформления документа и т. п. От такого идентификатора документа будут функционально полно зависимыми некоторые описательные реквизиты в общей части документа (например, идентификатор предприятия, документа основания). Другие реквизиты-основания в табличной части документа (например, количество товара и стоимость) будут частично функционально зависимыми от него. Все справочные реквизиты реальных объектов (товаров, предприятий, подразделений и т. п.), как в общей, так и в табличной части функционально полно определяются идентификаторами этих объектов. В результате для каждого определяемого реквизита должны быть выявлены реквизиты (ключевые), которые в совокупности однозначно его определяют (одному значению ключа соответствует одно значение описательного реквизита). Лля графического отображения функциональной зависимости проводится линия связи со стрелкой к зависимому реквизиту от определяющего его реквизита. 2. В результате просмотра выявленных функциональных зависимостей выбираются все зависимые реквизиты и для каждого из них устанавливаются все его ключевые реквизиты, т. е. те (один или несколько), которые в совокупности определяют его однозначно. Такое соответствие описательных и ключевых реквизитов удобно представить в таблице, форма которой с примером заполнения представлена в табл. 2.2.
Глава 2. Проектирование реляционной базы данных Таблица 2.2. Соответствие описательных и ключевых реквизитов Описательные (эависисмые) реквизиты
Ключевые реквизиты
Признак ключа
Имя ИО,
Количество поставки
Код товара Код поставщика Срок поставки
Уникальный составной
ПОСТАВКА
Наименование товара
Код товара
Уникальный простои
ТОВАР
Наименование поставщика
Код поставщика
Уникальный простои
ПОКУПАТЕЛЬ
включающего реквизиты
,
3. Группируются реквизиты, одинаково зависимые от ключевых реквизитов. Полученные группы зависимых реквизитов вместе с их ключевыми реквизитами образуют реквизитный состав соответствующих информационных объектов. Если в группе несколько ключевых реквизитов, то они являются составным ключом информационного объекта. При использовании приведенных правил не требуется отдельно преобразовывать транзитивные зависимости реквизитов. При такой зависимости некоторые реквизиты являются одновременно зависимыми и ключевыми и соответственно будут представлены в группе зависимых и ключевых. После выделения информационных объектов необходимо сформировать их окончательное описание. В таком описании кроме состава реквизитов и указания ключа может быть представлена также семантика информационных объектов — их смысловое определение.
Замечание Как правило, при использовании приведенных правил сразу оказываются выделенными объекты, выполняющие роль связки между объектами, находящимися в отношении мнргие-ко-многим (M:N). Соответственно, в модели можно ограничиться рассмотрением только одно-многозначных связей. Совокупность выделенных информационных объектов после определения связей между объектами позволяет получить информационно-логическую модель, не требующую дальнейших преобразований для создания реляционной базы данных, отвечающей требованиям нормализации.
Выделение информационных объектов на примере предметной области "Поставка товаров" Рассмотрим выделение информационных объектов на примере предметной области "Поставка товаров".
••
Часгь /. Основы технологии Microsoft Access
Описание предметной области Пусть необходимо построить базу данных, содержащую информацию о планируемых поставках товаров покупателям и фактических отгрузках товаров в соответствии с планом поставок. Такая база данных должна обеспечить подготовку, хранение и просмотр данных по договорам с покупателями, фактическим отгрузкам товаров, по анализу выполнения договорных обязательств на поставку по срокам и объемам. Информационное обеспечение такого приложения пользователя включает: П справочную информацию о поставляемых товарах; О справочную информацию о покупателях (заказчиках); П справочную информацию о складах предприятия, где хранится товар; О данные о плановых поставках товаров; 3 оперативно-учетные данные об отгрузках товаров со складов покупателям. В результате анализа предметной области выявляются документы-источники для создания базы данных. Справочная информация содержится в документах "Справочник товаров", "Справочник покупателей", "Справочник складов". На рис. 2.4, 2.5, 2.6 приведены формы этих документов. СПРАВОЧНИК ТОВАРОВ, ПОСТАВЛЯЕМЫХ ФИРМОЙ Код товара Наименование
Единицы измерения
Цена
НДС
—
Рис. 2.4. Форма документа "Справочник товаров, поставляемых фирмой'
СПРАВОЧНИК СКЛАДОВ ФИРМЫ Фирма /код, наименование/ Код склада
Наименование
Адрес
Отв. лицо
Рис. 2.5. Форма документа "Справочник складов фирмы"
Глава 2. Проектирование реляционной базы данных
СПРАВОЧНИК ПОКУПАТЕЛЕЙ ФИРМЫ ИНН Наименование Адрес
Код
Тел.
№ расч. счета
Банк
Рис. 2.6. Форма документа "Справочник покупателей фирмы"
Информация о планируемых поставках содержится в договорах. Форма договора приведена на рис. 2.7.
ДОГОВОР h 9 "
Поставщик
200
г.
Покупатель
ИНН . код
И Ш . код
наименование адоес телефон банк расчетный счет Код товара
"
наименование адрес те пефон ба нк расчетный счет
Нэп менов жив
Единица измерения
Цена
Срок поставки (месяц)
Мин. партия поставки
Количество
Сумм
Сумма всего
Рис. 2.7. Форма договора на поставку товаров
Учетная информация- с данными по фактической отгрузке (отпуске) товаров покупателю со склада фирмы в соответствии с договорами содержится в расходных накладных (рис. 2.8). Особо отметим, что документы предметной области не только дают возможность выявить структуру данных, но также являются основой для разработки форм ввода/вывода и отчетов для печати документов при подготовке документов на компьютере.
62
Часть I. Основы технологии Microsoft Access
НАКЛАДНАЯ Мй
Покупатель ИНН, код наименование
Поставщик ИНН, код _ наименование фирмы Склад-грузоотправитель: код наименование
200
Договор №
Код товара
_200_ г.
Наименование
Единица измерения
г
Цена
Ставка НДС
Количество
Сумма
Сумма всего Отпустил
_ФИО материально отв. лица
Рис. 2.8. Форма накладной с данными по фактической отгрузке товаров
Как отмечалось ранее, информационный анализ для выделения объектов целесообразно производить по каждой из форм документов, содержащих данные, которые должны быть размещены в базе. Выделение объектов справочной информации
Каждый справочник содержит только табличную часть, и в нем имеется реквизит, выполняющий роль идентификатора строки (код или номер). Например, в справочнике товаров идентификатором является код товара, который однозначно определяет описательные реквизиты: наименование товара, ЕДИНИЦЫ измерения и т. д. В справочнике складов идентификатором является Код склада, который однозначно определяет Наименование склада и другие реквизиты. В справочнике покупателей уникальным идентификатором является инн, а также код, который может иметь небольшую длину и присваивается для удобства внутрисистемного использования. Анализ справочников товаров и покупателей. Определим функциональные зависимости между реквизитами документа "Справочник товаров", предварительно составив их перечень, как показано на рис. 2.9. Присвоим реквизитам справочника товаров сокращенные обозначения — имена.
Глава 2. Проектирование реляционной базы данных
S3
Особенность такого простейшего по структуре данных документа состоит в том, что все реквизиты документа содержатся в таблице. Из анализа документа очевидно, ЧТО реквизиты Наименование товара (HAHMJTOB), Единица измерения (ЕЙ), Цена (ЦЕНА) , ндс являются описательными. Каждый из них функционально полно зависит только от уникального идентификатора товара — Код товара (код_тов). Таким образом, код_тов является ключевым. Отобразим зависимости каждого описательного реквизита товара от кода товара, который однозначно их определяет, линиями со стрелкой от ключевого реквизита к описательному. Реквизиты справочника товаров
Имя реквизита
Код товаров
КОД_ТОВ
Наименование товаров
НАИМ_ТОВ
Единицы измерения
ЕЙ
Цена
ЦЕНА
Ставка НДС
СТАВКА_НДС
Функциональные зависимости
Рис, 2.9. Функциональные зависимости реквизитов справочника товаров Для документов с такой простейшей структурой данных нет необходимости в дополнительных действиях по выделению информационных объектов, т. к. здесь все реквизиты образуют одну группу реквизитов с общим ключом, т. е. все реквизиты простейшего справочника образуют один информационный объект. Назовем такой объект для данного документа ТОВАР с ключом код товара (КОД_ТОВ). Аналогично легко определить информационный объект по справочнику покупателей. Если в качестве ключа принять код покупателя (код_пою, более короткий по сравнению с инн, он однозначно определит реквизиты — инн, Наименование, Адрес, Телефон, Банк, Номер расчетного счета. Соответственно выделяется информационный объект ПОКУПАТЕЛИ с ключом код покуЗамечание ИНН можно использовать в качестве альтернативного ключа и создать по нему уникальный индекс в базе данных. Реквизитный состав информационных объектов справочника товаров и справочника покупателей представлен в табл. 2.3.
Часть I. Основы технологии Microsoft Access Таблица 2.3. Группировка реквизитов по информационным объектам Товар и Покупатель Реквизиты объекта
Признак ключа
Имя информационного объекта
Семантика объекта
КОД TOE
Простой уникальный
ТОВАР
Сведения о поставляемых товарах
Простой уникальный
ПОКУПАТЕЛЬ
Сведения о покупателях фирмы
НАЙМЕТСВ ЦЕНА ЕК СТАВКА_НДС КОД ПОК ИНН НАИМ_ПОК АДРЕС_ПОК ТЕЛ НОМ_РСЧ БАНК
Анализ документа "Справочник складов фирмы". Определим функциональные зависимости между реквизитами документа "Справочник складов фирмы", предварительно составив их перечень (см. рис. 2.9). Присвоим реквизитам сокращенные обозначения -- имена. Все описательные реквизиты склада — наименование (НАИМ__СК), Адрес (АДРЕС_СК), Ответственное лице
(отв_лицо) однозначно определены кодом склада (код_ск), который поэтому является ключевым. Обратим внимание, что в общей части документа указан код фирмы (код_о) — один для всего списка складов. Очевидно, каждому значению кода склада соответствует только одно значение кода фирмы, т. е. можно считать, что имеет место полная функциональная зависимость кода фирмы от кода склада. Наименование фирмы определяется однозначно кодом фирмы.
Замечание Если зависимость между кои^Ф и код_ск не выявлена, то все множество реквизитов документа разделится на два не связанных между собой подмножества, а это не логично для реквизитов одного документа.
Все установленные функциональные зависимости реквизитов документа "Справочник складов" отражены на рис. 2.10. Заметим, что реквизит код_Ф одновременно выступает в роли описательного реквизита в одной связи и ключевого — в другой. Таким образом, здесь мы
Глава 2. Проектирование реляционной базы данных
сталкиваемся с транзитивной зависимостью. Реквизит НАИМ_Ф транзитивно зависит от код_ск через код_Ф. Тем не менее, специальных действий по расщеплению этой зависимости не потребуется при использовании приведенных выше правил. Реквизиты справочника складов
Имя реквизита
Код фирмы
КОД_Ф
Наименование фирмы
НАИМ_Ф
Код склада
КОД_СК
Наименование склада
НАИМ_СК
Адрес
АДРЕС_СК
Отв. лицо
ОТВ_ЛИЦО
Функциональные зависимости
*
Рис. 2.10. функциональная зависимость реквизитов справочника складов фирмы
Выберем по функциональным связям реквизиты, зависимые от каких-либо других реквизитов, и укажем для них ключевые реквизиты. Так, при просмотре списка реквизитов сверху находим первый зависимый реквизит код_о, к которому подходит стрелка, и устанавливаем реквизит (ключевой), от которого идет стрелка — код_ск. Далее находим второй зависимый (описательный) реквизит НАИМ_Ф и устанавливаем его ключевой код_Ф. Аналогично находим описательный ндим_ск и устанавливаем его ключевой код__ск и т. д. Выявленное соответствие описательных и ключевых реквизитов представлено в табл. 2.4. Таблица 2.4. Соответствие описательных и ключевых реквизитов документа "Справочник складов фирмы" Описательные (зависимые) реквизиты
Ключевые реквизиты
ИО, включающий реквизиты
КОД_Ф
код_ск
С РОТ АД
НАИМ__Ф
КОД_Ф
ФИРМА
НАИМ_СК
код__ск
СКЛАД
АДРЕС_СК
код_ск
СКЛАД
ОТВ ЛИЦО
код с к
СКЛАД
66
Часть I. Основы технологии Microsoft Access
Сгруппируем реквизиты, зависимые от одних и тех же ключевых реквизитов, и объединим их с ключевыми реквизитами в один информационный объект. Результат группировки реквизитов документа "Справочник складов фирмы" приведен в табл. 2.5. Таблица 2.5. Группировка реквизитов по информационным объектам документа "Справочник складов фирмы" Реквизиты объекта
Признак ключа
Имя информационного объекта
Семантика оС^екта
код_ск
Простой уникальный
СКЛАД
Сведения о складах фирмы
Простой уникальный
ФИРМА
Сведения о фирме
КОД_Ф НАИМ_СК АДРЕС_СК ОТВ_ЛИЦО КОД Ф
НАИН Ф
Таким образом, на основе анализа документа "Справочник складов фирмы" выделены два информационных объекта — ФИРМА и СКЛАД. Заметим, что особенность объекта ФИРМА состоит в том, что он имеет единственный экземпляр, поэтому данный объект можно не отображать в базе данных отдельной таблицей. Выделение объектов плановой и учетной информации Анализ документа "Договор". Определим функциональные зависимости реквизитов документа "Договор", предварительно составив их перечень (рис. 2.11). Присвоим реквизитам сокращенные обозначения — имена. Рассмотрим функциональные зависимости между реквизитами общей части документа "Договор". Номер договора присваивается в порядке подготовки нового документа. Этот номер является уникальным среди всех номеров договоров. Каждый ИЗ реквизитов: Дата заключения договора, Идентификатор покупателя (в качестве него примем код, соответствующий инн по справочнику покупателей) — имеет единственное значение в договоре и, соответственно, каждый однозначно определяется идентификатором документа — номером
Глава 2. Проектирование реляционной базы данных договора. Общим идентификатором договора определяется также однозначно реквизит Сумма всего. Реквизиты документа "Договор"
Имя реквизита
Номер договора
ном_дог
Дата договора
ДАТА_ДОГ
Код покупателя
код_пок
Сумма по договору
СУММА_ДОГ
Код товара
код_тов
Срок поставки
СРОК_ПОСТ
Количество поставки товара
кол_пост
Минимальная партия поставки товара
мин_пост
Сумма поставки товара
СУММА_ПОСТ
Функциональные зависимости
*~
«-
^
Рис. 2.11. Функциональные зависимости реквизитов документа "Договор' кодом покупателя однозначно определяются описательные реквизиты покупателя — Наименование, ИНН, Адрес, Телефон, Банк, Расчетный счет. В ТЯблице зависимостей эти реквизиты можно не отображать, поскольку информационный объект, образованный этими реквизитами, был уже выделен на основе справочника покупателей. Описательные реквизиты фирмы, выступающей в данном документе в качестве поставщика, определяются однозначно идентификатором фирмы. Рассмотрим функциональные зависимости реквизитов табличной части договора. Табличная часть (спецификация договора) содержит реквизиты, имеющие множество значений в соответствующих столбцах, т. к. договор может содержать несколько наименований товаров. Среди этих реквизитов особую роль играет Код товара, который фактически является идентификатором каждой строки в документе. Замечание Поскольку в договоре может быть несколько товаров, номер договора не определяет однозначно товар, указанный в документе, и, соответственно, не может быть установлена функциональная зависимость Кода товара от Номера договора. Описательные реквизиты Товара Наименование, Единица измерения, Цена
однозначно определены кодом товара. Эти реквизиты можно не включать в
Часть I. Основы технологии Microsoft Access
68
таблицу зависимостей, поскольку их взаимосвязи были установлены ранее, при анализе справочника товаров. Что касается реквизитов-оснований документа, таких как Количество плановой отгрузки товара, Сумма за товар,
минимальная партия — эти реквизиты внутри документа идентифицируются Кодом товара в соответствующей строке, а полная идентификация среди всех договоров образуется добавлением к коду товара Номера договора. Все это справедливо лишь в том случае, если для любого товара срок поставки может быть только один. Причем в этом случае реквизиты количество, сумма, мин. партия и срок поставки функционально полно будут зависеть от составного КЛЮча — Номер договора + Код товара.
Допустим, что в договоре для одного товара возможно несколько сроков поставки, тогда срок поставки должен войти в общий идентификатор для реквизитов Количество, Сумма и мин. партия. Таким образом, эти реквизиты будут функционально полно зависеть от составного ключа номер договора + Код товара + Срок поставки (СМ. рИС. 2.11). Выделение информационных объектов по документу "Договор". Проанализировав выявленные функциональные взаимосвязи реквизитов, установим, от каких реквизитов зависит каждый реквизит, к которому подходит стрелка. Таким образом определим соответствие описательных и ключевых реквизитов. Затем сгруппируем реквизиты, одинаково зависимые от ключевых, и объединим их с ключевыми реквизитами в один информационный объект (ИО). Результат группировки по ИО реквизитов документа "Договор" представлен в табл. 2.6. Таблица 2.6. Группировка реквизитов по информационным объектам документа "Договор" Реквизиты объекта
Признак ключа
Имя информационного Семантика объекта объекта
ном_дог
Простой уникальный
ДОГОВОР
Общие сведения по договору
Составной уникальный
ПОСТАВКА_ПЛАН
Сведения о поставках товаров по договору
ДАТА_ДОГ КОД ПОК
СУММА_ДОГ ном_дог код тов СРОК_ПОСТ кол пост мин пост СУММА ПОСТ
Глава 2. Проектирование реляционной базы данных
69
Анализ документа "Накладная". Рассмотрим функциональные зависимости реквизитов общей части накладной. Номер накладной присваивается в порядке подготовки нового документа. Этот номер можно считать уникальным только среди всех номеров накладных, выписанных на данном складе (г. е. он не повторяется на данном складе). Для уникальной идентификации накладных по всей фирме надо принять составной идентификатор номер накладной + Код склада. РеКВИЗИТЫ Дата
выписки
накладной .(оТГруЗКИ Товаров) И-. Номер
договора
имеют единственное значение в накладной и, соответственно, каждый из них однозначно определяется идентификатором накладной (номер накладной + Код склада). Общим идентификатором накладной определяется также однозначно реквизит Сумма всего. дата заключения договора однозначно определяется номером договора, что было уже учтено при анализе договора. код покупателя, выбранный ранее его. идентификатором, имеет единственное значение в накладной, т. е. он однозначно определяется идентификатором накладной. Однако, как было рассмбтрено'ранее, код покупателя однозначно определяется в первичном' документе "Договор" Номером договора. То есть здесь имеет место транзитивная зависимость идентификатора 'покупателя от номера договора через идентификатор' накладной. Поэтому будем уЧИГЫВаТЬ ТОЛЬКО зависимость Кода покупателя ОТ Номера' договора.-
ИНН И Наименование покупателя однозначно определяются Кодом покупателя, что уже было учтено при анализе справочника покупателей. Описательные реквизиты фирмы (инн и наименование фирмы), выступающей в данном документе в качестве поставщика, определяются однозначно идентификатором фирмы — Кодом фхрмк. Как было принято ранее, объект ФИРМА не будет отображаться в-базе данных. Описательные реКВИЗИТЫ Наименование'' склада И ' О т в . лицо (ФИО ОТВСТСТ-
венного лица) однозначно определены 'кодом склада, что уже было учтено при анализе справочника покупателей..'
Замечание Код покупателя, Номер договора, Код склада играют В документе важную роль связи накладной с соответствующими справочными и плановыми данными. К этим данным относятся данные по покупателю (которому отпущен товар), данные по складу (с которого отпущен товар), данные по договору (на основании которого выписывается накладная). Как видно из таблиц функциональных зависимостей, реквизиты Код покупателя, Номер договора, с одной стороны, являются ключевыми для соответствующих данных, а с другой— описательными для накладной.
Рассмотрим функциональные зависимости реквизитов табличной части накладной. Табличная часть содержит реквизиты, имеющие множество значе-
Часть I. Основы технологии Microsoft Access
70
ний в соответствующих столбцах, т. к. накладная может содержать несколько наименований товаров, отпущенных покупателю. Среди этих реквизитов особую роль играет код товара, который является идентификатором каждой строки в документе.
Замечание Поскольку в накладной может быть несколько товаров, идентификатор накладной не определяет однозначно товар, указанный в документе, и, соответственно, не может быть установлена функциональная зависимость Кода товара от идентификатора накладной. Описательные реквизиты товара Наименование, Единица измерения, Цена, Ставка НДС ОДНОЗНЭЧНО ОПрСДСЛСНЫ Кодом товара, ЧТО уже было уЧТСНО При анализе справочника покупателей. РекВИЗИТЫ-ОСНОВанИЯ накладной Количество отпущенного (отгружаемого) товара и Сумма за товар определяют количественные характеристики объекта — отпуск товаров. Эти реквизиты внутри одной накладной идентифицируются кодом товара в соответствующей строке, а полная идентификация на всем множестве накладных образуется добавлением к коду товара идентификатора накладной. Таким Образом, реквизиты Количество отпущенного [отгружаемого] товара И Сумма за товар ОДНОЗНЗЧНО определяются СОСТЭВНЫМ идентификатором Номер накладной + Код склада -f Код товара. На рис. 2.12 наглядно представлены все рассмотренные функциональные зависимости реквизитов накладной.
Реквизиты документа "Накладная"
Имя реквизита Функциональные зависимости
Номер накладной
НОМ_НАКЛ
Код склада
КОД_СК
Дата отгрузки
ДАТА_ОТГР
Номер договора
НОМ_ДОГ
Сумма всего
СУММА_НАКЛ
Код товара
код_тов
Количество отгруженного товара
КОЛ_ОТГР
Сумма за товар
СУММА_ОТГР
*- «—
Рис. 2.12. Функциональные зависимости реквизитов накладной
Глава 2. Проектирование реляционной базы данных
71
Выделение информационных объектов по накладной. Проанализировав выявленные функциональные взаимосвязи реквизитов, установим, от каких реквизитов зависит каждый реквизит, к которому подходит стрелка. Таким образом определим соответствие описательных и ключевых реквизитов накладной. Затем сгруппируем реквизиты, одинаково зависимые от ключевых, и объединим их с ключевыми реквизитами в один информационный объект (ИО). Результат группировки по ИО реквизитов накладной представлен в табл. 2.7. Таблица 2.7. Группировка реквизитов по информационным объектам документа "Накладная" Реквизиты ИО
НОМ_НАКЛ
код_ск
Признак ключа
Имя ИО
Составной
НАКЛАДНАЯ
уникальный
Семантика ИО (описание)
Общие сведения по накладной
ДАТА_ОТГР
НОМ_ДОГ СУММА__НАКЛ НОМ_НАКЛ код_тов
код_ск
Составной уникальный
ОТГРУЗКА
Данные по отгрузке товара
КОЛ_ОТГР СУММА ОТГР
Связи информационных объектов Следующим шагом проектирования после выявления информационных объектов является определение связей между ними. Связь устанавливается между двумя информационными объектами. Наличие связи, как правило, определяется природой реальных объектов, процессов или явлений, отображаемых этими информационными объектами. Связь между объектами существует, если логически взаимосвязаны экземпляры этих информационных объектов. Например, связи имеются между такими парами объектов, как поставщик — товар, склад — товар, кафедра — преподаватель, группа — студент и т. п.
Тип связи информационных объектов Связи информационных объектов могут быть разного типа: О од но-од позначные (1:1); П одно-многозначные (1:М); П много-многозначные (M:N).
Часть I. Основы технологии Microsoft Access
Одно-однозначные связи имеют место, когда каждому экземпляру первого объекта (А) соответствует только один экземпляр второго объекта (В), и наоборот, каждому экземпляру второго объекта (В) соответствует только один экземпляр первого объекта (А). Следует заметить, что такие объекты легко могут быть объединены в один, структура которого образуется объединением реквизитов обоих исходных объектов, а ключевым реквизитом может быть выбран любой из альтернативных ключей, т. е. ключей исходных объектов. Графическое изображение одно-однозначной связи приведено на рис. 2.13. Примерами одно-однозначных связей являются пары вида: группа — староста, фирма — расчетный счет в банке и т. п. 1:1
ОБЪЕКТ
ОБЪЕКТ В
А
Рис. 2.13. Графическое изображение одно-однозначных отношений объектов
Одно-многозначные связи (1:М) — это такие связи, когда каждому экземпляру одного объекта (А) может соответствовать несколько экземпляров другого объекта (В), а каждому экземпляру второго объекта (В) может соответствовать только один экземпляр первого объекта (А). Графическое изображение одно-многозначной связи приведено на рис. 2.14. ОБЪЕКТ А
1:М
Главный информационный объект
ОБЪЕКТ В Подчиненный информационный объект
Рис. 2.14. Графическое изображение одно-многозначных отношений объектов
В такой связи объект А является главным, а объект В — подчиненным, т. е. имеет место иерархическая подчиненность объекта В объекту А. Простейшими примерами одно-многозначных связей объектов являются пары вида: подразделения — сотрудники, кафедра — преподаватель, группа — студент и т. п. Много-многозначные связи (M:N) — это такие связи, когда каждому экземпляру одного объекта (А) могут соответствовать несколько экземпляров второго объекта (В), и наоборот, каждому экземпляру второго объекта (В) могут соответствовать несколько экземпляров первого объекта (А). Графическое изображение связи типа M:N показано на рис. 2.15.
Глава £. Проектирование реляционной базы данных
3
М'N -
А
В
•
'
Рис. 2.15. Графическое изображение много-многозначных отношений объектов
Много-многозначные связи не могут непосредственно реализовываться в реляционной базе данных. Поэтому в том случае, когда будут выявлены такие связи, может возникнуть необходимость их преобразования путем введения дополнительного объекта "связка". Исходные объекты будут связаны с этим объектом одно-многозначными связями. Таким образом, объект-связка является подчиненным в одно-многозначных связях по отношению к каждому из исходных объектов (рис. 2.16).
Объект А ключ Ка
1 :М
М:N
Объект В ключ Kb 1
М
Рис. 2.16. Преобразование связи типа М:М с помощью объекта-связки
Объект-связка должен иметь идентификатор, образованный из идентификаторов исходных объектов Ка и кь (см. рис. 2.16). При рассмотренном подходе к выделению информационных объектов объект-связка, как правило, выявляется в результате анализа функциональных зависимостей реквизитов. Много-многозначные связи в этом случае не требуют специальной реализации, т. к. осуществляются через объект, выполняющий роль объекта-с вязки. Примером много-многозначных связей является пара вида поставщики — товары, если один поставщик поставляет разные наименования товаров, а товар одного наименования может поставляться несколькими поставщиками.
Определение связей между информационными объектами Определение связей между информационными объектами и типа отношений, которыми они характеризуются, рассмотрим на примере .предметной области "Поставка товаров".
74_
Часть I. Основы технологии Microsoft Access
Связи между объектами ПОКУПАТЕЛЬ -» ДОГОВОР характеризуются одномногозначными отношениями (1:М), т. к. с одним покупателем может быть заключено несколько договоров, а один договор всегда заключается с конкретным покупателем. Поскольку накладные строго привязаны к конкретному договору, а по одному договору может быть оформлено несколько накладных, между объектами ДОГОВОР и НАКЛАДНАЯ имеет место связь типа 1:М. Характерным случаем одно-многозначных связей являются связи объектов, образованные из документов с табличной частью (спецификацией). В рассматриваемой предметной области по документу "Договор" был выделен объект ДОГОВОР, соответствующий общей части документа, и объект ПОСТАВКА^ПЛАН, соответствующий строкам табличной части документа. Очевидна одно-многозначная связь между этими объектами ДОГОВОР ~~» ПОСТАВКА_ПЛАН, поскольку в одном документе всегда содержится некоторое множество строк, а каждая строка принадлежит только одному документу. По документу "Накладная" были выделены два объекта, между которыми также имеет место одно-многозначная связь НАКЛАДНАЯ —» ОТГРУЗКА. Очевидно наличие связи между объектами ТОВАР -> ПОСТАВКА_ПЛАН. Эту связь также определяют одно-многозначные отношения, поскольку каждый экземпляр поставки (одна из строк спецификации договора) — это данные по одному товару, а товар одного наименования может участвовать в разных плановых поставках товара (одного или разных договоров). Аналогично устанавливается связь между объектами ТОВАР —> ОТГРУЗКА, которые также находятся в одно-многозначных отношениях. Связь между объектами СКЛАД -* НАКЛАДНАЯ может быть установлена как одно-многозначная, поскольку по условиям рассматриваемой предметной области на каждом складе выписывается некоторое множество накладных, но каждая накладная выписывается на конкретном складе. Следует отметить, что объект ПОСТАВКА_ПЛАН фактически играет роль объекта-связки в много-многозначных отношениях объектов ДОГОВОР и ТОВАР, а объект ОТГРУЗКА играет роль объекта-с вязки в много-многозначных отношениях объектов НАКЛАДНАЯ и ТОВАР (рис. 2.17). В табл. 2.8 перечислены все одно-многозначные связи между объектами и соответственно определены главные и подчиненные информационные объекты в этих связях. Таблица 2.8. Связи информационных объектов
Главный объект
Подчиненный объект
ПОКУПАТЕЛЬ
ДОГОВОР
ДОГОВОР
ПОСТАВКА ПЛАН
Тип связи 1 ;М 1:М
Глава 2. Проектирование реляционной базы данных
75
Таблица 2.8 (окончание) Подчиненный объект
Главный объект НАКЛАДНАЯ
ОТГРУЗКА
ТОВАР
ПОСТАБКА_ПЛАН
ТОВАР
ОТГРУЗКА
СКЛАД
НАКЛАДНАЯ
ДОГОВОР
НАКЛАДНАЯ
ДОГОВОР
M:N
\ /
Тип связи
ТОВАР
ПОСТАВКА ПЛАН
ТОВАР
м
\ / N
НАКЛАДНАЯ
ОТГРУЗКА
Рис. 2.17. Примеры много-многозначных отношений информационных объектов
Информационно-логическая модель предметной области На рис. 2.18 представлена информационно-логическая модель рассматриваемой предметной области, построенная в соответствии с выявленными информационными объектами и связями между ними. Информационно-логическая модель приведена в каноническом виде, и объекты в ней размещены по уровням. На нулевом уровне размещаются объекты, не подчиненные никаким другим объектам. Уровень остальных объектов определяется наиболее длинным путем к объекту от нулевого уровня, Такое размещение объектов дает представление об их иерархической подчиненности, делает модель более наглядной и облегчает понимание одно-многозначных отношений между объектами.
Часть I. Основы технологии Microsoft Access
Замечание
i
Для определения уровня объектов на графе ИЛМ можно, условно удалив объекты нулевого уровня, найти объекты первого уровня. К объектам этого уровня следует отнести объекты, не подчиненные теперь никаким другим объектам. Аналогично определяются объекты каждого следующего уровня. При большом количестве объектов в ИЛМ аналогичные действия выполняются на матрице смежности модели.
уровень О
уровень 1
уровень 2
уровень 3
Рис. 2.18. Информационно-логическая модель предметной области "Поставка товаров"
Логическая структура реляционной базы данных Логическая структура реляционной базы данных Access является адекватным отображением полученной информационно-логической модели предметной области. Для канонической модели не требуется дополнительных преобразований. Каждый информационный объект модели данных отображается соответствующей реляционной таблицей: Структура реляционной таблицы определяется реквизитным составом соответствующего информационного объекта, где каждый столбец (поле) соответствует одному из реквизитов
Глав<^2. Проектирование реляционной базы данных
77
объекта. Ключевые реквизиты объекта образуют уникальный ключ реляционной таблицы. Для каждого столбца таблицы (поля) задается тип, размер данных и другие свойства. Строки (записи) таблицы соответствуют экземплярам объекта и формируются при загрузке таблицы. Связи между объектами модели данных реализуются одинаковыми реквизитами — ключами связи в соответствующих таблицах. При этом ключом связи типа 1:М всегда является уникальный ключ главной таблицы. Ключом связи в подчиненной таблице является либо некоторая часть уникального ключа в ней, либо поле, не входящее в состав первичного ключа (например, код фирмы в таблице СКЛАД). Ключ связи в подчиненной таблице называется внешним ключом, Все связи в полученной инормационно-логической модели предметной области "Поставка товара" характеризуются отношением типа 1:М. Соответственно, связь между таблицами ПОКУПАТЕЛЬ и ДОГОВОР осуществляется по КОДУ покупателя (код_пок), который является уникальным идентификатором главного объекта ПОКУПАТЕЛЬ и неключевым в объекте ДОГОВОР (см. табл. 2.6). Связь между таблицами ТОВАР и ПОСТАВКА_ПЛАН осуществляется по уникальному ключу главного объекта ТОВАР — коду товара, который в подчиненном объекте ПОСТАВКА_ПЛАН является частью ключа (см. табл. 2.6). Аналогично связь между таблицами ТОВАР и ОТГРУЗКА осуществляется по уникальному ключу главного объекта ТОВАР — Коду товара. Связь между таблицами договор и НАКЛАДНАЯ осуществляется по уникальному ключу главного объекта ДОГОВОР — Номеру договора (ном_дог), который в подчиненном объекте НАКЛАДНАЯ не входит в состав ключа (см. табл. 2.7). Связь между таблицами ДОГОВОР и ПОСТАВКА_ПЛАН осуществляется по уникальному КЛЮЧу ГЛаВНОГО Объекта ДОГОВОР — Номеру договора (НОМ_ДОГ), который в подчиненном объекте ПОСТАВКА__ПЛАН является частью ключа (см. табл. 2.6). Аналогично связь между таблицами НАКЛАДНАЯ и ОТГРУЗКА осуществляется по уникальному составному ключу главного объекта НАКЛАДНАЯ -- НОМ_НАКЛ + код_ск, который в подчиненном объекте ОТГРУЗКА является частью ключа (см. табл. 2.7). В Access может быть создана схема данных, наглядно отображающая логическую структуру базы данных. Определение од но-многозначных связей в этой схеме должно осуществляться в соответствии с построенной моделью данных. Топология проекта схемы данных практически совпадает с топологией информационно-логической модели. Для модели данных предметной области (см. рис. 2.18), построенной в рассмотренном примере, логическая структура базы данных в виде схемы данных Access приведена на рис. 2.19. На этой схеме прямоугольники отображают таблицы базы данных с полным списком их полей, а связи показывают, по каким полям осуществляется взаимосвязь таблиц. Имена ключевых полей для наглядности выделены и находятся в верхней части полного списка полей каждой таблицы.
Часть I. Основы- технологии Microsoft Access
7В ПОКУПАТЕЛЬ
ТОВАР
СКЛАД
- • код_тов наим товв цена ей ставка_ндс ДС
.
•
•
код_ф наим ск отв_лицо адрес ск
НАКЛАДНАЯ '
1
ном_накл 1 код_ск М дата_отгр
М -
сумма_накл
ОТГРУЗКА ном_накл -т
М .
- код_тов кол отг сумма_отгр
1
Рис. 2.19. Логическая структура реляционной базы данных предметной области "Поставка товаров" Контрольные вопросы
1. Что может отображать информационный объект предметной области? 2. Как определяется информационный объект предметной области? 3. Что представляет экземпляр информационного объекта ТОВАР? 4. В каком случае описательный реквизит функционально полно зависит от ключа? 5. Как сказывается нормализация данных на свойствах базы?. 6. Должен ли информационный объект, отвечающий требованиям нормализации, иметь уникальный ключ? 7. Могут ли описательные реквизиты, входящие в информационный объект, отвечающий требованиям нормализации, быть зависимыми друг от друга? 8. Может ли описательный реквизит, входящий в информационный объект, отвечающий требованиям нормализации, зависеть от ключа через промежуточный реквизит?
Глава 2. Проектирование реляционной базы данных
79
9. Как устраняется транзитивная зависимость между реквизитами объекта? 10. Верно ли утверждение, что документы являются основным источником данных внутримашинной сферы? П. Перечислите формальные правила выделения информационных объектов. 12. Может ли реквизит одновременно быть ключевым для одних реквизитов и описательным для других? 13. Назовите виды отношений между двумя информационными объектами. 14. Объекты ДОГОВОР и тОВАРО-ТРАНСПОРТНАЯ НАКЛАДНАЯ (ттн) находятся в отношениях 1:М. Сколько договоров соответствует одной ттн? 15. В каких отношениях могут находиться объекты ТОВАР и СКЛАД? 16. Какой объект является главным в отношении ДОГОВОР -
ТОВАРО-
ТРАНСПОРТНАЯ НАКЛАДНАЯ?
17. Как преобразовать много-многозначные отношения в одно-многозначные? 18. Какой объект может выполнить роль связки между объектами ПОСТАВЩИК И ТОВАР?
19. Как образуется ключ в объекте "связка"? 20. По какому полю связываются таблицы, находящиеся в одно-многозначных отношениях? 21. Как определить уровень, на котором должен быть размещен объект в канонической модели данных? 22. Сколько таблиц будет в базе данных, построенной на основе нормализованной модели данных предметной области? 23. Может ли повторяться значение первичного ключа в нескольких строках таблицы? Ответы 1. Реальный объект, процесс, явление. 2. Информационный объект является совокупностью описательных реквизитов, однозначно определяемых ключом, состоящим из одного или нескольких реквизитов. 3. Значения реквизитов, характеризующие конкретный товар. 4. Если одному значению ключа соответствует только одно значение описательного (зависимого) реквизита. 5. Устраняется дублирование описательных данных, обеспечиваются их однократный ввод и корректировка, поддержание целостности средствами Access.
80
Часть /. Основы технологии Microsoft Access
6. Да.
7. Нет.
8. Нет. 9. Расщеплением_ннформационного объекта на два. 10. Да.:
11. Записать реквизиты предметной области или документа; определить функциональные зависимости между ними; выбрать все зависимые реквизиты с указанием ключа^от которого они зависят; объединить реквизиты, зависимые от одинаковых ключевых реквизитов, вместе с ключом в одном объекте.
12. Да. 13. Одно-однозначные, одно-многозначные, много-многозначные. 14. Один. 15. Возможен любой вид отношений, определяемый особенностями предметной области. 16. ДОГОВОР.
17. Через объект "связка". 18.
ПОСТАВКА.
19- Из ключей главных таблиц. 20. По ключу главной таблицы, очевидно, что в подчиненной таблице это поле не может быть ключом, хотя и может входить в ключ. 21. По числу связей в наиболее длинном пути от объектов нулевого уровня. 22. Столько, сколько объектов в модели.
23. Нет.
• • -
Глава 3
Создание базы данных Создание новой нормализованной реляционной базы данных Access осуществляется в соответствии с ее структурой, полученной в результате проектирования. Структура реляционной базы данных определяется составом таблиц и их взаимосвязями. Взаимосвязи между двумя таблицами реализуются через ключ связи, входящий в состав полей связываемых таблиц. Напом-ним, что в нормализованной реляционной базе данных таблицы находятся в отношениях типа один-ко-многим или один-к-одному. Для одно-многозначных отношений в качестве ключа связи всегда используется уникальный ключ главной таблицы, в подчиненной таблице это может быть любое из полей, которое называется внешним ключом. Процесс проектирования реляционной базы данных, был рассмотрен в главе 2. Создание реляционной базы данных с помощью СУБД начинается с формирования структуры таблиц. При этом определяется состав полей и задается их описание. После определения структуры таблиц создается схема данных, в которой устанавливаются связи между таблицами. Access запоминает и использует эти связи при заполнении таблиц и обработке данных. При создании базы данных важно задать параметры, в соответствии с которыми Access будет автоматически поддерживать целостность данных. Для этого при определении структуры таблиц должны быть указаны ограничения на допустимые значения данных, а при создании схемы данных на основе нормализованных таблиц должны быть заданы параметры поддержания целостности связей базы данных. Завершается создание базы данных процедурой загрузки, т. е. заполнением таблиц конкретными данными. Особое значение имеет технология загрузки взаимосвязанных данных. Удобным инструментом загрузки данных во взаимосвязанные таблицы являются формы ввода/вывода, обеспечивающие интерактивный интерфейс для работы с данными базы. Формы (подробнее см. главы 5, 6) позволяют создать экранный аналог документа источника, через который можно вводить данные в несколько взаимосвязанных таблиц. Технология загрузки данных документов с использованием форм описывается в
82
4acTbJ. Основы технологии Microsoft Access
главе 6. В настоящей главе рассматривается непосредственный ввод данных в таблицы. Внимание Пользователь может начинать работу с базой при любом количестве созданных таблиц еще до создания полной базы, отображающей все объекты модели данных предметной области. База данных может создаваться поэтапно, и в любой момент ее можно дополнять новыми таблицами и вводить связи между таблицами в схему данных. В открывающемся после запуска Microsoft Access окне отображается область задач Приступая к работе (см. рис. 1.7 главы /). Эта область предназначена прежде всего для открытия ранее созданных баз данных. Для того чтобы начать создание новой базы данных, необходимо перейти в область задач Создание файла. Щелкните на ссылке Создать файл для перехода в эту область.
^Замечание Для отображения или скрытия области задач при запуске Access выполняется команда Сервис|Параметры (ToolsjOptions), где на вкладке Вид (View) в группе Отображать устанавливается или снимается флажок область задач при запуске. Начать создание базы данных можно и с помощью команды Файл|Создать (File)New) или кнопки Создать (New) (ill) на панели инструментов База данных (Database). В области задач в группе Создание (New) представлены четыре строки: Новая база данных, Пустая страница доступа к данным, Проект с имеющимися данными и Проект с новыми данными. Новая база данных (New Database) позволяет приступить к созданию новой оригинальной базы данных с пустого файла. Пустая страница доступа к данным (Data Access Page) позволяет создавать в режиме конструктора на основе таблиц и запросов Web-страницы специального типа. Страницы доступа к данным обеспечивают не только просмотр актуальной информации, но и ее редактирование, удаление и добавление в базу данных Microsoft Access или Microsoft SQL Server no Интернету или локальной сети. Страница доступа к данным сохраняется в отдельном файле вне базы данных Microsoft Access. Если во время выполнения этой команды база данных не открыта, необходимо выбрать источник данных для создаваемой страницы. При открытой базе данных она автоматически выбирается в качестве источника данных, и в окне базы данных на вкладке Страницы (Pages) автоматически создается ярлык к файлу, где будет храниться страница. Разработка страниц ведется в интерактивном режиме средствами,
Глава 3. Создание базы данных
83
аналогичными тем, что используются при конструировании форм или отчетов, однако и в разработке, и во взаимодействии со страницами имеются значительные отличия. Работать со страницей доступа к данным можно непосредственно в среде Access. Страницы могут использоваться в приложении базы данных наряду с формами и отчетами. Пользователь из сети может открыть страницу доступа к данным и работать через нее со связанной базой данных с помощью программы Microsoft Internet Explorer 5.01 с пакетом обновления SP2 или более поздней версии. При этом наличие Access или Office Developer Edition не является обязательным. Проект с имеющимися данными — Project (Existing Database) и Проект с новыми данными Project (New Database) позволяют создать проектприложение пользователя, которое работает с базой данных, размещенной на SQL-сервере. Причем проект можно создать для уже существующей на сервере базы данных или одновременно с проектом начать создание новой базы данных. Разработка проекта для общей базы данных Microsoft SQL Server рассматривается в главе 11. Строка Из имеющегося файла предполагает создание новой базы данных на основе уже существующего файла.
Обшие j Базы данных (
[Ж ШИ
~ Новая база данных. , .
Пустая страни, , .
Проект (существу,
Проект (новая база данных)
-Просмотр
Просмотр невозможен
Шаблоны на узле Office Online
Рис. 3.1. Окно выбора варианта создания базы данных 4 Зак. 835
О гиена
84
ЧастьJ^ Основы технологии Microsoft Access^
Строка Шаблоны позволяет создать базу данных с помощью шаблона, выбранного на рабочем компьютере (строка На моем компьютере) или на Webузле Microsoft Office Online (www.Microsoft.com). Кроме того, по ключевым словам можно реализовать поиск шаблона в сети. Строка На моем компьютере открывает окно с двумя вкладками (рис. 3.1). На вкладке Общие (General) значками представлены все перечисленные средства создания баз данных и приложений. Вкладка Базы данных (Blank Database) предлагает создать одну из типовых баз данных с помощью мастера на основе существующих шаблонов. На вкладке представлены шаблоны этих баз данных. Чтобы начать работу мастера, достаточно щелкнуть на значке нужной базы данных.
Создание файла базы данных Access Access хранит все таблицы базы данных, а также другие объекты в одном файле. Прежде чем приступить к созданию таблиц базы данных, необходимо создать файл пустой базы данных. Для создания файла новой пустой базы данных выберем в области задач Создание файла строку Новая база данных (New Database). В открывшемся окне Файл новой базы данных (File New Database) (рис. 3.2) раскроем список Создать папку (Save in) и выберем папку, в которой будет храниться файл, зададим имя файла новой базы данных, например, "Поставка TOBapOB.mdb", и нажмем кнопку Создать (Create). В результате откроется окно новой базы данных <имя БД>: база данных (Database).
Замечание Файлы, сохраняемые в Access, как и в других приложениях MS Office, по умолчанию попадают в папку Мои документы (My Documents). Для изменения используемой по умолчанию папки для файлов новых баз данных надо выполнить команду Сервис]Параметры (Tools|Options) и в появившемся диалоговом окне на вкладке Общие (General) в поле Рабочий каталог (Default Database Folder) ввести путь к папке, в которой предполагается хранить новые базы данных. Команда Сервис|Параметры (Tools|Options) доступна только при открытой базе данных.
Задавая имя файла базы данных, следует иметь в виду, что его предельная длина составляет 255 символов, включая пробелы, в Microsoft Windows 98/ NT 4.0 и 215 символов, включая пробелы, в Microsoft Windows 2000/XP или Millennium Edition. Имена файлов не должны содержать следующих символов: \, / , - , : * , ? , " , < , > , |.
Глава 3. Создание базы данных
Тип файла по умолчанию имеет значение Базы данных Microsoft Access (*.mdb) (Microsoft Access Databases), что приводит к созданию файла базы данных, имеющего расширение mdb. Это расширение является зарегистрированным в Windows для данного типа файлов и связывается с программой Access.
Фанл новой базы данных Папке;
]Й Актуальные БД
й
ЩТорговля_2003,гг^Ь
_-J
£• - ,jj ' ^ У
_j . tl <т Сервис * jj J f ЭСКИЭЬ!
Мои последние д с* у мен ты
~4
s
Значки
'j;:;'| Список flfp 1аблица Рабочий стол
£:Ш| Свойства ;: j
.'•"}
Просмотр
(Я fed -представ is ми*
Мои документы
. Мой компьютер
Мое сетевое окружение
Имя файла;
Поставка товаров. mdb
Тип файла;
База данных Microsoft Office Access (*.mdb)
1 *•
Создать Отмена
Рис. 3.2. Окно создания файла новой базы данных
Замечание По умолчанию при просмотре в Windows файлов зарегистрированного типа расширения не отображаются. Если необходимо видеть расширения файлов, в программе Windows Проводник или Мой компьютер нужно выполнить команду Сервис|Свойства папки и в окне Свойства папки на вкладке Вид снять флажок Скрывать расширения для зарегистрированных типов файлов.
Вертикальный ряд больших кнопок слева в окне Файл новой базы данных (File New Database) предназначен для быстрого открытия, просмотра содержимого и выбора папки для сохранения файла (см. рис. 3.2). Для отображения в папке только файлов баз данных в поле списка Тип файла (File of type) устанавливается тип Базы данных Microsoft Access (*.mdb) (Microsoft Access Databases).
86
Часть I. Основы технологии Microsoft Access
Кнопки на панели инструментов окна Файл новой базы данных (File New Database) обеспечивают удобный поиск и переход к папке, в которой необходимо создать файл базы данных. Кнопка с голубой стрелкой UES позволяет возвращаться к ранее просмотренным папкам. По следующей кнопке Переход на один уровень вверх (Up One Level) выполняется переход к просмотру палки на уровень выше в иерархии папок. По кнопке Представления (Views) открывается список команд для настройки вида информации об отображаемых в окне файлах. Кнопкой Сервис (Tools) открывается список команд, которые позволяют удалить или переименовать выделенный объект. Команда Свойства отобразит информацию о базе данных, а для папки откроет общий доступ пользователям вашей сети и правила доступа. Кроме того, на панели инструментов представлены кнопки для удаления файлов или папок, создания новых папок, для поиска в Интернете. В окне новой базы данных <имя БД>: база данных (Database) (рис. 3.3) <имя БД> соответствует заданному названию в окне Файл новой базы данных (File New Database) (см. рис. 3.2).
Поставка товаров : база данных (формат Access 2002 - 2003) й
Конструктор '^Создать. | X 1 о Создание таблицы в режиме конструктора Создание таблицы с помощью мастера Создание таблицы путем ввода данных
Рис. 3.3. Окно пустой базы данных "Поставка товаров" {рабочее поле объекта Таблицы)
В окне новой базы данных в разделе Объекты (Objects) вертикальным рядом кнопок представлены все типы объектов, которые могут быть созданы в БД: таблицы, запросы, формы, отчеты, страницы, макросы и модули. Для новой
Глава 3. Создание базы данных
87
базы данных список объектов любого выбранного типа отсутствует. Описание основных элементов окна базы данных приведено в разделе "Начало работы в Microsoft Access" в главе 1.
Создание таблицы базы данных Создание таблицы БД состоит из двух этапов. На первом этапе определяется ее структура: состав полей, их имена, последовательность размещения полей в таблице, тип данных каждого поля, размер поля, ключи, индексы таблицы и другие свойства полей. На втором этапе производится создание записей таблицы и заполнение их данными. Для создания новой таблицы в окне базы данных (см. рис. 3.3) выберите объект Таблицы (Tables) и нажмите кнопку Создать (New). В открывшемся окне Новая таблица (New Table) выберите один из режимов создания таблицы (рис. 3.4). Первые три режима (как основные) вынесены в рабочее поле, предназначенное для отображения списка существующих в БД таблиц (см. рис. 3.3). Это позволяет сразу перейти в нужный режим создания таблицы, сократив число выполняемых пользователем операций.
Новая таблица
Создание таблицы в режиме таблицы.
Редким таьлицы Конструктор Мастер таблиц Импорт таблиц Связь с таблицами
ОК
Отмена
Рис. 3.4. Диалоговое окно для выбора режима создания таблицы
Строка Создание таблицы в режиме конструктора (Create table in Design View) в рабочем поле окна базы данных или Конструктор (Design View) в окне Новая таблица (New Table) определяет выбор основного способа создания новой таблицы, при котором создание таблицы начинается с определения ее структуры в режиме конструирования. В этом режиме пользователь может сам установить параметры всех элементов структуры таблицы.
за
Часть I. Основы технологии Microsoft Access
Определение структуры новой таблицы в режиме конструктора При выборе режима конструктора таблиц выводится окно Таблица!: таблица (TableI: Table), в котором определяется структура таблицы базы данных (рис. 3.5). SB Таблица! : таблица Имя поля КОД_ТОВ
ь-и данны) Текстовый
Денежный Счетчик Логический Поле объекта OL Гиперссылка Мастер под с т аи о
Описание
С БОЙ СТ В а ПОЛЯ
Общие Размер поля Формат поля Маска ввода Подпись Значение по умолчанию Условие на значение Сообщение об ошибке Обязательное попе Пустые строки Индексированное поле Сжатие Юникод Режим IME Режим предложений IME Смарт-теги
Нет Да Нет Да Нет контроля Нет
Тип данных определяет значения, которые можно сохранять в этом попе. Для справки по типам данных нажмите клавишу F1.
Рис. 3.5. Окно определения структуры новой таблицы в режиме конструктора
При переходе в режим конструктора таблиц меняется состав команд меню, а панель инструментов База данных заменяется на панель инструментов Конструктор таблиц (Table Design) (рис. 3.6). Замечание Список названий панелей инструментов, где отмечаются активные панели инструментов, вызывается щелчком правой кнопки мыши на любой панели инструментов или строке меню команд Access. Название кнопки на панели инструментов появляется (всплывает) при установке курсора мыши на кнопку.
Глава 3. Создание базы данных Добавить или удалить кнопки * Конструктор таблиц
[добавить или удалить кнопки »
Конструктор таблиц * .' Настройка,.,
И
\
[:ил
•^ | ^J. Сохранить 4
r-'J^,
Ctrl+S
Поискфайлов.,,
v" • Jj Печать L Предварительный просмотр
.
Орфография,., •-'
/*
v [^J
F7
Вырезать
Ctrl+X
Копировать
Ctrl+C
v .^" Вставить
Ctrl+V
1
Iv i,J^<;.i Отменить PJ i; Вернуть
«/ ! -^ |
J
- •••:•-:. P.'."- IK.ilV
^ \'&М Индексы v \ -s
*^Ж Строки --•
• д-i-t TI rifiMi и
01 Э! Свойства
Alt+ENTER
^ !;3!Й Построить... ' • Г ^3 £кно базы данных
F1 1
v J -. jj; Создать объект •
^^^Ш Справка: Microsoft Office Access Fl ? Шш •———— I Cfipoc панели
Рис. 3.6. Панель инструментов конструктора таблиц
Определение полей таблицы Для определения поля в окне Таблица (Table) (см. рис. 3.5) заполняются поля Имя поля (Field Name), Тип данных (Data Type), Описание (Description) краткий комментарий — а также свойства поля в разделе Свойства поля (Field Properties). На вкладке Общие (General) представлены строки свойств поля, в том числе максимальный размер, подпись, которая выводится в заголовке столбца, значение по умолчанию и другие (см. рис. 3.5). На вкладке Подстановка (Lookup) выбирается тип элемента управления (Display Control): поле, список или поле со списком.
Часть I. Основы технологии Microsoft Access
9£
Имена полей и типы данных Имя поля (Field Name). Каждое поле в таблице должно иметь уникальное имя, удовлетворяющее соглашениям об именах объектов в Access. Оно является комбинацией букв, цифр, пробелов и специальных символов, за исключением точки ".", восклицательного знака"!", надстрочного знака и квадратных скобок"[ ]". Имя не может начинаться с пробела и содержать управляющие символы с кодами ASCII от 00 до 31. Максимальная длина имени — 64 символа. Тип данных (Data Type). Тип данных определяется значениями, которые предполагается хранить в поле, и операциями, которые будут выполняться с этими значениями. В Access допускается использование девяти типов данных. Список возможных типов данных вызывается нажатием кнопки списка при выборе типа данных каждого поля (см. рис. 3.5). Подробные сведения обо всех типах данных, поддерживаемых в Access, их назначении и размерах можно посмотреть в Справке к программе. В строке меню в поле Введите вопрос наберите "типы данных". В открывшейся области задач Справка Access просмотрите разделы: "Типы данных, которые могут иметь поля в Microsoft Access (MDB)" и "Типы данных и размеры полей (MDB)". Общие свойства поля Основные свойства задаются для каждого поля на вкладке Общие (General) и зависят от выбранного типа данных. Для отображения свойств поля необходимо установить курсор на строке соответствующего поля (см. рис. 3.5). Рассмотрим свойства полей, которые наиболее важны на первом этапе изучения баз данных. П Размер поля (Field Size) задает максимальный размер данных, сохраняемых в поле. Для поля с типом данных Текстовый задается размер от 1 до 255 знаков (по умолчанию 50 знаков). Для поля с типом данных Числовой можно задать следующие значения: • Байт (Byte) для целых чисел от 0 до 255, длина поля 1 байт; •
Целое (Integer) для целых чисел от -32 768 до 32 767, занимает 2 байта;
• Длинное целое (Long Integer) для целых чисел от -2 147 483 648 до 2 147 483 647, занимает 4 байта; •
Одинарное с плавающей точкой (Single) для чисел от —3,4хЮ38 до 3,4хЮ38 с точностью до 7 знаков, занимает 4 байта;
• Двойное с плавающей точкой (Double) для чисел от -1,797х 10308 до 1,797хЮ308 с точностью до 15 знаков, занимает 8 байт; • Действительное (Decimal) для целых чисел от —1038 — 1 до 1038 — 1 (при работе с проектами, которые хранятся в файлах с расширением adp) и от -1028 — 1 до 1028 - 1 (для файлов с расширением mdb) с точностью до 28 знаков, занимает 12 байт;
Глава 3. Создание базы данных • Код репликации (Replication ID). Глобальный уникальный идентификатор (Globally unique identifier, GUID), занимает 16 байт. Поля такого типа используются в Access для создания системных уникальных идентификаторов реплик, наборов реплик, таблиц, записей и других объектов при репликации баз данных. Для поля с типом данных Счетчик можно задать: • Длинное целое (Long Integer) — 4 байта; • Код репликации (Replication ID) — 16 байт. Рекомендуется задавать минимально допустимый размер поля, который понадобится для сохраняемых значений, т. к. сохранение таких полей требует меньше памяти и обработка данных меньшего размера выполняется быстрее. Изменения в данных, которые происходят вследствие изменения свойства Размер поля, нельзя отменить после их сохранения в конструкторе таблиц. П Формат поля (Format) является форматом отображения заданного типа данных при выводе их на экран или при печати в режиме таблицы, формы или отчета. В Access определены встроенные стандартные форматы отображения для полей с типами данных Числовой (Number), Дата/время (Date/Time), Логический (Yes/No) и Денежный (Currency). Ряд этих форматов совпадает с настройкой региональных форматов, определяемых в окне Язык и региональные стандарты панели управления Microsoft Windows. Пользователь может создать собственный формат для всех типов данных, кроме OLE, с помощью символов форматирования. Для указания конкретного формата отображения необходимо выбрать в раскрывающемся списке одно из значений свойства Формат поля (Format). П Число десятичных знаков (DecimalPlaces) задает для числового и денежного типов данных число знаков после запятой. Можно задать значение от 0 до 15. По умолчанию (значение Авто (Auto)) это число определяется установкой в свойстве Формат поля (Format). Следует иметь в виду, что установка этого свойства не действует, если свойство Формат поля (Format) не установлено или выбрано значение Основной (General Namber). Свойство Число десятичных знаков (DecimalPlaces) влияет только на количество десятичных знаков, отображаемых на экране, и не влияет на число сохраняемых десятичных знаков. Для изменения числа сохраняемых знаков нужно изменить свойство Размер поля (FieldSize). О Подпись (Caption) поля задает текст, который выводится в таблицах, формах, отчетах.
92
Часть I. Основы технологии Microsoft Access
G Значение по умолчанию (DefaultValue) определяет текст или выражение, которые автоматически вводятся в поле при создании новой записи. Например, если задана функция = N O W ( ) , то в поле будут введены текущие дата и время. При добавлении записи в таблицу можно оставить значение, введенное по умолчанию, или ввести другое. Свойство Значение по умолчанию (DefaultValue) используется только при создании новой записи. Максимальная длина значения свойства составляет 255 знаков. Свойство не определено для полей с типом данных Счетчик (AutoNumber) или Поле объекта OLE (OLE Object). О Условие на значение (ValidationRule) позволяет осуществлять контроль ввода, задавая ограничения на вводимые значения, и при нарушении условий запрещает ввод и выдает текст, заданный свойством Сообщение об ошибке (ValidationText). О Сообщение об ошибке (ValidationText) задает текст сообщения, выводимый на экран при нарушении ограничений, заданных свойством Условие на значение (ValidationRule). Внимание Элементы управления, созданные в формах или отчетах на основе поля таблицы, наследуют установленные для этого поля свойства. Благодаря этому не понадобится индивидуально определять свойства для каждого связанного с полем элемента управления.
Тип элемента управления Свойство Тип элемента управления (DisplayControl) задается в окне конструктора таблиц на вкладке Подстановка (Lookup) (см. рис. 3.5). Это свойство определяет, будет ли отображаться поле в таблице и в элементе управления формы в виде Поле (Text Box), Список (List Box) или Поле со списком (Combo Box). Если для поля выбран тип элемента управления Список (List Box) или Поле со списком (Combo Box), на вкладке Подстановка (Lookup) появляются дополнительные свойства, которые определяют источник данных для строк списка и ряд других характеристик списка. В качестве источника данных для списка выбирается таблица, с которой осуществляется постоянная связь, что обеспечивает актуальное состояние списка. Внимание Если для поля в столбце Тип данных выбрать Мастер подстановок (Lookup Wizard), то значения свойств на вкладке Подстановка (Lookup) будут заполнены мастером.
Глава 3. Создание базы данных
93
Определение первичного ключа Каждая таблица в реляционной базе данных должна иметь уникальный (первичный) ключ, однозначно определяющий каждую запись в таблице. Это позволяет быстро найти нужную запись, а также связать данные из разных таблиц в запросах, формах и отчетах. Ключевое поле должно содержать уникальные значения, такие как коды или инвентарные номера, и не может содержать значения Null. Если для таблицы определен первичный ключ, то Access предотвращает дублирование ключа или ввод значений Null в эти поля. Ключ может быть простым или составным, включающим несколько полей (до 10). Для определения ключа выделяются поля, составляющие ключ, и на панели инструментов Конструктор таблиц (Table Design) нажимается кнопка Ключевое поле (Primary Key) или выполняется команда меню Правка)Ключевое поле (Edit Primary Key). Для ключевого поля автоматически строится уникальный индекс. В этом можно убедиться, просмотрев информацию об индексах таблицы. Окно Индексы: <...> (Indexes: <...>) (рис. 3.7) вызывается щелчком на кнопке просмотра и редактирования индексов Индексы (Indexes) на панели инструментов или выполнением команды меню Вид)Индексы (View)Indexes).
f Индексы: ОТГРУЗКА Индекс
j PrimaryKeyJ
[5с]
1 Имя поля НОМ_НАКЛ KCVLCK КОД_ТОВ
I
Порядок сортировки По возрастанию По возрастанию По возрастанию
А
"'
Свойства индекса Ключевое поле Уникальный индекс Пропуск пустых полей
Да Да Нет
Имя данного индекса , j Каждый индекс может
Рис. 3.7. Уникальный индекс по составному первичному ключу таблицы ОТГРУЗКА
На рис. 3.7 показано, что индексу первичного ключа присвоено имя PrimaryKey, в столбце Имя поля (Field Name) перечисляются имена полей, составляющие индекс. Индекс первичного ключа всегда уникален и не допускает пустых полей в записях.
Замечание Индексы предназначены для осуществления быстрого поиска требуемых записей а больших таблицах Access по значению первичного или вторичного ключа. Индексы— это внутренние служебные таблицы, содержащие два столбца.
94
Часть I, Основы технологии Microsoft Access Первый содержит значение индексируемого поля, а второй — адреса всех записей, имеющих это значение в индексируемом поле. В индексной таблице производится упорядочение строк по значениям индексируемого поля, и это позволяет использовать методы быстрого поиска строки с заданным значением индексного поля, вместо последовательного просмотра строк таблицы. По адресу, содержащемуся в найденной строке индексной таблицы, осуществляется прямой доступ к искомой записи данных. Допускается не более 32 индексов на таблицу.
В качестве первичного ключа может быть задано поле с типом данных Счетчик (AutoNumber). В этом случае при добавлении каждой новой записи в таблицу в это поле автоматически вводятся уникальные целые последовательно возрастающие (на 1) или случайные числа. Указание такого поля является наиболее простым способом создания первичного ключа. Значение этого поля нельзя изменить или удалить. Длина поля — 4 байта для длинного целого, для кода репликации — J6 байт. По умолчанию в поле вводятся последовательные значения. В таблице не может быть более одного поля этого типа. Если первичный ключ не установлен пользователем до сохранения вновь созданной таблицы, Access спросит о необходимости создания первичного ключа. При утвердительном ответе Access создаст первичный ключ с типом данных Счетчик (AutoNumber).
Создание таблиц базы данных "Поставка товаров" Рассмотрим последовательность необходимых действий при создании таблиц на примере спроектированной в главе 2 базы данных "Поставка товаров". Напомним, что все объекты базы данных Access создаются и сохраняются в одном файле, который создается щелчком мыши в области задач на строке Новая база данных (New Database). В окне Файл новой базы данных (File New Database) выбирается папка, в которой будет размещен файл, и задается имя файла новой БД — "Поставка товаров.mdb" (см. рис.-3.2). В результате открывается окно (см. рис. 3.3) новой базы данных Поставка товаров: база данных (формат Access 2002 — 2003). В соответствии с технологией проектирования реляционной БД структура каждой таблицы базы данных "Поставка товаров" должна определяться составом реквизитов соответствующего информационного объекта в ИЛМ (см. табл. 2.3, 2.5, 2.6, 2.7 главы 2), Основные параметры структуры таблицы, соответствующей информационному объекту ТОВАР, представлены далее в табл. 3.1.
Глава 3. Создание базы данных
95
Создание структуры таблицы Начнем создание таблицы ТОВАР с определения ее структуры в режиме конструктора таблиц. В окне базы данных (см. рис. 3.3) выберем объект Таблицы (Tables) и нажмем кнопку Создать (New). В окне Новая таблица (New Table) (см. рис. 3.4) выберем строку Конструктор (Design View). Еще проще перейти в режим конструирования таблицы, дважды щелкнув на строке Создание таблицы в режиме конструктора (Create table in Design View) в pa бочем поле окна базы данных. В соответствии с приведенными в табл. 3.1 проектными параметрами структуры, последовательно для каждого поля таблицы ТОВАР в окне конструктора Таблица!: таблица (см. рис. 3.8) определим Имя поля (Field Name) и Тип данных (Data Type). ^Замечание
j
Денежный тип поля ЦЕНА используют для предотвращения округления во время вычислений. В денежных полях обеспечивается 15 знаков слева от десятичной запятой и 4 знака справа. Денежное поле занимает 8 байт на диске. На вкладке Общие (General) зададим свойства полей: О Размер поля (Field Size): • для числового поля СТАВКА_НДС выберем, нажав в нем кнопку списка, значение Одинарное с плавающей точкой (Single); • для текстовых полей зададим размеры, указанные в соответствующем столбце; П Формат поля (Format): • для поля ЦЕНА выберем значение Денежный (Currency). Денежные суммы в соответствии с установленным по умолчанию в Microsoft Windows значением будут отображаться в таком виде: 123 456 789,00 р; • для поля СТАВКА_НДС выберем значение Процентный. При отображении одинарных с плавающей точкой чисел в поле СТАВКА_НДС, для которых выбран встроенный формат поля Процентный, их значения умножаются на 100 и к ним добавляется знак процента. Ввод ставки НДС должен осуществляться в формате отображения, например, 15%, 7,5%; П Число десятичных знаков (DecimalPlaces) для поля СТАВКА_НДС — 0;
ЦЕНА -
2, для
а Подпись поля (Caption), Условие на значение (ValidationRule), Сообщение об ошибке (Validation-Text) — для каждого из этих полей выберем значения, указанные в табл. 3.1.
Часть I. Основы технологии Microsoft Access Таблица 3.1. Основные параметры структуры таблицы ТОВАР
Имя поля
Признак Обязапертельное винного поле ключа
Тип данных
Размер
КОД__ТОВ
Простой
Да
Текстовый
5
Код товара
НАИМ TOE
Нет
Текстовый
25
Наименование товара
ЦЕНА
Нет
Денежный
Нет
Текстовый
СТАВКА • НДС
Нет
Числовой
ФОТО
Нет
Поле объекта OLE
И
с
Формат
Денежный 8
ОдинарПроцентное с пла- ный вающей точкой
Число Подпись дес. поля знаков
2
Цена Единица измерения Ставка НДС
Фото товара
Замечание
~) Для поля СТАВКА_ндс необходимо предусмотреть условие на значение: >-о, 05 And <=0, 35 и сообщение об ошибке: "Ставка НДС должна быть >=5% и <=35%". Для поля ЦЕНА следует предусмотреть условие на значение; >=0 And <=35000 и сообщение об ошибке: "Цена должна быть >=0 и <:=35 000".
Условие на значение, которое задается в свойство поля, является выражением. Оно может быть сформировано с помощью построителя выражений (рис. 3.9). Построитель вызывается нажатием кнопки справа от строки Условие на значение (ValidationRule). в которую должно быть введено выражение в окне конструктора таблиц (см. рис. 3.8). Замечание Для ввода операторов <больи;е равно> и <меньше равно существуют специальные знаки. Не допускайте пробелов при вводе выражения. Нужные пробелы построитель введет сам.
После ввода выражения в окно построителя и нажатия кнопки OK Access выполнит синтаксический анализ выражения и отобразит его в строке Условие на значение (ValidationRule).
Глава 3. Создание базы данных
97
Ш ТОВАР : таблица Имя поля ^ КОД ТОВ НАИМ ТОБ ЦЕНА ЕЙ К СТАВКА „НДС ФОТО
_[
Тип данных Текстовый Текстовый Денежный Текстовый Числовой Поле объекта
Описание
|л
V
Свойства поля Общие
Подстановка |
Разиер поля Формат поля Число десятичных знаков Маска ввода Подпись Значение по умолчанию Условие на значение Сообщение об ошибке Обязательное поле Индексированное поле С пар т- теги
Одинарное с плавающей точкой Процентный 0 Ставка НДС 0 >=0,OSAnd <=0,35 Ставка НДС >-5 % и <=35% Нет Нет
[ ' :
Необязательный параметр. Выводится в строку состояния при выборе поля в форме. Для справки по > описанию поля нажмите клавишу F1.
Рис. 3.8. Определение свойств поля СТАВКА НДС Построитель выражений
Рис. 3.9. Окно построителя выражений с выведенным списком операторов сравнения
Теперь определим первичный ключ таблицы. Выделим поле кэд_тов, шелкнув кнопкой мыши на области маркировки слева от имени поля, и нажмем кнопку Ключевое поле (Primary Key). Признаком установки ключа является
98
Часть t. Основы технологии Microsoft Access
изображение ключа слева от имени поля. Определим свойства ключевого поля в соответствии с табл. 3.1. Сохраним созданную структуру таблицы и присвоим имя новой таблице ТОВАР. Для этого выполним команду Файл {Сохранить (File|Save) или нажмем кнопку панели инструментов конструктора Сохранить (Save). В окне Сохранение (Save As) заменим имя таблицы таблица! на ТОВАР (рис. 3.10). Сохранение Имя таблицы;
ОК Отмела
Рис. 3.10. Окно ввода имени сохраняемой таблицы
При сохранении таблицы происходит обновление файла базы данных, в которую помещается созданная таблица. Таблица ТОВАР появится в списке объектов Таблицы (Tables) в окне Поставка товаров: база данных. После сохранения структуры таблицы становится доступным режим, позволяющий перейти ко второму этапу создания таблицы — созданию записей. Переход в этот режим, называемый режимом таблицы, осуществляется нажатием кнопки Вид (View) на панели инструментов конструктора таблиц (см. рис. 3.6) или выбором этого режима при открытии списка на этой кнопке (рис. 3.11). Кнопка списка Конструктор таблиц
Кнопка Вид \ Конструктор Режим таблицы
—
Список режимов
Сводная таблица Сводная диаграмма
Рис. 3.11. Выбор режима представления таблицы
ЗАДАНИЕ 1. Создание таблиц базы данных Создайте структуру таблиц СКЛАД, НАКЛАДНАЯ, ОТГРУЗКА, ПОКУПАТЕЛЬ, ДОГОВОР, ПОСТАВКА_ПЛАН. При создании таблиц используйте проектные параметры их структуры (см. Приложение 1).
Глава 3. Создание базы данных
99
Рассмотрим некоторые особенности структуры таблиц ТОВАР, НАКЛАДНАЯ, ОТГРУЗКА, ПОКУПАТЕЛЬ, ДОГОВОР, постАВКА_плАн базы данных "Поставка товаров". Использование данных типа Поле объекта OLE В таблице ТОВАР предусмотрено поле ФОТО, которое должно содержать фотографию товара, хранящуюся в формате графического редактора Paint в файле с расширением bmp. Тип данных такого поля должен быть определен как Поле объекта OLE (OLE Object). Размещение этого объекта в поле производится на этапе заполнения полей таблицы в режиме таблицы или через форму. В режиме таблицы Access отобразит название объекта точечный рисунок. Отображение объекта возможно только в форме или отчете. Объект может быть внедренным или связанным.
Замечание OLE (Object Linking and Embedding — связывание и внедрение объектов) — это метод передачи информации в виде объектов между приложениями Windows. Поле объекта OLE является средством, позволяющим установить связь с объектами другого приложения или внедрить объект в базу данных. Объектом является документ или его часть, созданная в другом приложении, сохраняющая формат документа источника и информацию о создавшем его приложении. Объектами могут быть простые и форматированные тексты, рисунки, диаграммы, файлы звукозаписи (WAV), музыка в формате MIDI {музыкально-инсгрументальный цифровой интерфейс), файлы анимации (FLI, МММ), видеоклипы (AVI), электронные таблицы и другие элементы различных приложений, поддерживающих это средство. Access, поддерживая OLE, полностью интегрирован с другими приложениями Microsoft. Внедренный объект сохраняется в файле базы данных. Щелкнув дважды мышью на ячейке, содержащей внедренный объект, можно отредактировать объект средствами приложения, в котором он был создан. Связанный объект сохраняется в отдельном файле. Файл объекта можно обновлять независимо от базы данных. Последние изменения будут выведены на экран при следующем открытии формы или отчета. При работе с базой данных также можно просматривать и редактировать объект. Отредактированный связанный объект будет сохраняться в файле объекта, а не в файле базы данных. Связывание объекта удобно при работе с большими объектами, которые нежелательно включать в файл БД, а также с объектами, используемыми в различных документах организации, например, с логотипом. Если связанный файл объекта перемещен, необходимо повторно установить связь с ним. ^f Использование данных типа Поле MEMO В таблице ПОКУПАТЕЛЬ предусмотрено поле ОПИСАНИЕ, которое будет содержать текстовые данные большой длины — характеристику покупателя. Для такого поля выберите тип данных Поле MEMO (Memo). Ввод данных в это
100
Часть I. Основы технологии Microsoft Access
поле можно выполнить непосредственно в таблице либо через область ввода, вызываемую нажатием клавиш <Shift>+. Если тексты описаний покупателей подготовлены в некотором текстовом редакторе, например, в Microsoft Word, и хранятся в отдельных файлах, для этого поля удобно задать тип Поле объекта OLE (OLE Object). При вводе объекта в поле можно внедрить его в базу данных или установить связь с файлом объекта. Использование данных типа Гиперссылка Специальный тип данных Гиперссылка (Hyperlink) позволяет хранить гиперссылки в полях таблиц БД. Поля с типом данных Гиперссылка (Hyperlink) используются для перехода к объектам той же самой или другой базы данных Access к документам, созданным в различных приложениях Microsoft Office и расположенным на локальных или сетевых дисках, к страницам Web-серверов и документам других ресурсов в Интернете или локальной сети. При щелчке мышью на гиперссылке осуществляется переход к документу, который открывается создавшим его приложением. Подробно создание гиперссылок в таблицах будет рассмотрено далее (включая создание гиперссылки в поле ЮЕВ_АДРЕС таблицы ПОКУПАТЕЛЬ). Определение составного первичного ключа В таблице НАКЛАДНАЯ в составной первичный (уникальный) ключ входят поля НОМ_НАКЛ и код_ск. Для определения этого ключа в режиме конструктора таблиц надо выделить оба эти поля, щелкая кнопкой мыши на области маркировки при нажатой клавише , а затем нажать кнопку панели инструментов Ключевое поле (Primary Key). Аналогично
определяются
составные
ключи
в
таблицах
ОТГРУЗКА
и
ПОСТАВКА_ПЛАН.
Использование данных типа Дата/время В таблице ДОГОВОР для сохранения даты заключения договора предусмотрено поле ДАТА_ДОГ. Выберите для этого поля тип данных Дата/время. Для отображения данных этого типа может быть выбран Краткий, Средний или Длинный формат даты. Образцы дат в каждом из форматов показаны в строках списка при выборе формата. Маска ввода для даты и текста Для удобства ввода даты в таблице ДОГОВОР целесообразно в свойствах поля ДАТА_ДОГ определить маску ввода. Маска ввода задает формат, состоящий из постоянных символов (таких как скобки, точки или дефисы) и специальных символов маски, указывающих, в какие позиции, в каком количестве и ка-
Глава 3. Созданме базы данных
101
кого типа данные могут быть введены. Например, маска для ввода даты в кратком формате имеет вид 00.00.0000, в среднем формате — 00->L" и "<" указывают на перевод всех следующих знаков в верхний и нижний регистр соответственно. Воспользуйтесь значком построителя в конце строки Маска ввода для вызова мастера, который позволит без труда сформировать маску ввода. Для ввода номера телефона в поле ТЕЛ таблицы ПОКУПАТЕЛЬ определите: маску (999)000-0099, также воспользовавшись мастером. Эта маска позволит вводить номера телефонов с кодами городов и без них. Число цифр в номере телефона не может быть менее 5 и более 7. Знак 9 означает, что вместо цифр кода можно ввести пробелы, а последние две цифры номера вводить необязательно.
Непосредственный ввод данных в таблицы Определив структуру, можно приступить ко второму этапу создания таблицы — вводу данных в нее. Непосредственный ввод данных в таблицу осуществляется в режиме таблицы (Datasheet View). Переход в этот режим из окна базы данных выполняется нажатием кнопки Открыть (Open) при выделенной таблице в окне базы данных (см. рис. 3.3). Переход в режим таблицы из режима конструктора выполняется нажатием кнопки Вид (View) на панели инструментов (см. рис. 3.6) или выполнением команды Вид)Режим таблицы (ViewjDatasheet). В этом режиме отображается панель инструментов Таблица в режиме таблицы (Table Datasheet), показанная на рис. 3.12. В режиме таблицы предоставляется возможность вводить новые записи в таблицу, заполняя значениями ее поля. Дополнение таблицы новыми записями и редактирование записей разрешено по умолчанию, т. к. по умолчанию пользователь работает под логином администратора (Admin) и ему предоставлены все право доступа к объектам базы данных. Просмотреть и изменить права доступа к данным таблицы можно по команде Сервис|Защита|Разрешения (Tools|Security|User And Group Permissions). При дополнении таблицы новыми записями может быть использован режим ввода записи, при котором видна только вводимая запись. Выполнение команды Записи|Ввод данных (Records|Data Entry) позволяет перейти в этот
102
Часть I. Основы технологии Microsoft Access
режим. Для возврата к просмотру всей таблицы надо выполнить команду Записи (Удалить фильтр (Records|Remove Filter/Sort).
Добавить или удалить кнопки * де
и
,37. .# Добавить или удалить кнопки
я* Таблица в режиме таблицы Настройка..,
Вид
ч* haJi Сохранить
Ctrl+S
v | -^ Поиск файлов,,Печать Ж Предварительный просмотр F7
Орфография,.,
СЫ+Х Копировать
CW+C
Вставить
Ctrl+V
Отмена невозможна
CtH+Z
Гиперссылка,.,
CW+K
Сортировка по возрастанию Сортировка по убыванию Фильтр по выделенному Изменить фильтр Применить фильтр Найти...
Ctrl+F
Новая запись
Ctrl++
Удалить запись QKHO базы данных
м ЙД ^правка:
F1I
Создать объект Microsoft Office Access
Fl
расширенный фильтр.,. '•--У Сетка Высота строки... Ширина столбца,.. Сброс панели
Рис. 3.12. Панель инструментов Таблица в режиме таблицы
Очевидно, что вводимые в поля таблицы значения данных должны соответствовать типам данных, определенным в структуре, а способ их записи -
Глава 3. Создание базы данных
103
допустимым в текущий момент форматам данных. Значения должны удовлетворять накладываемым ограничениям. После ввода значения в ячейку поля при попытке перейти к другой ячейке Access проверяет, являются ли введенные данные допустимыми для этого поля. Если введено значение, не соответствуюш,ее типу данных поля, Access пытается преобразовать его в правильный тип данных. Если значение не является допустимым и преобразование невозможно, например, нельзя преобразовать текст в число, появляется предупреждающее сообщение. Для того чтобы выйти из ячейки, следует ввести правильное значение или отменить внесенные изменения. При заполнении связанных таблиц необходимо обеспечить правильность связей между записями этих таблиц. Так, при одно-многозначных связях таблиц и вводе записей в подчиненную таблицу необходимо отслеживать наличие в главной таблице записей с соответствующими значениями ключевых полей. При изменении или удалении ключевых полей в записях главной таблицы необходимо изменять или удалять связанные с ними записи в подчиненных таблицах.
Макет таблицы Для удобства работы с таблицей можно изменить ее представление на экране. При этом можно менять ширину столбца, высоту строки, шрифт данных таблицы, цвет текста, линий сетки и фона, оформление, которое может быть обычным, приподнятым или утопленным. Можно выводить на экран только те столбцы, которые нужны для текущей работы, можно зафиксировать столбец при просмотре широких таблиц. Эти параметры отображения таблицы на экране называются макетом таблицы и сохраняются вместе с ней. Настройка макета выполняется в режиме таблицы. При этом могут быть использованы команды меню Формат (Format) или панель инструментов Формат (режим таблицы) (Formatting (Datasheet)), которую можно вызвать из контекстного меню на доступной панели инструментов. Многие операции настройки макета можно выполнить непосредственно в таблице с помощью мыши: О изменение ширины столбца. Для изменения ширины столбца курсор мыши устанавливается на линию, разделяющую имена столбцов. При этом он превращается в планочку со стрелками влево и вправо. Далее границу столбца можно перетащить в нужное место; П изменение высоты строки. Для изменения высоты строки курсор мыши устанавливается в области маркировки записи, расположенной слева, на границе между записями. Граница строки перетаскивается на требуемое расстояние, При этом изменяется высота всех строк таблицы;
104
Часть I. Основы технологии Microsoft Access
П удаление столбцов с экрана. Убрать столбец можно, перетащив его правую границу влево до исчезновения столбца; П изменение порядка расположения столбцов на экране. Столбец выделяется щелчком кнопки мыши на его имени. Протащив курсор мыши поперек столбцов, можно выделить несколько столбцов. Выделенный столбец перетаскивается в новое место при установке курсора на его имени (области маркировки столбца); Н скрытие столбцов, ненужных для текущей работы, закрепление столбцов, а также отмена этих действий могут быть выполнены при помощи соответствующих команд меню Формат (Format); О сохранение макета таблицы выполняется командой Файл(Сохранить (File|Save Layout) или при закрытии таблицы после утвердительного ответа на вопрос "Сохранить изменения макета таблицы '<имя таблицы>'Т (Do you want to save changes to the layout of table <имя таблицы>1).
Ввод данных в таблицы БД "Поставка товаров" В режиме таблицы введем несколько записей в таблицу ТОВАР. В окне Поставка товаров: база данных установим курсор на таблице ТОВАР и нажмем кнопку Открыть (Open). Таблица откроется в режиме таблицы (Datasheet View). Заполним строки (записи) открывшейся таблицы (рис. 3.13) в соответствии с названиями столбцов (полей). Для ввода используем исходные данные, приведенные в При-аожении 2. Ш ТОВАР : таблица Код товара 031 002 003
Наименование товара [ Цена [Единица иэм]Ставкэ НДС Фото товара ;Монитор 17LG 6587,СЮр. штука 5%; Точечный рисунок 20%: Точечный рисунок FDD 3,5 363,00р. коробка : HDDMax1or20GB 2590,00р. штука 10%: Точечный рисунок Корпус MiniTower 916,00р. штука CD-ROM Panasonic IDE 1 153,00р. 1 штука 360,00р. штука DIMM64MPC10Q Принтер EPSON ST.A4 2432,00р. штука СканерАсег 2 338,00р. штука Зв. Карта Genius Liv 789,00р. штука Модем Genius ext 1 295,00р. .штука 'О 00р. " 10 Н И |>#1 из 10
Маркер строки, в которую вводится новая запись
Маркер строки, в которую вносятся изменения
Кнопки перехода по записям Рис. 3.13. Непосредственный ввод записей в таблицу ТОВАР
Глава 3. Создание базы данных
105
Корректность вводимых данных (соответствие заданному типу поля, размеру и условию на значение, которые определены в свойствах полей в режиме конструктора) проверяется автоматически при их вводе. Отслеживается уникальность значений ключевых полей. Отменить ввод значения в поле до перехода к другому полю можно, нажав клавишу <Esc> или выполнив команду Правка]Отменить ввод. Переход от одного поля к другому можно выполнить клавишей <ТаЬ> или переводом курсора. Отмена ввода значения в поле после перехода к другому полю текущей записи (до перехода к другой записи) происходит с помощью клавиши <Esc> или команды Правка|Восстановить текущее поле/запись (Edit| Undo Current Field/Record). Завершение ввода новых значений записи или редактирования осуществляется при переходе к любой другой записи (при смене текущей записи). После перехода к другой записи можно отменить ввод (редактирование) всей записи, выполнив команду Правка|Восстановнть запись (Edit Undo Saved Record).
Внимание Команда Восстановить (Undo) занимает одну позицию в меню, но в зависимости от контекста приобретает различный смысл и наименование. Это же касается и соответствующей кнопки панели инструментов, всплывающая подсказка которой сообщает о текущем ее назначении. По этой команде может быть отменено только одно последнее действие.
Добавление записи в таблицу начинается с заполнения пустой строки, размещенной в конце таблицы и помеченной звездочкой (*). Переход к этой ка|Перейти]Пиния вая запись (New (Table Dataslieet). даша.
записи можно выполнить также по команде Правзапись (Edit|Go To|New Record) или нажатием кнопки НоRecord) панели инструментов Таблица в режиме таблицы Корректируемая запись помечается слева символом каран-
Замечание Для создания новой записи должны быть обязательно заполнены ключевые поля, обязательные поля, а также поля связи, если установлены связи таблицы с другими таблицами.
Сохранение новой записи происходит после перехода к другой записи или выполнения команды Записи] Сохранить запись (Records Save Record). Для удаления записи в таблице ее нужно сделать текущей и нажать кнопку панели инструментов Удалить запись (Delete Record) или выполнить соответствующую команду Правка|Удалить запись (Edit|Delete Record). Для исключения ошибочного удаления в Access предусмотрен запрос на подтвер-
Часть I. Основы технологии Microsoft Access
106
ждение удаления. После подтверждения на удаление восстановление удаленной строки невозможно. Изменение значений в полях записи осуществляется непосредственно в ячейках таблицы. Введенное значение проверяется Access при попытке перевода курсора в другое поле. Если значение не является допустимым, появляется предупреждающее сообщение. Для того чтобы выйти из поля, следует ввести правильное значение или отменить внесенные изменения. Отмена изменения значения производится нажатием кнопки Восстановить текущее поле/Запись (Undo Typing). Откорректированная запись сохраняется после перехода к другой записи или принудительного сохранения командой Записи) Сохранить запись (Records|Save Record).
Размещение объекта OLE Рассмотрим размещение объекта OLE на примере поля ФОТО в таблице ТОВАР. Пусть фотографии хранятся в формате графического редактора Paint в файлах с расширением bmp. Рассмотрим вариант внедрения объекта в файл базы данных. Установим курсор в соответствующем поле таблицы (CMI рис. 3.13). Выполним команду меню Вставка]Объект (Insert|Object). В открывающемся окне (рис. 3.14) надо отметить переключатель Создать из файла (Create from File). Microsoft Office Access Тип объекта: *• Создать новый Г Создать из файла
OK
1
Звукозапись j Клип мультимедиа I Лист Microsoft Excel ;Пакет , Презентация Microsoft PowerPoint 1 Рисунок Microsoft Word РИСУНОК Paintbrush !_Слаид Microsoft PowerPoint
Отмена Г" В виде значка
г Результат Добавление в документ нового объекта типа 'Рисунок Paintbrush'.
Рис. 3.14. Окно для выбора варианта вставки объекта
В следующем окне (рис. 3.15) можно ввести имя файла с фотографией. Для поиска файла можно воспользоваться кнопкой Обзор (Browse), после нажатия которой появится диалоговое окно, позволяющее просмотреть диски и папки и выбрать необходимый файл.
Глава 3. Создание базы данных
107
Microsoft Office Access Файл: *** Создать новый
;E;\Documents and Settings\NVP\MoK докуме|!
(* Создать из файла
Отмена Г" g виде значка
Результат - -
гай
Добавление в документ содержимого файла в виде активизируемого с помощью создавшего его приложения,
Рис. 3.15. Окно для выбора вставляемого объекта из файла
Внимание Флажок Связь (Link) по умолчанию не отмечен и, следовательно, содержимое файла будет введено в поле как внедренный объект. Увидеть содержимое поля можно через форму или отчет. Дальнейшие изменения файла не будут отражаться на встроенном объекте. Для ввода в поле связанного объекта надо установить флажок Связь (Link). Это сэкономит место в базе данных и даст возможность отображать все изменения, вносимые в файл другими приложениями.
Результат заполнения таблицы представлен на рис. 3.13, приведенном ранее, где в соответствующем поле указан вид объекта — точечный рисунок. Для просмотра внедренного объекта достаточно установить в соответствующем поле курсор и дважды щелкнуть кнопкой мыши. Для отображения содержимого поля в виде значка, представляющего файл с документом, в окне Вставка объекта (Insert Object) нужно установить флажок В виде значка (Display As Icon). Значок может быть использован для представления связанного объекта.
Ввод логически связанных записей Введем несколько логически взаимосвязанных записей в таблицы ДОГОВОР и поставкА_плАН. Логическая связь этих таблиц обеспечивается полем ном_дог -- номером договора, входящим в структуру обеих таблиц. Объекты ДОГОВОР и ПОСТАВКА_ПЛАН связаны одно-многозначными отношениями. Связь таких таблиц реализуется в схеме данных с помощью ключа главной таблицы ДОГОВОР. В подчиненной таблице это поле связи является в данном случае частью ее составного ключа. Пока не создана схема данных, в которой устанавливаются связи между таблицами, система не может кон-
Часть I. Основы технологии Microsoft Access
тролировать логическую взаимосвязь вводимых данных. Поэтому для получения целостной базы, в которой каждая запись подчиненной таблицы имеет логически связанную с ней главную запись, пользователю придется самому отслеживать взаимосвязи записей. При вводе подчиненной записи в таблицу ПОСТАВКА_ПЛАН необходимо проверять наличие записи в главной таблице ДОГОВОР с ключом, значение которого совпадает со значением поля связи (внешнего ключа) в подчиненной записи. То есть при добавлении строки плана поставки для договора дш необходимо, чтобы договор с этим номером уже был представлен в таблице ДОГОВОР. При непосредственном вводе записей во взаимосвязанные таблицы полезно отобразить на экране обе таблицы (рис. 3.16).
НОМДОГ
дш Д222 ДЗЗЗ Д444 Д555
ДАТ;
КОД_ПОК 08.01.2003 П001
Н ПОСТАВКД_ПЛАН : таблица КОГД_ТОВ
CPOKJIOCT | МИН_ПОСТ | КОЛ_ПОСТ
• Запись:
И
Запись:
Рис. 3.16. Таблицы ДОГОВОР и ПОСТАВКА_ППАН при вводе логически связанных записей
Для удобного отображения открытых таблиц можно воспользоваться командой меню Сверху вниз (Tile Horizontally) или Слева направо (Tile Vertically) в меню Окно (Windows).
Замечание
)
Далее, в разд. "Отображение записей подчиненных таблице главной таблице", показано, что при наличии установленных связей в схеме данных между таблицами имеется возможность отображать связанные записи подчиненных таблиц при просмотре главной таблицы. Это позволяет осуществлять автоматический контроль за корректностью связей логически связанных таблиц при добавлении, удалении и редактировании записей.
Глава 3. Создание базы данных
109
Использование поля со списком при вводе записей Задачу ввода подчиненных записей только при наличии связанной записи в главной таблице можно решить с помощью поля со списком. Для этого достаточно в подчиненной таблице преобразовать поле связи в поле со списком. В качестве источника строк для списка можно использовать значения ключевого поля из главной таблицы. Создадим в таблице ПОСТАВКА_ПЛАН для поля ном_дсг (номер договора) поле со списком, построенным на основе ключа таблицы ДОГОВОР. Для этого откроем таблицу ПОСТАВКА_ПЛАН в режиме конструктора (см. рис. 3.5). Установим курсор в поле ном_дог на столбце Тип данных (Data Type), откроем список и выберем строку Мастер подстановок (Lookup Wizard). В открывшемся окне мастера Создание подстановки (Create Lookup) установим флажок на строке, которая приведет к построению списка на основе значений из таблицы (рис. 3.17).
Создание подстановки Мастер создает столбец подстановки, в которой отображается список значений для выбора. Каким способом столбец подстановки будет получать эти значения? 9 (• |0бъект "столбец подстановки" будет использовать | знамени я из таблицы или запроса, *~ будет введен фиксированный набор значений.
Отмена
Рис. 3.17. Первое окно Мастера подстановок
В следующем окне мастера выберем таблицу ДОГОВОР, на значениях из которой будет строиться список поля (рис. 3.18). Далее выберем столбец, из данных которого будет формироваться список (рис. 3.19).
Часть I. Основы технологии Microsoft Access
110
Создание подстановки Выберите таблицу или запрос со значениями, которые будет содержать столбец подстановки.
Таблица; ЗАПАС Таблица; НАКЛАДНАЯ Таблица; ОТГРУЗКА Таблица: ПП_ПОРУЧЕНИЕ Таблица: ПОКУПАТЕЛЬ Таблица; СКЛАД Таблица; ТОЕАР
-'
Показать (Г Таблицы
Отмена
Г Запросы
С Таблицы и запросы
< Назад
Рис. 3.18. Выбор таблицы, из данных которой будет создаваться список Создание подстановки Какие поля содержат значениял которые следует включить в столбец подстановки? Отобранные поля станут столбцами в объекте "столбец подстановки".
Доступные поля;
Выбранные поля:
ДАТА ЛОГ КОД_ПОК СУММА_ДОГ
НОМ ДОГ
Отмена
< Назад
I
Далее >
Рис. 3.19. Выбор поля, используемого для формирования списка
В следующих окнах мастера выберем нужную ширину столбца списка и его подпись. На этом создание мастером поля со списком завершается. Пара-
Глава 3. Создание базы данных
111
мегры списка, подготовленные мастером, отображаются в области Свойства поля на вкладке Подстановка (рис. 3.20). Ш ПОСТАВКА_ПЛАН : таблица Имя поля
J?» НОМ^ДОГ КОД_ТОВ 1
7'
MHHJTOCT КОГГПОСТ " СУММА ПОСТ
Тип данных Текстовый Текстовый Чисповой Числовой Числовой : Денежный
Описание
Свойства поля
Тип источника строк Источник строк Присоединенный столбец Число столбцов Заглавия столбцов Ширина столбцов Число строк списка Ширина списка Ограничиться списком
-
Таблица или запрос 5ELECT ДОГОВОР,НОМ_ДОГ FROM ДОГОВОР; 1
1 Нет 2., 54см 8 2,54см Нет
Рис. 3.20. Свойства поля со списком, созданного мастером подстановок, для номера договора
Теперь при вводе данных в таблицу ПОСТАВКА_ПЛАН можно воспользоваться списком, в котором отобразятся все значения поля ном_дог, содержащиеся в таблице ДОГОВОР (рис. 3.21). Выбором нужного значения из списка осуществляется ввод значения в поле ном_дог. Наличие поля со списком не запрещает ввод в поле ном__дог значений, не указанных в списке. Однако если при определении параметров списка на вкладке Подстановка в окне конструктора (см. рис. 3.20) выбрать в строке Ограничиться списком значение Да, ввод значений, не предусмотренных в списке, будет невозможен. В случае отклонения от значений списка система выдаст сообщение, показанное на рис. 3.22. В результате пользователь вынужден будет придерживаться только значений, представленных в списке, и в подчиненную таблицу будут введены только связанные записи. Таким образом, использование списков не только обеспечивает удобный ввод, но позволяет избежать многих ошибок.
112
Часть I. Основы технологии Microsoft Access
В ПОСТДВКАЛЛАН : таблица KQflJQB
| СРОК_ПОСТ
Д111 Д111 ДШ Д111
МИН_ПОСТ |
КОЛ_ПОСТ
100 20
10 1 2 2 3 0
Т001 TQ01 TQ03 Т004
Н
10 4 5 15 0
"эр ~50
100 12 10 30 0
из 1C
Рис. 3.21. Ввод значения в поле выбором из списка
Microsoft Office Access Введенный текст не соответствует ни одному из элементов списка. Выберите элемент из списка или введите текст, соответствующий одному из этих элементов.
•
Рис. 3.22. Сообщение о неверно введенном значении
Рассмотрим еще один пример использования поля со списком. Преобразуем в таблице ПОСТАВКА_ПЛАН поле код_тов (код товара) в поле со списком. Для этого откроем таблицу в режиме конструктора, установим курсор в поле код_тов на столбце Тип данных (Data Type), откроем список этого столбца и выберем строку Мастер подстановок (Lookup Wizard). В диалоге с мастером выберем главную по отношению к таблице ПОСТАВКА_ПЛАН таблицу ТОВАР, на основе которой создается список, и поля, включаемые в список: код_тов (код товара) и НАИМ_ТОВ (наименование товара). Кроме того, оставим, как предлагает мастер, помеченным флажок Скрыть ключевой столбец (рекомендуется). Результат работы мастера представлен на рис. 3.23. При выборе параметра Скрыть ключевой столбец (рекомендуется) для первого столбца списка устанавливается ширина, равная нулю. При этом параметр Ограничиться списком может принимать только одно значение — Да (рис. 3.24).
Глава 3. Создание базы данных to ПОСТАВКА_ПЛАН : таблица Имя поля НОМ_ДОГ КОД_ТОВ CPOKJTpCT МИН ПОСТ KOJTJIOCT СУММА_ГЮСТ
Тип данных
Текстовый Текстовый! Числовой Числовой
Описание
.Числовой Денежный Свойства поля
Общие
Подстановка 1
Тип элемента управления Попе со списком Тип источника строк Таблица или запрос Источник строк SELECT ТОВАР.КОД_ТОВ, Т 0В АР, НА ИМ JOB FR< Присоединенный столбец 1 Число столбцов 2 Заглавия столбцов Нет Ширина столбцов Оси; 3,836см Число строк списка 8 Ширина списка 3,836см Ограничиться списком
Рис. 3.23. Свойства поля со списком, созданного Мастером подстановок для кода товара Microsoft Office Access 6 данное время приложению 'Microsoft Office Access' не удается задать для свойства "Ограничиться списком" (Limit To List) значение "Нет". " Первый отображаемый столбец, определяемый свойством "Ширина столбцов" (ColumnWtdths), не соответствует присоединенному столбцу, Измените значение "Ширина столбцов", а затем установите значение свойства "Ограничиться списком".
)К
Рис. 3.24. Сообщение при попытке изменить свойство Ограничиться списком
Определение поля со списком с такими параметрами приводит к отображению в поле ко,п_тов вместо значений ключевого поля значений второго поля списка — поля ндим__тов (наименование товара), взятого из главной таблицы ТОВАР. На рис. 3.25 показано, как в таблице ПОСТАВКА_ПЛАН отображается поле со списком код товара при нулевой ширине присоединенного столбца.
Часть I. Основы технологии Microsoft Access
114
ffi®
Ш ПОСТАВКАЛЛЛН : таблица
код_тов
ном лог Д111 Д111 Д111 Д111 Д111 Д222 Д222 Д222 Д222 > ДЗЗЗ Ж
Запись; J4 | f | (
СРОК ПОСТ МИН ПОСТ 1 10 2 . 5 3 ! 5 1 10 3 5 1 10 2 4 2 5 3 15 1 10' 0 0
Монитор 17LG Монитор 17LG Монитор 17LG FDD 3,5 FDD 3,5 Монитор 17LG Монитор 17LG HDD Max!or20GB Корпус MiniTower L U-ROM Panasonic IDEl HDD Maxtor20GE Корпус MiniTower DIMM64MPC100 Принтер EPSON ST.A4 СканерАсег Зв. Карта Genius Liv Модем Genius ext
Ч
I
кол пост 100 20 " 30 50 10
100 12 10 30 40 0
Al
v
Рис. 3.25. Отображение поля со списком КОД_ТОВ при нулевой ширине присоединенного столбца
Таким образом, использование полей со списком поможет избежать ошибок при вводе связанных записей в таблицы как за счет того, что в таблицах вместо ключей могут быть отображены смысловые значения, так и за счет того, что ввод ограничивается набором значений в списке. Внимание При создании полей со списком Мастер подстановки автоматически создает связь между таблицей, в которой создается поле со списком, и таблицей, являющейся источником значений списка. Эту связь можно увидеть в Схеме данных (Relationships), щелкнув на кнопке панели инструментов Отобразить все связи (Show All).
Очевидно, что в базе данных сложной структуры при вводе данных непосредственно в таблицы не гарантируется надежное и корректное обслуживание данных. В рассматриваемом примере базы данных "Поставка товаров" (см. рис. 2.19) при вводе данных в таблицы нижних уровней надо отслеживать несколько вышестоящих. При большом объеме данных это очень затруднительно. Далее будут рассмотрены средства Access, позволяющие автоматизировать контроль связной целостности и сделать загрузку базы данных простой и удобной процедурой. К таким средствам относятся, прежде всего, Схема
Глава 3. Создание базы данных
175
данных (Relationships) и Формы (Forms). Кроме того, может быть использовано такое простое средство, как отображение в главной таблице записей подчиненных таблиц нескольких уровней — подтаблиц. ЗАДАНИЕ 2. Создание полей со списком Создайте поле со списком для отображения в таблице ДОГОВОР наименований покупателей, в таблице ОТГРУЗКА — кодов и наименований товаров, в таблице НАКЛАДНАЯ — кодов и наименований складов. Контрольные вопросы по созданию базы данных 1. В файле какого типа сохраняется база данных Access? 2. Какие объекты представлены в окне базы данных? 3. Чем определяется состав полей таблицы? 4. Чем определяется структура таблицы? 5. В каком режиме наиболее полно определяются параметры структуры таблицы? 6. В каком свойстве поля задаются ограничения на его значения? 7. На что влияет свойство Формат поля? 8. Что формирует система на основе заданного первичного ключа? 9. Для чего служат индексы в таблице? 10. Значение какого свойства поля используется при формировании заголовка соответствующего столбца таблицы? 11. Может ли ключ иметь повторяющиеся значения? 12. Можно ли в строке таблицы не вводить значение ключа? 13. Могут ли в таблице повторяться значения в одном из полей составного ключа? • 14. В каком режиме осуществляется ввод данных в таблицу? 15. Назовите кнопки перехода по записям таблицы. 16. В каком режиме выполняется настройка макета таблицы? 17. С помощью какой команды выполняется внедрение объекта в поле с типом данных OLE?
•-', **.; " i f . f l
-S
Ответы t. .mdb.
2. Таблицы, запросы, формы, отчеты, страницы, макросы и модули. 3. Реквизитным составом информационного объекта информационнологической модели предметной области. 5 Зак. 835
176
Часть I. Основы технологии Microsoft Access
4. Составом ее полей, для которых заданы имя, тип данных и свойства. 5. В режиме конструктора. 6. Условие на значение. 7. На вид отображаемого данного. 8. Уникальный индекс с именем PrimaryKey. 9. Для более быстрого поиска записи (записей) по заданному значению индексного поля (полей). 10. Подпись.
11. Нет. 12. Her. 13. Да.
14. В режиме таблицы. 15. Первая запись, Предыдущая запись, Следующая запись, Последняя запись, Новая запись. 16. В режиме таблицы. 17. Всгавка|Обьект (Insert(Object).
Схема данных в Access Реляционная база данных, созданная в соответствии с проектом канонической модели данных предметной области, состоит из нормализованных таблиц, связанных одно-многозначными отношениями. В такой базе данных обеспечивается отсутствие дублирования данных, однократный ввод, поддержание целостности данных средствами системы. В процессе загрузки и корректировки базы данных для получения информации по запросам и вывода отчетов, а также для решения большинства задач осуществляется объединение данных из взаимосвязанных таблиц. Связи между таблицами устанавливаются в соответствии с проектом логической структуры базы данных (см. рис. 2.19), определяются и запоминаются в схеме данных Access. Схема данных является не только средством графического отображения логической структуры базы данных, она активно используется системой в процессе обработки данных. Система при необходимости обработки данных двух взаимосвязанных таблиц автоматически использует связи, определенные в схеме данных. Таким образом, у разработчика нет необходимости специально сообщать системе о наличии той или иной связи. Однажды указанные в схеме данных связи используются системой автоматически.
Глава 3. Создание базы данных
117
Создание схемы данных позволяет упростить конструирование многотабличных форм, запросов, отчетов и страниц доступа к данным, а также обеспечить поддержание целостности взаимосвязанных данных при корректировке таблиц.
Создание схемы базы данных "Поставка товаров" Рассмотрим процесс создания схемы данных, соответствующей логической структуре базы данных "Поставка товаров", разработка которой рассмотрена в главе 2. Создание схемы данных начинается при активном окне Поставка товаров: База данных (Database) с выполнения команды Сервис|Схема данных. (Tools Relationships) или нажатия кнопки Схема данных (Relationships.) ,
) на панели инструментов базы данных, после которого открываются окно схемы данных и диалоговое окно для выбора таблиц, включаемых в схему.
Включение таблиц в схему данных В окне Добавление таблицы (Show Table) (рис. 3.26) выберем закладку Таблицы (Tables) и, нажимая кнопку Добавить (Add), разместим в окне Схема данных (Relationships) все ранее созданные таблицы базы данных "Поставка товаров", которые отображены в окне Добавление таблицы (Show Table). Затем нажмем кнопку Закрыть (Close). В результате в окне Схема данных (Relationships) таблицы базы будут представлены окнами со списками своих полей и выделенными жирным шрифтом ключами (см. далее рис. 3.30). Теперь можно приступать к созданию связей между таблицами. Добавление таблицы Таблицы ]Запросы Таблицы и запросы |
Добавить
! НАКЛАДНАЯ ОТГРУЗКА ПОКУПАТЕЛЬ iПОСТАВКА ПЛАН СКЛАД ТОВАР
Рис. 3.26. Добавление таблиц в схему данных
Часть \. Основы технологии Microsoft Access
118
Создание связей между таблицами схемы данных При создании связей в схеме данных используем проект логической структуры базы данных, в котором показаны одно-многозначные связи. Каждая из этих связей устанавливается по ключу связи (простому или составному). Такой ключ в одной из связанных таблиц (главной) должен быть уникальным ключом, а в другой таблице может являться частью уникального ключа или не входить в состав ключа таблицы. Одно-многозначные связи — основные в реляционных базах данных. Одно-однозначные связи используются лишь в случаях, когда приходится распределять большое количество полей, определяемых одним и тем же ключом, по разным таблицам, имеющим разный регламент обслуживания. Создание связей по простому ключу. Установим связь между таблицами ПОКУПАТЕЛЬ и ДОГОВОР, которые находятся в отношении один-ко-многим. Устанавливая связи между парой таблиц, находящихся в отношении типа I:M, выделим в главной таблице ПОКУПАТЕЛЬ ключевое поле код_пок, по которому устанавливается связь. Далее, удерживая нажатой кнопку мыши, перетащим его в соответствующее поле подчиненной таблицы ДОГОВОР. Поскольку поле связи является уникальным ключом в главной таблице связи, а в подчиненной таблице связи не является ключевым, Access выявляет отношение один-ко-многим между записями этих таблиц. Значение одинко-многим (One-To-Many) отобразится в окне Изменение связей (Edit Relationships) в строке Тип отношения (Relationship Type) (рис. 3.27).
Изменение связей .
ПпИм
Таблица/запрос:
Связанная таблица/запрос;
(ПОКУПАТЕЛЬ
|ДОГОВОР
КОД ПОК
КОДГЮК
: л
Создать Отмена Объединение.,. ]
rJ7 Обеспечение целостности данных Р
(Новое. ,
каскадное обновление связанных полей
Р Каскадное удаление связанных записей! Тип отношения:
один-ко-многим
Рис. 3.27. Окно определения параметров связи
Глава 3. Создание базы данных
119
)
Замечание
Если поле связи является уникальным ключом в обеих связываемых таблицах, Access выявляет отношение один-к-одному Если для связи таблиц вместо ключевого поля таблицы используется некоторый уникальный индекс, система также констатирует отношение таблиц как 1:М или 1:1.
ЗАДАНИЕ 3. Создание связей по простому ключу Добавьте в схему данных и установите связь по простому ключу для других пар таблиц базы данных "Поставка товаров": СКЛАД —> НАКЛАДНАЯ (ключ КОД_СК), ДОГОВОР -> ПОСТАВКА_Ш1АН (КЛЮЧ
КОД__ТОВ),
ТОВАР
-^
(КЛЮЧ
ПОСТАВКА_ПЛАН
НОМ_ДОГ), (КЛЮЧ
ТОВАР —> ОТГРУЗКА
КОД_ТОВ),
ДОГОВОР
—>
НАКЛАДНАЯ (КЛЮЧ НОМ ДОГ).
Замечание Кнопка Новое в окне Изменение связей позволяет перейти к созданию связи между любыми двумя таблицами базы, не выходя в окно схемы данных.
Определение связей по составному ключу. Определим связи между таблицами НАКЛАДНАЯ -> ОТГРУЗКА, которые связаны по составному ключу НОМ^НАКЛ + код_ск. Для этого в главной таблице НАКЛАДНАЯ выделим оба этих поля, удерживая клавишу , и перетащим их в подчиненную таблицу ОТГРУЗКА.
В окне Изменение связей (Edit Relationships) (рис. 3.28) для каждого поля составного ключа главной таблицы НАКЛАДНАЯ, названной Таблица/запрос (Table/Query), выберем соответствующее поле подчиненной таблицы ОТГРУЗКА, названной Связанная таблица/запрос (Related Table/Query). Изменение связей Таблица/запрос;
НОМ_НДКЛ
К.ОА.СК
Связанная таблица/запрос
НОМ НАКП
; IKO/LCK!
Создать Отмена Объединение. Новое..
j Г" 1-л. .
Тип отношения:
один-ка-многим
Рис. 3.28. Окно выбора параметров связи
120
Часть I. Основы технологии Microsoft Access
Обеспечение целостности данных Если связываемые в схеме данных таблицы находятся в отношении 1:1 и 1:М, для связи можно задать параметр обеспечения связной целостности данных. Обеспечение связной целостности данных означает, что Access при корректировке базы данных обеспечивает для связанных таблиц контроль за соблюдением следующих условий: О в подчиненную таблицу не может быть добавлена запись с несуществующим в записях главной таблицы значением ключа связи; П в главной таблице нельзя удалить запись, если не удалены связанные с ней записи в подчиненной таблице; П изменение значений ключа связи в записи главной таблицы невозможно, если подчиненная таблица имеет связанные с ней записи, в которых не менятся соответственно ключ связи. При попытке пользователя нарушить эти условия в операциях добавления и удаления записей или при обновлении ключевых данных в связанных таблицах Access не допускает выполнение операции и выводит соответствующее сообщение. Access не позволяет установить параметр целостности для связи таблиц, если ранее введенные в таблицы данные не отвечают требованиям целостности. Установление между двумя таблицами связи и задание для нее параметров целостности данных возможно только при следующих условиях: П связываемые поля имеют одинаковый тип данных, причем имена полей могут быть различными; П обе таблицы сохраняются в одной базе данных Access; П главная таблица связывается с подчиненной по первичному простому или составному ключу или уникальному индексу главной таблицы. Для каждой из ранее установленных связей базы данных "Поставка товаров" установим в окне Изменение связей (Edit Relationships) флажок Обеспечение целостности данных (Enforce Referential Integrity). Установление связи с параметром обеспечения целостности данных возможно только в том случае, если таблицы ранее были заполнены корректными данными. В противном случае появится сообщение о невозможности установить связь. Например, если эти условия целостости не соблюдены для ранее загруженных данных таблиц ПОКУПАТЕЛЬ и ДОГОВОР, то при попытке установить параметр обеспечения целостности выдается сообщение, показанное на рис. 3.29.
Глава 3. Создание базы данных
121
Microsoft Office ACCESS Приложении] 'Microsoft Office Access' не удается создать отношение с обеспечением целостности данный. Данные таблицы 'ДОГОВОР' нарушают условия целостности. Например, записи для сотрудника существуют в связанной, но отсутствуют в главной таблице. Измените данные, чтобы главные записи существовали для всех связанных записей, Если нужно создать отношение без обеспечения целостности данных, снимите соответствующий флажок.
Рис. 3.29. Сообщение о невозможности установить параметр целостности для связи
Каскадное обновление и удаление связанных записей Если для выбранной связи обеспечивается поддержание целостности, можно задать режим каскадного удаления связанных записей и режим каскадного обнов/гения связанных, полей. Такие парамеры позволяют в главной таблице удалять записи и измененять значения в ключевом поле, т. к. при этих параметрах система автоматически выполнит необходимые изменения в подчиненных таблицах, обеспечив сохранение свойств целостности базы данных. В режиме каскадного удаления связанных записей при удалении записи из главной таблицы будут автоматически удаляться все связанные записи в подчиненных таблицах. При удалении записи из главной таблицы выполняется каскадное удаление подчиненных записей на всех уровнях, если этот режим задан на каждом уровне. В режиме каскадного обновления связанных полей при изменении значения поля связи в записи главной таблицы Access автоматически изменит значения в соответствующем поле в подчиненных записях. Установить в окне Изменение связей (Edit Relationships) (см. рис. 3.27) флажки Каскадное обновление связанных полей (Cascade Update Related Fields) и Каскадное удаление связанных записей (Cascade Delete Related Records) можно только после задания параметра обеспечения целостности данных. После создания связей изображения таблиц могут перемещаться в пределах рабочего пространства окна схемы данных. Перемещения и изменения размеров окон со списками полей таблиц в окне схемы данных осуществляются принятыми в Windows способами. На рис. 3.30 показана схема базы данных "Поставка товаров", где таблицы размешены в соответствии с размещением информационных объектов канонической модели данных, полученной при проектировании базы данных в главе 2 (см. рис. 2.18).
722
Часть I. Основы технологии Microsoft Access
Рис. 3.30. Схема данных базы данных "Поставка товаров"
На рис. 3.30 в созданной схеме данных БД "Поставка товаров", все связи отмечены символами 1, «.. Это свидетельствует о том, что одно-многозначные связи установлены правильно (по простому или составному ключу) и для них установлен параметр обеспечения целостности данных. ЗАДАНИЕ 4. Проверка поддержания целостности в базе данных Если в схеме данных определена связь таблиц, для которой установлены параметры обеспечения целостности, при вводе и корректировке данных во взаимосвязанных таблицах пользователь не сможет ввести записи, нарушающие требования связной целостности, рассмотренные в предыдущем разделе. Проверим, как обеспечивается поддержание целостности при внесении изменений в таблицы ПОКУПАТЕЛЬ и ДОГОВОР, связанные одномногозначными отношениями. Проверка автоматического поддержания целостности при изменении значений ключей связи в таблицах. Откроем главную таблицу связи ПОКУПАТЕЛЬ в режиме таблицы. Изменим значение ключевого поля код_пок (код покупателя) в одной из записей. Убедимся, что во всех записях подчиненной таблицы ДОГОВОР для договоров, заключенных этим покупателем, автоматически также изменится значение поля код_пок. Изменение происходит, т. к. был установлен параметр Каскадное обновление связанных полей (Cascade Update Related Fields) (см. рис. 3.27). Причем это изменение осуществляется, как только изменяемая запись перестает быть текущей. Для наблюдений за автоматическими изменениями в подчиненной таблице откроем на экране одновременно таблицы ПОКУПАТЕЛЬ и ДОГОВОР.
Глава 3. Создание базы данных
123
Изменим значение ключа связи код_пок в подчиненной таблице ДОГОВОР на значение, не существующее в записях таблицы ПОКУПАТЕЛЬ, и убедимся, что такое изменение запрещено, т. к. при поддержании целостности не может существовать запись подчиненной таблицы с ключом связи, которого нет в главной таблице. Проверка при добавлении записей в подчиненную таблицу. Убедимся, что не возможно включить новую запись в подчиненную таблицу ДОГОВОР со значением ключа связи код_пок, не представленным в таблице ПОКУПАТЕЛЬ. Проверка при удалении записи в главной таблице. Убедимся, что вместе с удалением записи в главной таблице ПОКУПАТЕЛЬ удаляются все подчиненные записи в таблице ДОГОВОР, т. к. был установлен параметр Каскадное удаление связанных записей (Cascade Delete Related Records). Заметим, что в том случае, когда каскадное удаление не разрешено, невозможно удалить запись в главной таблице,, если имеются связанные с ней записи в подчиненной.
Объединение записей взаимосвязанных таблиц При создании форм, запросов, отчетов, страниц доступа к данным на основе взаимосвязанных таблиц производится объединение их записей: объединяется каждая запись из одной таблицы с каждой записью из другой таблицы при условии равенства значений в поле связи. Рассмотрим пример объединения записей таблиц ТОВАР и ПОСТАВКА_ПЛАН по полю код_тов. Таблица ПОСТАВКАМИ л АН содержит план отгрузки товаров, заданный в спецификациях договоров. Каждая запись этой таблицы представляет один из товаров, который должен быть отгружен в указанные сроки покупателю. Рассматриваемые таблицы находятся в отношении один-ко-многим. Поле код_тов является уникальным ключом в таблице ТОВАР. В таблице ПОСТАВКА__ПЛАН значения этого поля повторяются во многих записях. Пример заполнения таблиц ТОВАР и ПОСТАВКА_ПЛАН, для которых не установлен параметр обеспечения связной целостности, показан на рис. 3.31. В этом примере оказалось возможным наличие записей в подчиненной таблице, для которых нет логически связанных записей в главной таблице. При объединении (по умолчанию) записей по полю код_тов вследствие того, что таблицы находятся в отношении один-ко-многим, формируется таблица, в которой каждая строка подчиненной таблицы ПОСТАВКА_ПЛАН объединяется с одной из строк таблицы ТОВАР (рис. 3.32). Как видно из таблицы результатов (см. рис. 3.32), ее записи образованы слиянием только тех записей таблиц, которые имеют совпадающие значения поля связи код_тов = Т001, Т002, ..., Т005. Здесь объединение произведено первым способом, устанавливаемым для любой связи таблиц по умолчанию.
Часть I. Основы технологии Microsoft Access
Наименование товара Монито FDD HDDM Корпус CD-RO DIMME Принте Сканер За/Кар Модем
Рис. 3.31. Содержимое объединяемых таблиц ТОЗАР и ПОСТАВКА ПЛАН
JM
& Запрос? : запрос на выборку Код товара Т001 Т001 Т001 TG02 . TD02 TD01 _ТО01
_ таоз _7004 V Т005
* Запись:
Наименование товара Монитор 17LG Монитор 17LG Монитор 17LG FDD 3,5 FDD 3,5 Монитор 17LG Монитор 17LG HDD Maxtor20GB Корпус MiniTower CD-ROM Panasonic IDE
И J •< I
to
Цена | Номер договор] Срок поставки] Количество | 6587,00р. Д111 1 100 Б 597 ,00р. Д111 2 20 6587,00р. !Д1 11 3 30 363,00р. Д111 1; 50 3 363,00р. Д111 10 Б5В7,ООр. Д222 1 ' 100 6587,00р. Д222 2 12 2590,00р. Д222 2 10 916,00р. Д222 3 30 1 153,00р. ДЗЗЗ 40
I>JM1>#| из 10
Я
. J
Рис. 3.32. Результат объединения таблиц ТОВАР и ПОСТАВКА ПЛАН первым способом
Если для некоторой записи, например, записи с кодом товара Т008 в таблице ТОВАР отсутствуют связанные записи в другой таблице — объединять запись не с чем — и в результат такая запись не включается. Именно по этой причине в результате объединения таблиц ТОВАР и ПОСТАВКА_ПЛАН отсутствуют записи о товарах, не представленных в плане поставки, а также записи
Глава 3. Создание базы данных
•
о плановых поставках, в которых указан товар, отсутствующий в таблице ТОВАР.
Для каждой связи двух таблиц могут быть указаны и другие способы объединения записей по ключу связи. Всего их три: 1. Объединение только тех записей, в которых связанные поля обеих таблиц совпадают (производится по умолчанию). 2. Объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из первой таблицы, для которых нет связанных во второй, с пустой записью второй таблицы. 3. Объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из второй таблицы, для которых нет связанных в первой, с пустой записью первой таблицы. Любой из перечисленных способов объединения может быть выбран для связи вне зависимости от того, находятся связываемые таблицы в отношениях 1:1, 1:М или тип отношения не может быть определен системой.
Выбор способа объединения записей В окне Изменение связей (Edit Relationships) (см. рис. 3.28) есть кнопка О15ъединение. При нажатии этой кнопки появится окно Параметры объединения. и можно будет убедиться, что для связываемых таблиц по умолчанию выбран первый способ объединения (рис. 3.33). Очевидно, что может быть выбран и другой способ.
Параметры объединения f» ii.] Объединение только тех записей, е которых связанные поля обеих таблиц совпадают. С 2. Объединение ВСЕХ записей из "ТОВАР" и только тех записей из "ПОСТАВКА_ПЛАН", в которых связанные поля совпадают. Г 3, Объединение ВСЕХ записей из "ПОСТАВКА_ПЛАН" и только тех записей из "ТОВАР", в которых связанные поля совпадают.
ок
Отнена
Рис. 3.33. Окно выбора способа объединения связываемых таблиц
Схемы данных, полученные для каждого способа объединения таблиц ТСВАР и ПОСТАВКА_ПЛАН, приведены на рис. 3.34. Для второго и третьего способов показано направление объединения: стрелка направлена от таблицы, из которой в результат будут включены все записи.
Часть I. Основы технологии Microsoft Access
126
ПОСТАВКА ПЛАН <од_тов KO/LTOB CPOKJIOCT мин„пост кол_пост
НАИМ_ТОВ ЦЕНА ЕЙ
;ТАВКА_НДС
юто
СУММА ПОСТ
Способ объединения 1
код_тое
код_тов
НОМ JOT
НОМ JOT
НАИМ_Т06
код_тов
НАИМ_ТОВ
код_тое
ЦЕНА
СРОК_ПОСГ
ЦЕНА
CPOKJTOCT
мин_пост кол_лост СУММА поа
ЕЙ СТАВКА_НДС ФОТО
СТАВКА_НДС
мин_пост кол_пост
ФОТО
СУММА ПОСТ
ЕЙ
Способ объединения 2
Способ объединения 3
Рис. 3.34. Схемы данных объединения таблиц ТОВАР и ПОСТАВКА ПЛАН Результаты объединения таблиц для каждого из трех способов показаны на
рис. 3.32, 3.35, 3.36. Замечание
)
Результаты объединения таблиц получены по запросу выборки (описание запросов см. в главе 7), в котором определены включаемые в результат запроса поля из объединяемых таблиц. Заметим, что для каждого способа объединения таблиц должен формироваться новый запрос. При объединении таблиц вторым способом (см. рис. 3.35) к записям, полученным первым способом, добавились записи из таблицы ТОВАР, не имеющие связанных записей в таблице ПОСТАВКА__ПЛАН. Каждая такая запись дополнена полями записи ПОСТАВКА_ПЛАН, которые содержат значения Null. Такая ситуация возникла вследствие того, что в плане отсутствуют заказы на товары Т006, Т007, ..., ТОЮ. Внимание Null — это неизменяющаяся константа, которая означает, что поле не содержит символов или значений. Поле получает значение Null, когда его содержимое неизвестно. Такое поле не следует путать с полем, содержащим пустую строку (""), хотя выглядят они одинаково. Значение Null можно ввести в поле или использовать в выражениях и запросах для указания отсутствующих или неизвестных данных. Пустая строка служит для указания того, что строковое значение для этого поля отсутствует. Для ввода пустой строки с клавиатуры следует ввести два символа прямых кавычек без пробела (""). Пользователь имеет возможность различать значения Null и пустые строки с помощью выражения.
Глава 3. Создание базы данных
[Номер договоцСрок поставки Б 537,00р. -Д111 S 537,00р. .Д111
Монитор 17LG Монитор 17LG Монитор 17LG Монитор 17LG Монитор 17LG FDD 3,5 : FDD 3,5 HDD Max1or20GB Корпус MiniTower CD-ROM Panasonic IDE DIMM64MPC100 Принтер EPSON ST.A4 СканерАсег Зв. Карта Genius Liv Модем Genius ext
•
6587,00р. Щ111 6587.00р.'д222 6587,00р. Д222 363,00р. ;Д111 363,00р. ;Д111 2590.00р. Д222 916,00р. .Д222 1 153,00р ДЗЗЗ 360,00р. 2 432,00р. 2 338,00р. 789,QOp 1 295,00p
И |М| из 15
Рис. 3.35. Результат объединения таблиц ТОВАР
и ПОСТАВКА_ПЛАК вторым способом
При объединении таблиц третьим способом (рис. 3.36) к записям, полученным первым способом, добавились записи из таблицы ПОСТАВКА_ПЛАН, не имеющие связанных записей в таблице ТОВАР.
& ЗалросЭ : запрос на выборку
TVJ02
—
TD02 Т001
таи тооэ TD04 TDQ5
»
| - || П j X J
Цена [Номер дог еоИСрок поставкиТкап -ччество 1 100 6 587,00р. Д111 2 20 6 587 ,QQp. ;ДШ 30 6 5В7 ,QQp. 1 50 363,00р. Д111 'FDD 3,5 10 363,00р. Д111 .FDD 3,5 . 3.J... . 100 " ' б 587,00р. Д222 Монитор 17LG 2 12 Монитор 17LG Б 587 ,00р. Д222 10 2 | 2590,00р. Д222 HDD Maxtor2QGB 30 916,00р. Д222 Корпус MiniTower 40 1 CD-ROM Panasonic IDE I 1 153,00р. ДЗЗЗ 1 450 ДЗЗЗ 550: 2 Д444 .
| Код товара Рнаименоеание товара Т001 Монитор 17LG Т001 Монитор 17LG Монитор 17LG TG01
* Запись: MJJ 11
з
з
12
М>'1>*1 из 12
Рис. 3.36. Результат объединения таблиц ТОВАР и ПОСТАВКА ПЛАН третьим способом
128
Часть I. Основы технологии Microsoft Access
Каждая такая запись дополнена полями записи ТОВАР, которые содержат значения Null. Такая ситуация возникает, если в таблицу ТОВАР не внесены сведения о новых товарах ТО 15 и ТО 16 или договор заключен на не существующий товар. (
Замечание
}
Напомним, что если для связи ТОВАР > ПОСТАВКА_ПЛАН установлен параметр обеспечения целостности, ввод в таблицу ПССТАВКА_ПЛАН записей с указанием товаров, отсутствующих в таблице ТОВАР, невозможен.
Отображение записей подчиненных таблиц в главной таблице В Access имеется возможность при просмотре главной таблицы отображать записи подчиненных таблиц, называемых в этом случае подтаблицами. Это позволяет пользователю при добавлении, удалении и редактировании записей осуществлять контроль за корректностью связей в отображаемой цепочке таблиц. Например, если отобразить в таблице ДОГОВОР подчиненную таблицу ПОСТАВКА_ПЛАН, связь между которыми осуществляется по полю ном_дог (номер договора), то при заполнении таблицы ПОСТАВКА_ПЛАН невозможно допустить ошибку в поле ном_дог, т. к. оно даже не отображается в подчиненной таблице. Однако это никоим образом не помогает при заполнении других полей связи таблицы ПОСТАВКА_ПЛАН, таких как код_тов (код товара). При просмотре таблицы, для которой определена подтаблица, отображается столбец со знаком "+" в каждой записи (рис. 3.37). Достаточно щелкнуть на знаке "+" в строке записи, чтобы отобразились записи подчиненной таблицы, связанные с текущей записью. При этом "+" преобразуется в "—" (минус). Щелчком на "- -" подчиненные записи закрываются. Таким образом могут быть открыты подчиненные записи каждой записи главной таблицы. Если открыть все записи главной таблицы, вы увидите все записи подчиненной таблицы, разбитые на подмножества, связанные с конкретными записями главной таблицы (при условии, что для связи заданы параметры обеспечения целостности). Открыть или закрыть все подчиненные записи можно, воспользовавшись командой меню Формат)Подтаблица|Развернуть все (Formar|Subdatasheet| Expand All) или Свернуть все (Collapse All). В таблице базы данных Access одновременно можно просматривать данные подтаблиц восьми уровней.
Глава 3. Создание базы данных
Монитор 17LG Монитор 17LG Монитор 17LG FDD 3,5 FDD 3,5
•
1 2 3 Г
-'
10D 2D
10 _ 5, 5 10'
'зо 50
"ю
О Д222 Код товара Монитор 17LG Монитор 17LG HDD Maxtor20GB Корпус MiniTower
0,00р. Срок поставки | Мни партия
Количество
Запись: _И_).ЛП
i: I ••
!
Рис. 3.37. Отображение подчиненных записей подтаблицы в главной таблице
Access автоматически определяет подтаблицу таблицы, если они находятся в отношениях один-к-одному или таблица является стороной один в отношении один-ко-многим, в схеме базы данных между ними определена связь и таблица имеет только одну подчиненную таблицу. Для определения подтаблицы щелкните на знаке "+" в строке записи или выполните команду Подтаблица (Subdatasheet). Отобразится окно Вставка подтаблицы (Insert Subdatasheet) (рис. 3.38), в котором следует выбрать подчиненную таблицу или запрос и указать поля связи. Если в главной и подчиненной таблицах поле связи имеет разные имена, то в окне Вставка подтаблицы (Insert Subdatasheet) можно ввести имена полей связи, при составном ключе имена полей разделяются точкой с запятой. Бели в схеме данных между таблицами ТОВАР и ПОСТАВКА_ПЛАН не было установлено связи, система может автоматически добавить эту связь в схему базы данных после ответа пользователя в окне диалога (рис. 3.39). После сохранения таблицы имя подтаблицы и имена подчиненного и основного полей записываются в свойства главной таблицы.
130
Часть I. Основы технологии Microsoft Access
Таблицы
тао1 TTJ02 + TOQ4 + TD05 + +> +
TDQE
Запросы ( Таблицы и запросы
ДОГОВОР НАКЛАДНАЯ ОТГРУЗКА ПОКУПАТЕЛЬ ПОСТАВКА ПЛАН СКЛАД ТОВАР
Тр07
'Т008
* TD09 + •7010
Запись: ..H.LiJ Г
Подчиненные поля:
;КОД_ТОВ
Основные поля:
• КОД JOB
Рис. 3.38. Окно для выбора подчиненной таблицы и поля связи с ней
Microsoft Office Access Приложению 'Microsoft: Office Access* не удалось обнаружить связь между выбранными полями. Создать связь сейчас?
Нет
Рис. 3.39. Сообщение системы при определении подтаблицы
Для просмотра свойств главной таблицы, например, ТОВАР, откройте ее в режиме конструктора и нажмите кнопку Свойства [ Щ на панели инструментов. В строке свойства Имя подтаблицы (Subdatasheet Name) указано имя подчиненной таблица, в свойствах Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields) указано имя ключа связи (простого или составного) (рис. 3.40). В режиме конструктора таблиц можно определить другую подтаблицу, выбрав ее имя из списка в строке свойства Имя подтаблицы (Subdatasheet Name) и заменив значения в строках, определяющих связь с ней. По умолчанию в строке Имя подтаблицы (Subdatasheet Name) установлено значение Авто (Auto), которое означает, что если в схеме данных установлена связь таблиц, Access автоматически выполнит вывод столбца со знаками "+" для открытия подчиненных записей по этой связи.
Глава 3. Создание базы данных
131
„войства таблицы Общие ! Описание , , , . . Режим по умолчанию . . . Условие на значение , . . Сообщение об ошибке , . Фильтр Порядок сортировки ..-, , Имя лодтаблицы Подчиненные поля Основные поля Высота подтаблицы , , , . Развернутая подтаблица Ориентация . . . .;
Режим таблицы
Таблица, ЛОСТАВКА_ПЛ АН КОД_ТОВ КОД_ТОВ Оси
Нет Слева направо
Рис. 3.40. Свойства таблицы ТОВАР
Ш СКЛАД : таблица Код склада Наименование] Ответственное Адрес склада 01 Главный Иванов Т.С. : Мичуринская, 15 | Номер наклад*- ,1ата отгрузки Номер договора - Н001 25.01.2004 Д111 Код товара Количество отгружено Т001 10 TD05 20 Т008 1 ¥ 0 29.04.2004 Д222 *|КЮ2 + НООЗ ' 28.04.2004 дззз + HOQ4 25.05.2004 Д222 + Н005 10.03.2004 Д222 ; 30.01.2004 1 -f ' " Оптовый Петров А. А. Свердлова ,29 03 Торговый • Смирнов О.Н. Речной, 38 | Номер наклад*- J}ата отгрузки Номер договора j - Н001 25.03.2004 Д111 Количество отгружено Код товара Т004 Г 5 TD06 "*" _ о : * НО 26.03.2004 ДЗЗЗ 20.01.2004 Д111 *'но D3 ' У 30.01.2004 1 : *
> За
IHi
ь: JlLl Л
4
' Jи
^]из
<\
vllri
Рис. 3.41. Отображение подтаблиц НАКЛАДНАЯ и ОТГРУЗКА в таблице СКЛАД
Часть I. Основы технологии Microsoft Access
132
Если у таблицы имеются две или более подчиненных таблиц, определенных в схеме, то при щелчке на знаке "+" автоматически откроется окно для выбора подчиненной таблицы. После выбора подчиненной таблицы и сохранения главной таблицы эта связь фиксируется в свойствах. Для того чтобы в таблице не выводился столбец, позволяющий открывать подчиненные записи, в качестве значения свойства должно быть установлено Нет (None). Значение Нет (None) можно установить в режиме таблицы с помощью команды меню Формат|Подтаблица|Удалить (Formar|Subdatasheet|Remove) или соответствующей кнопки панели инструментов. В подчиненной таблице можно выполнять те же действия, что и в главной: работать с данными или отображать подчиненную таблицу более низкого уровня. На рис. 3.41 в таблице СКЛАД открыты подчиненные записи таблицы НАКЛАДНАЯ и в ней подчиненные записи таблицы ОТГРУЗКА.
• СКЛАД: таблица Код склада Наименование] Ответственное - 01 Главный Иванов Т.С. [Номер наклад^ Дата отгрузки | Номер догово -.HD01
25.01.2004 Д111 Код товара \ Количество отгружено - Т001 Наименование товара |_ Цена _^_ * Монитор 17LG| 6587,00р. штукз 5% *_ 0,00 20 л^ - TQ05~ Наименование товара { Цена Единица изм| Ставка НДС + CD-ROM Panasonic IDE ; 1 153,00р. .штука 30%.
- TD08 __ * СканерАсег
• Н002 НООЗ Н004 Н005
2338,00р. штука 0,00
* 29.04.2004 28.04.2004 25.05.2004 10.03.2004 Оптовый !
:
Щ22 ДЗЗЗ Д222 Д222
ПетровА.А.
.Свердлова,29
' И |мНиз 1
Рис. 3.42. Отображение взаимосвязанных записей нескольких таблиц
Глава' 3. Создание базы данных
__
733
Несмотря на то, что связанные записи подчиненных таблиц просматриваются, в основном, через механизм подтаблиц, система позволяет устанавливать связь и просматривать связанную запись главной таблицы из подчиненной. Например, для подчиненной таблицы ОТГРУЗКА, представленной на предыдущем рисунке, можно установить связь с главной по отношению к ней таблицей ТОВАР, раскрывающей название товара и другие его характеристики (рис. 3.42). ЗАДАНИЕ 5. Отображение подтаблиц Просмотрите подтаблицы всех уровней для таблицы ПОКУПАТЕЛЬ и ТОВА?.
Модификация структуры базы данных К модификации структуры базы данных относится изменение структуры отдельных таблиц, добавление и удаление таблиц, а также изменение схемы данных.
Изменение структуры таблиц Для изменения структуры таблиц основным является режим конструктора таблиц, хотя некоторые изменения можно произвести в режиме таблицы. Такие простые операции, как изменение имени, добавление, удаление неключевых полей, могут быть произведены в обоих режимах. Однако в режиме таблицы имеется ряд ограничений. Например, в режиме таблицы можно изменить имя поля, дважды щелкнув в его заголовке и задав новое значение. Это значение становится именем поля, но при этом теряется значение подписи поля. Изменение полей, которые не являются ключами или полями связи. Состав и последовательность, а также тип данных, свойства или имена таких полей можно изменять независимо от наличия связей таблицы с другими таблицами базы данных. Для заполненной таблицы при изменении типа данных, размера и других свойств производится преобразование данных. Однако если преобразования недопустимы, попытка изменения типа данных может привести к потере данных, поэтому система запрашивает у пользователя подтверждение его действий (рис. 3.43). Изменение или удаление ключевого поля. Для загруженной и несвязанной таблицы при попытке изменить свойства или удалить ключевое поле система предупреждает о возможной потере данных и удалении ключа (рис. 3.44). Если, например, удаляется поле в составном ключе, с других полей этого ключа будет снят признак ключа. Для отказа от определения первичного ключа в таблице достаточно нажать кнопку Ключевое поле (Primary Key) или удалить индекс ключа в окне Ин-
Часть I. Основы технологии Microsoft Access
134-'
дексы (Indexes), которое открывается после нажатия соответствующей кнопки на панели инструментов. При попытке назначить ключом другое поле, имеющее повторяющиеся значения в загруженной таблице, операция не будет завершена и будет выдано сообщение, приведенное на рис. 3.45.
Microsoft Office Access Некоторые данные могли быть потеряны. Значение свойства ReldSee одного или нескольких попей было уменьшено, При потере данных могли быть нарушены условия на значения. Продолжить выполнение?
Рис. 3.43. Сообщение при изменении свойств поля
Microsoft Office Access •\
Удаление поля 'СРОК_ПОСТ' потребует от приложения 'Microsoft Office Access1 удаления ключевого поля. Подтвердите удаление этого поля. Ж11111
Нет
|
Рис. 3.44. Сообщение при удалении ключевого поля
Miciosoft Office Access \ *\ bw
^ ^ • • • • • • • • • Н
Изменения не были успешно внесены из-за повторяющихся значений в индексе, ключевых полях или связях. Измените данные в поле или полях, содержащих повторяющиеся значения, удалите индекс или переопределите его, чтобы разрешить повторяющиеся значения, и повторите попытку. ОК
Справка
Рис. 3.45. Сообщение при попытке назначить ключом поле с повторяющимися значениями
Если надо изменить ключ таблицы, которая имеет связи с другими таблицами в схеме данных, необходимо предварительно разорвать связи.
Изменение схемы данных При модификации схемы данных может производиться изменение состава ее таблиц: удаление и добавление таблиц, изменение их связей, способ объединения записей связанных таблиц.
Глава 3. Создание базы данных
/35
Необходимость в изменении связей возникает, в частности, при изменении ключей в таблицах. Изменение ключа по составу, по типу и размеру его полей не может производиться до тех пор, пока не удалены связи таблицы в схеме данных. При изменении типа данных для неключевых полей, задействованных в связях таблицы, также предварительно необходимо удалить эти связи в схеме данных. Для внесения изменений в схему данных перед ее открытием нужно закрыть все таблицы. Команда Сервис|Схема данных (Tools)Relationships) или кнопка Схема данных (Relationships) на панели инструментов откроют схему данных. При этом открывается панель инструментов Связь (Relationship). Добавление таблиц выполняется при нажатии кнопки Добавить таблицу (Show Table) ЕМ на панели инструментов Связь (Relationship). В диалоговом окне Добавление таблицы (Show Table) (см. рис. 3.26) надо выделить нужную таблицу и нажать кнопку Добавить (Add). Удаление таблицы из схемы данных возможно только после удаления всех связей таблицы. Сделайте таблицу текущей и выполните команду Правка|Удалить (Edit (Delete) или нажмите клавишу . Удаление связи осуществляется, если к связи подвести курсор мыши и отметить связь щелчком мыши, затем нажать правую кнопку мыши, вызывающую контекстное меню, и выполнить команду Удалить связь (Delete Relationship). Помеченную связь можно также удалить по команде Правка|Удалить (Edit (Delete) или нажатием клавиши . Изменение параметров связи выполняется при выделенной связи в диалоговом окне, которое вызывается командой Связи|Изменить связь (Relationships] Edit Relationship) или соответствующей командой контекстного меню. Контрольные вопросы по схеме данных 1. Для чего создается схема данных базы Access? 2. В каких отношениях должны находиться таблицы, чтобы для них можно было установить параметры поддержания связной целостности данных? 3. По какому полю должна быть установлена связь между таблицами, чтобы появилась возможность установить параметры поддержания связной целостности данных? 4. Можно ли в подчиненную таблицу ДОГОВОР ввести запись о договоре с покупателем, который не представлен в таблице ПОКУПАТЕЛЬ, если для этих таблиц обеспечивается целостность данных? 5. Можно ли удалить запись о покупателе, если в таблице ДОГОВОР представлены записи о договорах с этим покупателем и не установлен параметр Каскадное удаление связанных записей?
136
Часть I. Основы технологии Microsoft Access
6. Что произойдет при изменении значения ключевого поля в главной таблице, если для ее связи с подчиненной установлен параметр Каскадное обновление связанных полей? 7. Для чего предназначен знак "+" в левом столбце открытой таблицы? 8. Какая команда позволяет открыть связанные записи нужной подчиненной таблицы в главной? 9. Какое свойство таблицы определяет подтаблицу, задающую вывод связанных записей при щелчке на знаке "+"? Ответы
1. Схема данных наглядно отображает связи таблиц базы. Установленные в схеме связи автоматически используются при обработке связанных таблиц. В схеме данных можно запросить проверку связной целостности данных, задать способ объединения записей.
2. 1:М или 1:1. 3. По первичному (простому или составному) ключу главной таблицы.
4. Нет. 5. Нет. 6. Обновятся значения связанных полей во всех подчиненных записях. 7. Для открытия записей выбранной подтаблицы. 8. Вставка]Подтаблица (Insert] Subdatasheet). 9. Имя подтаблицы (Subdatasheet Name).
Глава 4
Запросы Запросы являются одним из основных инструментов выборки, обновления и обработки данных в таблицах базы данных. Запрос позволяет сформировать пользовательское представление о данных, не обязательно отвечающее требованиям нормализации. Результат выполнения запроса — это новая, чаще всего временная, таблица, которая существует до закрытия запроса. Структура такой таблицы определяется выбранными из одной или нескольких таблиц полями. Записи формируются путем объединения записей таблиц, участвующих в запросе. Способ объединения записей различных таблиц указывается при определении их связи. Условия отбора, сформулированные в запросе, позволяют фильтровать записи, составляющие результат объединения таблиц. Простейшие запросы могут быть созданы с помощью мастера. Любой запрос можно создать в режиме конструктора. Конструктор предоставляет удобное для пользователя диалоговое графическое средство формирования запросов, с помощью которого легко может быть построен сложный запрос. Запрос строится на основе одной или нескольких взаимосвязанных таблиц, позволяя объединять данные, содержащиеся в них. При этом могут использоваться таблицы базы данных, а также сохраненные таблицы, полученные в результате выполнения других запросов. Кроме того, запрос .может строиться непосредственно на другом запросе с использованием его временной таблицы с результатами.
Назначение и виды запросов Запрос позволяет выбрать необходимые данные из одной или нескольких взаимосвязанных таблиц, произвести вычисления и получить результат в виде виртуальной таблицы. Полученная таблица может использоваться в качестве источника данных в формах, отчетах, страницах доступа к данным, других запросах. Через запрос можно производить обновление данных в таблицах, добавление и удаление записей.
138
Часть I. Основы технологии Microsoft Access
С помощью запроса можно выполнить следующие виды обработки данных: П включить в результирующую таблицу запроса заданные пользователем поля; П выбрать записи, удовлетворяющие условиям отбора; П произвести вычисления в каждой из полученных записей; П сгруппировать записи, которые имеют одинаковые значения в одном или нескольких полях, в одну запись и одновременно для других полей образовавшихся групп выполнить одну из статистических функций; G произвести обновление полей в выбранном подмножестве записей; П создать новую таблицу базы данных, используя данные из существующих таблиц; П удалить выбранное подмножество записей из таблицы базы данных; П добавить выбранное подмножество записей в другую таблицу. Многотабличный запрос позволяет сформировать записи результата путем объединения взаимосвязанных записей из таблиц базы данных и включения нужных полей из них. В частности, при объединении двух нормализованных связанных одно-многозначными отношениями таблиц, результирующая запись образуется на основе записи подчиненной таблицы, в которую добавляются поля из связанной записи в главной таблице. Заметим, что подобное объединение формирует новую ненормализованную таблицу, в которой данные могут многократно дублироваться. Рассмотренный способ формирования записей запроса задается при установлении связи между таблицами по умолчанию. По умолчанию связи устанавливаются с параметром объединения первого типа: объединение только тех записей, в которых значения полей связи обеих таблиц совпадают. Могут устанавливаться и другие способы объединения таблиц (см. разд. "Схеме данных в Access" главы 3). Последовательное выполнение ряда запросов позволяет решать достаточно сложные задачи, не прибегая к программированию. В Access может быть создано несколько видов запроса: П запрос на выборку — выбирает данные из взаимосвязанных таблиц и других запросов. Результатом является таблица, которая существует до закрытия запроса. На основе такого запроса могут строиться запросы других видов. Замечание Таблицу с результатами запроса на выборку можно использовать для работы с данными в таблицах, на которых построен запрос. Например, через таблицу запроса можно корректировать данные в исходных таблицах базы данных. Запросы могут служить источниками записей для форм, отчетов и страниц доступа к данным.
/39
Глава 4. Запросы
П запрос на создание таблицы— также выбирает данные из взаимосвязанных таблиц и других запросов, но, в отличие от запроса на выборку, результат сохраняет в новой постоянной таблице. G запросы на обновление, добавление, удаление — являются запросами действия, в результате выполнения которых изменяются данные в таблицах.
Инструментальные средства Удобным инструментальным средством создания запроса является графический конструктор — одно из наиболее мощных средств Access. Принципы конструирования различных запросов заложены в технике конструирования запроса на выборку, являющегося основой всех видов запроса. Запрос на выборку позволяет достаточно просто выбрать данные из одной или нескольких взаимосвязанных таблиц. Результаты выполнения запроса отображаются в виде временной таблицы. Поля, составляющие записи этой таблицы, указываются пользователем в запросе. Записи формируются на основе записей в исходных таблицах и связей между этими таблицами и фильтруются в соответствии с заданными в запросе условиями отбора. Таблица с результатами запроса может применяться при дальнейшей обработке данных. В запросе на выборку могут использоваться не только таблицы базы данных, но и ранее созданные запросы, точнее — таблицы, являющиеся результатом их выполнения. При этом, как правило, нет необходимости сохранять таблицы, получаемые в результате выполнения ранее созданных запросов. Однако в ряде случаев непосредственное использование в запросе другого запроса невозможно. В этом случае включаемый запрос надо преобразовать в запрос на создание таблицы. Этот запрос сохраняет результат в новой таблице базы данных. Далее эта таблица может использоваться при создании запроса. Результаты выполнения запроса выводятся в режиме таблицы. Окно запроса в режиме таблицы аналогично окну просмотра таблицы базы данных. В этом режиме становится активной панель инструментов Запрос в режиме таблицы (Query Datasheet) (рис. 4.1) с перечнем кнопок, аналогичным тому, который представлен на панели Таблица в режиме таблицы (Table Datasheet) (см. рис. 3.12 главы 3). Запрос в режиме таблицы
^ У : ! лА -J!а £1 Л*. ?i 'I X> VB / „;I 4A I к - № • -дг-Л -Л Я* , / _t-M ,,^-,;„._ --=> J ;
Рис. 4.1. Панель инструментов запроса в режиме таблицы
Несмотря на то, что поля результирующей таблицы принадлежат, как правило, нескольким таблицам базы данных, с ними можно работать так, как
Часть I. Основы технологии Microsoft Access
140
если бы они принадлежали одной таблице. Можно менять данные в таблице результатов запроса на выборку, и сделанные изменения будут внесены в базовые таблицы. Особенно важно, что, несмотря на дублируемость данных, возникающую в результате объединения записей таблиц, изменение единственного значения в таблице запроса автоматически приводит к изменению всех повторяющихся в таблице запроса значений. Это определяется тем, что через таблицу запроса данное меняется в исходной таблице, где оно представлено один раз.
Панель инструментов конструктора запросов Для выполнения необходимых действий при создании запроса используются команды меню или панель инструментов Конструктор запросов (Query Design) (рис. 4.2). Эта панель появляется, когда создается новый запрос в режиме конструктора или открывается для редактирования существующий. Добавить или удалите кнопки -
Конструктор запросов к si| Цасгройка,,.
Км :>jj[
"
Конструктор запросов
;•*- X II
Сохранить
pjrf^z^""*^-^^.^! "^5J| Выоорка In" Перекрестный _jf
Создание таблицы..,
i.-**?;- Обновление l?f
Добавление,.,
">|'= Удаление
Ctrl+s
00,1 Поиск файлов...
|_ ?
Предварительный просмотр Орфография...
F7
Км з! • Вырезать
CtH+X
[yj т-jj ! Копировать
Ctrl+C
Км .^
CCH+V
Вставить
^ |||Й1| Отменить ! •/ ^ Км £j]
Вернуть Тип запроса
? . Запуск v1
'^_j
Отобразить таблицу...
КЧ Е - Групповые операции | | Набор значений •/
_^р
Свойства
Alt+ENTER
-М .{N Состроить, . , . 1 -Окно базы данных v
F1 1
;-JM| Создать объект
^ ЧУ1 Справка: Microsoft Office Access Fl i— J '"' 7 ........_ Сброс панели
Рис. 4.2. Панель инструментов конструктора запросов
Глава 4. Запросы
141
По стрелке в заголовке панели инструментов конструктора запросов можно вызвать список кнопок, с помощью которого легко добавить или удалить кнопку или произвести полную настройку панели.
Конструирование запросов Для создания запроса нужно выбрать в окне База данных (Database) вкладку Запросы (Queries) и нажать кнопку Создать (New). В открывшемся окне Новый запрос {New Query) (рис. 4.3) выбрать Конструктор (Design View).
Новый запрос
$г \ Самостоятельное создание ; нового запроса.
\
• • • • E y l Перекрестный запрос Повторяющиеся записи Записи без подчиненных
I
ОК
Отмена
Рис. 4.3. Окно для выбора конструктора или мастера при создании нового запроса
Можно сразу перейти к созданию нового запроса в режиме конструктора, выбрав на вкладке Запросы (Queries) Создание запроса в режиме конструктора (Create query in Design view). Далее в открывшемся окне Добавление таблицы (Show Table) (рис. 4.4) нужно выбрать используемые в запросе таблицы и нажать кнопку Добавить (Add). Для выхода из окна следует нажать кнопку Закрыть (Close). В результате появится окно конструктора запросов (Query): запрос на выборку (Select Query) (рис. 4.5).
3anpoc
Окно конструктора запросов разделено на две панели. Верхняя панель содержит схему данных запроса, которая включает выбранные для данного запроса таблицы. Таблицы представлены списками полей., Нижняя панель является бланком запроса, который нужно заполнить.
и.
Часть I. Основы технологии Microsoft Access Добавление таблицы Таблицы | Запросы \ Таблицы и запросы
Г ! НАКЛАДНАЯ 1 ОТГРУЗКА 'ПОКУПАТЕЛЬ ПОСТАВКА ПЛАН СКЛАД ! ТОВАР
Рис. 4.4. Окно выбора таблиц и запросов для схемы данных запроса Тип запроса ts- Запроси : запрос на выборку
Схема данных запроса
Бланк запроса
Попе: Имя таблицы; Сортировка: Вывод на экран;
; I
! '
Условие отбора:
или:
Область маркировки столбца Рис. 4.5. Окно конструктора запросов
Схема данных запроса В окне конструктора запросов отображаются выбранные таблицы со списком их полей и связи между ними, имеющиеся в схеме данных базы. Пер-
Глава 4. Запросы
143
вая строка в списке полей, отмеченная звездочкой (*), обозначает все множество полей таблицы. Кроме того, при добавлении таблиц в схему данных запроса Access автоматически устанавливает связи для объединения таблиц, если таблицы имеют поля с одинаковыми именами и типами данных, даже если связи не были устаноатены в схеме данных базы. Связи, которые не были установлены Access автоматически, пользователь может установить прямо в схеме данных запроса, перетащив задействованные в связи поля из одного списка полей в другой. Связь устанавливается вне зависимости от типа отношений между таблицами. Эти отношения могут быть и неопределенными. Однако эти таблицы должны иметь общее поле или поля, по которым между ними может быть установлена связь. Связь устанавливается для объединения записей таблиц по общему полю при их обработке. По умолчанию для установленной связи выбирается первый способ объединения записей — объединение только тех записей, в которых связанные поля обеих таблиц совпадают. Имеется возможность переопределить способ объединения записей, с целью дополнить результирующий набор записей несвязанными записями одной или другой таблицы (см. разд. "Схема данных в Access" главы 3).
(~
Замечание
j
Если между таблицами в запросе не установлена связь, то для Microsoft Access остается неизвестным, какие записи связаны с какими, и в таблице запроса отображаются все комбинации записей таблиц, т. е. будут объединяться все со всеми. Если одна таблица содержит 10 записей, а другая 4, то в таблице запроса будет 40 записей (10x4). Такое объединение называется полным или декартовым произведением.
Бланк запроса Бланк запроса представлен в виде таблицы в нижней панели окна запроса. Такая таблица предназначена для конструирования структуры таблицы результата запроса и условий выборки записей. Первоначально эта таблица пуста. Каждый столбец бланка относится к одному полю, с которым нужно работать в запросе. Поля могут использоваться для включения их в таблицу запроса, для задания по ним сортировки, условий отбора записей, а также для выполнения вычислений. При формировании столбца бланка запроса (поля таблицы запроса) необходимо знать следующее: О в строку Поле (Field) включается имя поля, используемого в aaripbctf: О в строке Сортировка (Sort) выбирается порядок сортировки записей ^результата;
144
Часть I. Основы технологииjWicrosoft Access^
G в строке Вывод на экран (Show) отмечаются поля, которые должны быть включены в результирующую таблицу; О в строке Условие отбора (Criteria) задаются условия отбора записей; П в строке или (or) задаются альтернативные условия отбора записей, В ряде случаев в бланке запроса наряду с именем поля нужно отображать имя соответствующей таблицы, например, когда поля имеют одинаковые имена в разных таблицах. Если в бланке запроса строка Имя таблицы (Table Name) не отображается, нужно выполнить команду Вид|Имена таблиц (ViewjTable Names) или нажать соответствующую кнопку на панели конструктора запросов.
Поля бланка запроса Каждый столбец бланка запроса соответствует одному из полей таблиц, на которых строится запрос. Кроме того, здесь может размещаться вычисляемое поле, значение которого вычисляется на основе значений других полей записи результата, или итоговое поле для групп записей, использующее одну из встроенных групповых функций Access. Для включения нужных полей из таблиц в соответствующие столбцы запроса можно воспользоваться следующими приемами: П в первой строке бланка запроса Поле (Field) щелчком мыши вызвать появление кнопки списка и выбрать из списка нужное поле. Список содержит все поля таблиц, представленных в схеме данных запроса; Г\ перетащить нужное поле из списка полей таблицы в схеме данных запроса в первую строку бланка запроса; П дважды щелкнуть на имени поля таблицы в схеме данных запроса; 3 для включения всех полей таблицы можно перетащить или дважды щелкнуть на символе "*" (звездочка) в списке полей таблицы в схеме данных запроса.
Модификация запроса Добавление таблицы в схему данных запроса осуществляется с помощью команды меню Запрос|Добавить таблицу (QueryjShow Table) или нажатием соответствующей кнопки панели Конструктор запросов (Query Design) (см. рис. 4.2). Команда добавления может быть выполнена также через контекстное меню, вызываемое на схеме данных запроса. Добавление поля в бланк запроса осуществляется с помощью одного из действий, рассмотренных выше, например, перетаскиванием мышью имени поля из таблицы в схеме данных в нужное место бланка. Все столбцы полей справа от него передвинутся на один столбец вправо.
Глава 4. Запросы
145
Удаление поля в бланке запроса требует предварительного выделения соответствующего столбца. Для этого нужно переместить курсор в область маркировки столбца, где он примет вид черной стрелки, направленной вниз, и щелкнуть кнопкой мыши (см. рис. 4.5). Далее необходимо нажать клавишу или выбрать пункт меню Правка|Удалить столбцы (EditjDelete Columns). Для перемещения поля в бланке запроса надо выделить соответствующий столбец и перетащить его в новую позицию с помощью мыши. Столбец, на место которого перемещен новый, и все столбцы справа от него будут сдвинуты вправо.
Условия отбора записей Условия отбора записей могут задаваться для одного или нескольких полей в строке Условие отбора (Criteria) бланка запроса (см. рис. 4.5). Условием отбора является выражение, которое состоит из операторов сравнения и операндов. В качестве операндов выражения могут использоваться: литералы, константы, идентификаторы (ссылки). Литералами являются конкретные значения, воспринимаемые Access так, как они записаны. В качестве литералов могут быть использованы числа, строковые значения, даты. Текстовые строки заключаются в двойные кавычки, даты — в знаки "ft" (или одинарные кавычки (') в кодировке ANSI92). Например: 567, "Информатика", #1-Января-2004# ('1- Января-2004 '
В
ANSI-92).
Константами являются неизменяющиеся значения, которые определены в Access, например, Истина (True), Ложь (False), Null.
Идентификатор представляет собой ссылку на значение поля, элемента управления или свойства. Идентификаторами могут быть имена полей таблиц, форм, отчетов и т. д. Они должны заключаться в квадратные скобки. Как правило, Access производит автоматическую подстановку скобок. Во многих случаях ссылка на конкретное значение должна указывать точное его местоположение в иерархии объектов базы данных, начиная с объекта верхнего уровня. Если необходимо указать ссылку на поле в конкретной таблице, форме, отчете, то перед именем поля ставится имя таблицы, формы, отчета, также заключенное в квадратные скобки и отделенное от имени поля восклицательным знаком. Например ссылка на поле в таблице примет ВИД: [Имя таблицы] ! [Имя п о л я ] , а ссылка на СВОЙСТВО D e f a u l t V a l u e ЭЛСмента управления Дата заключения договора в форме ДОГОВОР: F o r m s ! [ Д О Г О В О Р ] ! [ Дата заключения д о г о в о р а ] . D e f a u l t V a l u e .
146
Часть I. Основы технологии Microsoft Access
Операторами сравнения и логическими операторами, использование которых допускается в выражении условия отбора, являются: = , < , > , < > , < = , >=, Between, In , L i k e , And, Or, N o t .
Они определяют операцию над одним или несколькими операндами. Если выражение в условии отбора не содержит оператора, то по умолчанию используется оператор = . Текстовые значения в выражении, если они содержат пробелы или знаки препинания, вводятся в двойных кавычках. В противном случае кавычки можно не вводить, они будут добавлены автоматически. Допускается использование операторов шаблона — звездочка (*) и вопросительный знак (?) (ANSI-89) или знак процента (%) и подчеркивания (_) (ANSI-92). Оператор Between позволяет задать интервал для числового значения и даты. Например: Between ю And loo задает интервал от 10 до 100; Between # o i . o i . i 9 9 7 # And # 3 1 . 1 2 . 2 0 о з # задает интервал дат (в ANSI-92 вместо знака "#" используются одинарные кавычки (')). 'Оператор ш позволяет выполнить проверку на равенство любому значению из списка, который задается в круглых скобках. Например: In("Математики";"Информатики"; " Истории")
Оператор Like позволяет работать с образцами, использующими символы шаблона при поиске в текстовых полях. Например: Like "Иванов* " (ANSI-89) или L i k e "Иванов^" (ANSI-92)
Логические операторы AND, OR, нот. Условия отбора, заданные в одной строке, связываются по умолчанию с помощью логической операции "И", заданные в разных строках — с помощью логической операции "ИЛИ". Эти операции могут быть также заданы явно в выражении условия отбора с помощью операторов AND и OR соответственно. Оператор NOT задает логическое отрицание условия. После ввода выражения в бланк и нажатия клавиши <Enter> Access выполняет синтаксический анализ выражения.
Использование логических операций в условии отбора Рассмотрим пример использования логических операций в формировании условий отбора. Допустим, надо выбрать товары, цена которых не более 1000 руб. и НДС не более 10%, а также товары, цена которых более 2500 руб. Результат должен содержать наименование товара (НАИМ_ТОВ), его цену (ЦЕНА) и НДС (СТАВКА_НДС>.
Глава 4. Запросы
147
Для создания запроса в режиме конструктора в окне базы данных выберем объект Запросы (Queries) и щелкнем на значке Создание запроса в режиме конструктора (Create query in Design view). Появится окно запроса на выборку в режиме конструктора <Имя запроса>: запрос на выборку (Select Query) и диалоговое окно Добавление таблицы <...> (Show Table <...>) (см. рис. 4.4). В диалоговом окне выберем таблицу ТОВАР и нажмем кнопку Добавить (Add). Выбранная таблица будет отображена в области схемы данных окна конструктора запроса на выборку (см. рис. 4.6). Закроем окно Добавление таблицы (Show Table).
1? Запрос? ; запрос на выборку
L ||C i X l
ШЩ код_тов НАИМ Т08 ЦЕНА ЕЙ СТАВКА_НДС ФОТО 1
<
>
Поле: НАИМ_ТОВ Имя таблицы: ТОВАР Сортировке: Вывод на экран: 0 Условие отбора:
или:
<
• •
ЦЕНА ТОВАР по возрастай
СТАВКА _НДС ТОВАР
" ^
0
0 <1000 >2500
v
<=0,1
->: ""
Рис. 4.6. Окно конструктора запроса на выборку с логическими операциями в условии отбора
Для удаления таблицы из схемы данных запроса установите на нее курсор мыши и нажмите клавишу . Для добавления — нажмите кнопку Отобразить таблицу (Ищ) на панели инструментов конструктора запросов. В окне конструктора запроса (см. рис. 4.6) перетащим из списка полей таблицы ТОВАР поля НАИМ_ТОВ, ЦЕНА, стАВКА_ндс в столбцы бланка запроса в строку Поле (Field). Если вы по ошибке перетащили в бланке запроса ненужное поле, удалите его. Для этого переместите курсор в область маркировки столбца сверху, где 6 Зак. 835
148
^
Часть I. Основы технологии Microsoft Access
он примет вид черной стрелки, направленной вниз, и щелкните кнопкой мыши. После того как столбец выделится, нажмите клавишу . В строке Вывод на экран (Show) отметьте поля, иначе они не будут включены в таблицу запроса. Условия отбора оформим, как показано в бланке запроса на рис. 4.6. Между условиями, записанными в одной строке, выполняется логическая операция AND. Между условиями, записанными в разных строках, выполняется логическая операция OR. Выполним запрос, нажав на панели конструктора запросов кнопку Запуск (Run) или кнопку Вид (View). На экране появится окно запроса в режиме таблицы с записями из таблицы ТОВАР, отвечающими заданным условиям отбора. Сохраним запрос, нажав кнопку Сохранить (Save) и задав ему имя "Пример!". Заметим, что имя запроса не должно совпадать не только с именами имеющихся запросов, но и с именами таблиц в базе данных. Закроем текущий запрос по команде меню Файл]3акрыть (FilejClose) или нажав кнопку окна запроса Закрыть (Close). Сохраненный запрос можно выполнить, выделив его в окне базы данных и нажав кнопку Открыть (Open).
Вычисляемые поля В запросе для каждой записи могут производиться вычисления с числовыми и строковыми значениями или значениями дат с использованием данных из одного или нескольких полей. Результат вычисления образует в таблице запроса новое вычисляемое поле. В исходных таблицах базы данных новых полей не создается. При каждом выполнении запроса производится вычисление с использованием текущих значений полей. В выражениях вычисляемых полей помимо имен полей могут использоваться литералы и функции. В результате обработки выражения может получаться только одно значение. Выражение вводится в бланк запроса в пустую ячейку строки Поле (Field). Затем, после нажатия клавиши <Enter> или перевода курсора в другую ячейку, перед выражением в этой ячейке добавляется имя поля выражением (Exprw), где N ~ целое число, увеличивающееся на единицу для каждого нового создаваемого вычисляемого поля в запросе. Имя вычисляемого поля, стоящее перед выражением, отделяется от него двоеточием. Например: Выражение!: [Цена]*[Количество], где цена и Количество — имена полей.
Глава 4. Запросы
т 49
Имя вычисляемого поля выражение! становится заголовком столбца в таблице с результатами выполнения запроса. Это имя можно изменить. Для вычисляемых полей, как и для любых других, допускаются сортировка, задание условий отбора и расчет итоговых значений. В вычисляемых полях и условиях отбора можно использовать встроенные функции. В Access и VBA определено примерно 150 функций. Перечислим далее некоторые сгруппированные по назначению функции. П Функции даты и времени. Используются при обработке дат и времени в полях и литералах. Возвращают дату и время полностью или частично (год, месяц, день); например, функция Date о возвращает системную текущую дату, функция Month (дата) выделяет месяц из значения поля, содержащего дату, и возвращает целое число из интервала от 1 до 12 включительно, Обозначающее МеСЯЦ ГОДа. ФуНКЦИЯ Мог.thName (месяц [; имя; ) преобразует числовое обозначение месяца в строковое выражение, указывающее полное (имя=ложь) или сокращенное (имя=истина) название месяца. Например, MonthNamet [срок_пост]; Истина) возвращает сокращенное название месяца. По умолчанию берется значение ложь (название не сокращается). О Функции обработки текста. Используются при работе с символьными строками. К этой группе функций относится, например, функция Format, которая служит для преобразования любого допустимого выражения (в том числе числового значения, даты) в символьную строку. Format(выражение[;
формат[;
первый_день_недели[;
пер-
вая_неделя_года] ] ] ) . Если аргумент выражение указан в формате даты, то аргумент формат задает форматирование даты. Символы формата даты приведены в табл. 4.1. Таблица 4.1. Символы формата даты Символ форматирования
Возвращаемое значение
dddd
Название дня недели
ddd
Сокращенное название дня недели
dd
Номер дня месяца
ww
Номер недели года
mmmm
Полное название месяца
mm
Номер месяца
mmm
Краткое название месяца
уу
Две последние цифры года
уууу
Четыре цифры года
150
Часть
_
I.
Основы
технологии
Microsoft
Access
Например: Format ( [НАКЛАДНАЯ] ! [ДАТА_ОТГР] ; "mmrtm" ) — ВОЗВрЗТИТ ПОЛНО6 название
месяца; Format ( [НАКЛАДНАЯ] ! [ДАТА_ОТГР] ; "mm") — возвратит НОМСр месяца.
Замечание Если необходимо выделить не один элемент из даты, запишите в функции Format несколько символов форматирования, разделяя их знаком "\". Например, функция Format { [НАКЛАДНАЯ] ! [ДАТА_ОТГР] ; 'mmmrn\ yyyy' ) ВОЭВра-
тит полное название месяца и год. После знака Т нужно поставить пробел.
О Функции преобразования типа данных. Позволяют задавать тип данных для числовых значений, что исключает необходимость подбора наиболее подходящего типа данных системой. О Математические и тригонометрические функции. Выполняют операции над числовыми значениями, которые невозможно выполнить с помощью стандартных арифметических операторов. П Финансовые функции. Подобно функциям Excel служат для расчета процента возврата по инвестициям, амортизационных отчислений, годовой ренты и т. п. О Статистические функции. Используются при работе над полями подмножества записей, вычисляют среднее значение, сумму, минимальное, максимальное значения. Для записи выражения в вычисляемом поле или формирования условия отбора может быть использован Построитель выражений (Expression Builder), который вызывается кнопкой Построить (Build) панели инструментов. Курсор мыши предварительно должен быть установлен в ячейке ввода выражения.
Использование функций в вычисляемых полях Допустим, необходимо выбрать все накладные, по которым производилась отгрузка в заданном месяце. В таблице НАКЛАДНАЯ дата отгрузки хранится в поле ДАТА__ОТГ типа Дата/время (Date/Time). Для выборки накладных по заданному месяцу создадим вычисляемое поле в пустой ячейке строки Поле (Field), записав туда выражение вида: моп^(НАКЛАДНАЯ!ДАТА_отт) , если месяц будет задаваться номером; MonthMame (Month (НАКЛАДНАЯ !ДАТА_ОТГ) ) ИЛИ Format { [НАКЛАДНАЯ] ! [ДАТА_ОТГР] ; "mmmm") ,
если месяц будет задаваться полным названием.
Глава 4. Запросы
151
Функция Month возвращает выделенный из даты номер месяца. Функция MonthName преобразует номер месяца в его название. Функция Format возвращает выделенное из даты полное название месяца. Запрос, содержащий первое приведенное выражение, для которого в качестве условия отбора введен номер месяца — 3, — приведен на рис. 4.7. Запрос, содержащий второе приведенное выражение, для которого в качестве условия отбора введено название месяца — март, — приведен на рис. 4.8.
ном_ндкл код_ск ДАТД_ОТГ
ном лог
HOMJHAKn НАКЛАДНАЯ
КОД СК НАКЛАДНАЯ
0
МопЕЬ([НАКПАДНАЯ}!{ДАТА ОТГ])
0
-
0 3
-
<
^
Рис. 4.7. Запрос с функцией выделения из даты номера месяца в вычисляемом поле
Поле: НОМ НАКЛ Имя таблицы; НАКЛАДНАЯ Сортировка: Вывод на экран: 0 Условие отбора: или:
КОД СК НАКЛАДНАЯ
1
МопЬЬМате(Мог*Н([НАКЛАДНАЯ]![ДАТА_ОТГР]))
0
0
"Март"
<
>
Рис. 4.8. Запрос с функцией выделения из даты полного названия месяца в вычисляемом поле
На рис. 4.9 и 4.10 показано, как сформировать выражение в построителе, выбрать нужную функцию и в качестве аргумента функции — нужное поле таблицы базы данных.
Часть I. Основы технологии Microsoft Access
152 Построитель выражений
[*?JP^ OK
Month («number») |
Отмена
+ -1 /|*1 &| =| >] <|<>] And| Or j Not JLike] (| )] (±3 Таблицы Ей Запросы Й Forms ~
л ; i ' 'Массивы I Преобразование Баз^анных
Q Функции
J По подмножеству
L О Поставка товаров i ч*»™*" /г^,,.. ,- Общие О Константы v |Проеерка < >s Математические
Вставить j
Справка
A; IsDate j Minute
л:
i MonthName Now Second ;Titne Time$ Timer TimeSerial ^ Time Value
4onth(number)
Рис. 4.9. Выбор функции в построителе выражений
Построитель выражений
[?][Х OK
Month ( [НАКЛАДНАЯ]![ДАТА_ОТГ] )
Отмена Цаэа
+j - j /j*f&| =|>|<1<>| And] Or | Not JLike | ({ j] f^Tafinn.^,
-D ОТГРУЗКА - D ПОКУПАТЕЛЬ - О ПОСТАВКА_ПЛАН -D СКЛАД -D ТОВАР
<>
*.„ ;НЛМ НДК-П
д1
Вставить] ___£лравка | рПЛШШП^ШВВ
1 с?ММА°НАКЛ
Ч-
&'
i
_ ^
4onth(stringeHpr)
Рис. 4.10. Выбор поля таблицы в построителе выражений
После ввода выражения система формирует имя вычисляемого поля по умолчанию — выражением (Exprw). Это имя будет вставлено перед выражением.
Глава 4. Запросы
Присвоение пользовательских имен вычисляемым полям По умолчанию первому вычисляемому полю присваивается имя выражение!, следующему Выражение2 и т. д. Пользователь имеет возможность присвоить новое имя и подпись вычисляемому полю. Для изменения только имени поля в запросе в режиме конструктора запроса в бланке запроса вместо Выражением (Exprw) введите новое имя. Новое имя используется не только в заголовке столбца таблицы запроса, а й в новых объектах, построенных на этом запросе. Для изменения подписи поля в свойствах поля установите курсор мыши на вычисляемое поле в бланке запроса и откройте окно Свойства поля (Field Properties), щелкнув правой кнопкой мыши и выбрав в контекстном меню пункт Свойства (Properties). В окне Свойства поля (Field Properties) на вкладке Общие (General) введите нужный текст подписи в строку Подпись поля (Caption).
Параметры запроса Как было показано выше, конкретное значение в выражение условия отбора может вводиться непосредственно в бланк запроса. Однако при решении практических задач значительно удобнее вводить значение в диалоге с пользователем в процессе выполнения запроса. Для того чтобы выводилось диалоговое окно, обеспечивающее ввод конкретного значения в условия отбора, нужно определить параметр запроса. Имя параметра запроса может задаваться непосредственно в строке Условия отбора (Criteria) в квадратных скобках. При выполнении запроса это имя появится в диалоговом окне Введите значение параметра (Enter Parameter Value). Например, если в условии отбора рассмотренного ранее запроса (см. рис. 4.7) номер месяца — з — заменить на имя параметра — [Номер месяца], то при выполнении запроса будет выводиться диалоговое окно (рис. 4.11), позволяющее задать значение параметра запроса — номер месяца.
Введите значение параметра Номер месяца
'| Рис. 4.11. Диалоговое окно ввода значения параметра
Часть I. Основы технологии Microsoft Access
154
В запросе может быть определено несколько параметров. При этом порядок их ввода через диалоговые окна определяется порядком расположения полей с параметрами в бланке запроса. Чтобы иметь возможность ввести несколько значений в условия отбора одного поля, можно в условии отбора этого поля определить несколько параметров. Например, для отбора записей по двум месяцам в условии отбора вычисляемого поля в приведенном примере можно записать два параметра, связанных логической операцией OR: [Номер месяца] OR [Еще один номер].
Параметры запроса могут быть использованы для ввода значения операнда не только в выражения условий отбора, но и вычисляемых полей. Например, для увеличения цены на заданный процент вычисляемое поле с параметром запроса [На сколько процентов увеличить?] может быть записано аналогично тому, как показано на рис. 4.12. кг Параметр в выражении : запрос на выборку
•
ШД код_тов НАММ_ТОВ ЦЕНА ЕЙ
'
! - j[DJ[XJ
•
'•
'
"
'1
:1 . ^ v-
V-
.<•: с)
g Поле: НАИМ_ТОВ Имя таблицы: ТОВАР Сортировка: Вывод на экран: 0 Условие отбора: или:
<
Новая иена: [ЦЕНА]+[ЦЕНА]*[Нэ сколько процентов увеличить?]/ 100
=-*S гГ
0
'!
"-•
,>!,
Рис. 4.12. Использование параметра запроса в выражении вычисляемого поля
Использование групповых операций в запросах Назначение групповых операций
1
.
Групповые операции позволяют выделить группы записей с одинаковыми значениями в указанных полях и использовать для этих групп одну из статистических функций.
Глава 4. Запросы
/55
В Access предусматривается девять статистических функций: П sum — сумма значений некоторого поля для группы; О Avg — среднее от всех значений поля в группе; О мах, Min — максимальное, минимальное значение поля в группе; О count — число значений поля в группе без учета пустых значений; О stDev — среднеквадратичное отклонение от среднего значения поля в группе; О var — дисперсия значений поля в группе; О First и Last — значение поля из первой или последней записи в группе. Результат запроса с использованием групповых операций содержит по одной записи для каждой группы.
Порядок создания запроса с использованием групповых операций Для создания запроса с использованием групповых операций формируется запрос на выборку. В бланк запроса включаются поля, по которым надо произвести группировку, и поля, по которым надо произвести статистические вычисления. Выполняется команда Вид|Групповые операции (View|Tota!s) или на панели инструментов конструктора запросов нажимается кнопка Групповые операции (Totals). Можно также нажать правую кнопку мыши и выбрать в контекстном меню Групповая операция (Total) (курсор мыши должен быть устаИовлен в бланке запроса). В бланке запроса появляется строка Групповая операция (Total), в которой для всех полей записано группировка (Group By), Для того чтобы выполнить вычисления в группе по некоторому полю, нужно заменить в нем слово группировка (Group By) на статистическую функцию. Выбрать необходимую функцию можно через раскрывающийся в поле список. Рассмотрим конструирование запроса с групповой операцией на примере таблицы ПОСТАВКА ПЛАН.
Запрос с функцией Sum Определим, какое суммарное количество каждого из товаров должно быть поставлено покупателям по договорам. Все данные о запланированном к поставке количестве товара указаны в таблице ПОСТАВКА_ПЛАН.
Часть I. Основы технологии Microsoft Access
Создадим запрос на выборку для таблицы поСТАВКАМИлАН. Из списка таблицы перетащим в бланк запроса поле код_тов — код товара. Это поле создадим для дальнейшей группировки по нему. Перетащим в бланк запроса поле кол_пост, по которому будет вычисляться функция sum для подсчета суммарного количества конкретного товара, заказанного во всех договорах. Нажмем кнопку Групповые операции (Totals). Заменим слово группировка (Group By) в столбце кол__пост на функцию sum. Для этого вызовем список и выберем эту функцию. Бланк запроса примет вид, показанный на рис. 4.13. '0 Запрос? : запрос на выборку
HOMJOT код_тов СРОКГЮСТ мин пост
кол пост
Поле; КОДТОВ Имя таблицы: ПОСТАВКА ПЛАН Групповая операция; Группировка Сортировка; Вывод на экран; Условие отбора;
ПОСТАВКА ПЛАН 1i
Рис. 4.13. Запрос с группировкой по коду товара и суммированием количества в группе
Результат выполнения запроса показан на рис. 4.14. $ Запрос? : запрос на выборну Код товара >_ Монитор 17LG
FDD 3,5 HDD Maxtor2QGB Корпус MiniTower CD:ROM Panasonic IDE За чись; H | ^ | j i ' >
P]f6][x]
Sum-КОЛ ПОСТ 262 60 10
30 40
И [^ "| из 5
Рис. 4.14. Результат подсчета суммарного количества товаров
Глава 4. Запросы
157
Внимание В поле код_тов отображается не код товара, сохраняемый в таблице ПОСТАВКА_ПЛАН, а его наименование. Это определяется тем, что в таблице для поля код_тов построен список на основе таблицы ТОВАР. Если в вашей базе данных поле код_тов не преобразовано в поле со списком, как показано в главе 3, в таблице запроса будет отображаться код товара. ПОДПИСЬ ПОЛЯ Sum - КОЛ_ГЮСТ МОЖНО ЗаМСНИТЬ На Заказано товаров. Для
ввода этой подписи перейдем в режим конструктора, в бланке запроса установим курсор мыши на поле кол_пост и нажмем правую кнопку. В контекстном меню выберем Свойства (Properties). В окне Свойства поля (Field Properties) наберем в строке Подпись (Caption) — заказано товаров. Таблица результата после доработки запроса показана на рис. 4.15.
- П
Запрос? : запрос на выборку Код товара Монитор 17LG_ FDD 3,5 HDD Maxtor20GB Корпус MiniTower CD-ROM Panasonic IDE Запись: И 1
Заказано товаров
MM
из 5
Рис. 4.15. Таблица результата с измененной подписью поля
Сохраним запрос-выборку под именем "Заказано товаров". Если необходимо подсчитать количество товаров, заказанных в каждом месяце, группировка должна быть произведена по двум полям код_тов и СРОК_ПОСТ, во втором поле хранится номер месяца поставки (рис. 4.16, рис. 4.17). Если необходимо подсчитать количество товаров, заказанных в заданном месяце, предыдущий запрос нужно дополнить вводом параметра запроса в условие отбора (рис. 4.18, 4.19).
reo
Часть I. Основы технологии Microsoft Access
Сохраним запрос под именем "Число отгрузок по договорам". Результат выполнения запроса показан на рис. 4.21. 'is* Число отгрузок по договорам :.. > Д111
Д222 ДЗЗЗ Запись: JJLJ_j.J |
.00® , 4
Соип1-НОМ_ДОГ
Номер договора
5 3
1 * | И |С^j из
3
Рис. 4.21. Результат подсчета числа отгрузок по договорам
Задание условий отбора в запросах с групповыми операциями В запрос с групповыми операциями можно помимо полей, по которым производится группировка и выполнение статистических функций для групп, включать поля для задания условий отбора записей из таблиц. Подсчитаем, сколько накладных было выписано по каждому из договоров и какова общая стоимость товаров, отгруженных по этим накладным. В расчете будем учитывать только накладные на сумму более 10 000 руб. Для этого в бланк запроса Число отгрузок по договорам включим поле СУММА_НАКЛ и заменим в нем слово группировка (Group By) на функцию sum. Затем вторично включим поле СУММА_НАКЛ в бланк запроса и заменим слово Группировка (Group By) НЗ СЛОВО Условие (where), выбрав 6ГО ИЗ СПИСКЗ.
После этого введем в строку Условие отбора (Criteria) выражение: >юоос (рис. 4.22).
Поле: Имя таблицы: Групповая операция: Сортировка: Вывод на экран; Условие отбора;
НОМ_ДОГ НАКЛАДНАЯ Группировка
121
ном_дог НАКЛАДНАЯ Count 0
СУММА НАКЛ НАКЛАДНАЯ Sum
л
СУММА НАКП НАКЛАДНАЯ Условие
MOQQQ
'*И
п
или;
|
<
Рис. 4.22. Запрос с групповыми операциями и полем, введенным для определения условий отбора записей из таблицы НАКЛАДНАЯ
>
Глава 4. Запросы
'
:
Убедитесь, что число накладных для некоторых договоров уменьшилось, а общая стоимость по договору также считается только с учетом накладных на сумму более 10 000 руб. (рис. 4.23).
Число отгрузок по договорам : запрос на вы. Номер договора
СоигЙНОМ^ДОГ
Запись:
Рис. 4.23. Результат выполнения запроса
Внимание Условие отбора, заданное в поле, где записана функция, или в поле, по которому проводится группировка, позволяет отобрать только нужные группы записей, например, можно отобрать договоры с заданными номерами: in ("Д111",-"ДЗЗЗ") или с заданной общей стоимостью отгрузки по ним: >ЮО 000.
Использование в условии отбора функций Допустим, необходимо выбрать запись с максимальным значением в поле, для которого записана статистическая функция. Задачу можно решить, использовав функцию омах. Эта функция позволяет определить максимальное значение в указанном наборе записей (подмножестве). Формат функции имеет вид: DMax(выражение, подмножество, [условия_отбора]}
где выражение определяет поле, для которого надо найти максимальное значение, подмножество задает строковое выражение, определяющее набор записей, составляющих подмножество. Для имени таблицы или запроса не нужен параметр. Аналогичная функция DMin позволяет определить минимальное значение. На рис. 4.24 представлен запрос, выбирающий договор, по которому отгружен товар на максимальную сумму. Этот запрос построен на предыдущем запросе, сохраненном под именем "Число отгрузок по договорам". В условие Отбора записана фуНКЦИЯ DMaxf"[Зит-СУММА_НАКЛ]";"Число отгрузок по договорам").
Часть I. Основы технологии Microsoft Access
162
lir 3dnpoc13 : запрос на выборку
Поле: Ига таблицы: Сортировка: Вывод на экран:
ном_дог Число отгр
Шш
Сошг-НСМ_ДОГ Число отгрузок i
0
Условие отбора:
а
л
Sum-СУММА НАКЛ Число отгрузок по договорам
0 ОМах("[5чт-СУММА_НДКЛ] ; "Число отгрузок по договорам")
или:
<|
> *
Рис. 4.24. Запрос для определения договора, по которому отгружено товара на максимальную сумму ЗАДАНИЕ 1. Условие отбора
Подсчитайте, какой товар был запланирован к поставке в максимальном количестве.
Режим SQL для запроса SQL (Structured Query Language) - язык структур и рованных запросов, который используется для обработки данных в реляционных базах. Любой запрос в Access реализуется с помощью инструкций языка SQL, которые передаются на выполнение в ядро базы данных Microsoft Jet. Большинство запросов можно создать в графическом режиме конструктора, но и в этом случае запрос хранится в виде инструкции SQL. При создании запроса в режиме конструктора Access автоматически создает эквивалентную инструкцию SQL, которую можно увидеть, переключившись в режим SQL. Изменения инструкции SQL в свою очередь отображаются в бланке запроса. Использование для создания запроса бланка и просмотр его представления в режиме SQL позволят понять и освоить основные инструкции языка, реализованного в Access. При создании формы, отчета или страницы доступа к данным на основе нескольких таблиц для определения источника записей создается инструкция SQL. Если при их создании использовался мастер, Access автоматически формирует инструкцию SQL. Если мастер не использовался, инструкция SQL формируется пользователем в строках свойств Источник записей (RecordSource) или Источник строк (RowSource). При этом также может ис-
Глава^4. Запросы
пользоваться бланк запроса, вызываемый нажатием кнопки построителя в соответствующей строке. В Access запросы SQL могут создаваться в одном из двух режимов синтаксиса SQL: G ANSI-89 SQL (который также называют Microsoft Jet SQL и ANSI SQL) описывает традиционный синтаксис Jet SQL; близкий к спецификации ANSI-89 уровня 1, но несовместимый с ним; П ANSI-92 SQL содержит новые и измененные зарезервированные слова, правила синтаксиса и подстановочные знаки; близкий к спецификации ANSI-92 уровня 1, но несовместимый с ним.
С
Замечание
J
Режим запросов ANSI-92 SQL поддерживается только в формате файлов базы данных Access 2002—2003.
При создании базы данных Access необходимо решить, какой режим запросов будет использоваться, поскольку одновременное использование запросов созданных в обоих режимах, может привести к ошибкам при выполнении или непредсказуемым результатам. Если предполагается будущее развитие приложения до проекта Microsoft Access, который работает с базой данных Microsoft SQL Server, и требуется разработать запросы, которые будут выполняться с минимальными изменениями на SQL Server, необходимо использовать ANSI-92 SQL. Кроме того, можно будет воспользоваться преимуществами новых средств, отсутствующих в ANSI-89 SQL. По умолчанию для новых баз данных Access в формате файла 2002—2003 устанавливается режим ANSI-89. Чтобы установить режим запроса SQL ANSI-92 в качестве режима по умолчанию для вновь создаваемых баз данных, нужно выполнить следующие действия: d в меню Сервис выберите команду Параметры, перейдите на вкладку Другие, в списке Формат файла по умолчанию выберите пункт Access 2002 — 2003; CJ перейдите на вкладку Таблицы и запросы и в разделе Синтаксис для SQL Server (ANSI-92) установите флажок по умолчанию для новых баз данных. Для текущей базы данных также возможна смена режима запросов ANSI SQL. Для установки режима запросов ANSI-92 SQL в разделе Синтаксис для SQL Server (ANSI-92) установите флажок Текущая база данных. Для установки режима запросов ANSI-89 SQL снимите флажок Текущая база данных.
164
Часть /. Основы технологии Microsoft Access
Замечание Прежде чем новый параметр будет принят, база данных автоматически закроется и будет выполнено ее сжатие, а затем — открытие.
Следует иметь в виду, что при изменении режима запросов ANSI SQL существующие запросы могут не работать или выдавать неверные результаты.
Просмотр инструкции SQL в запросе L. Откройте в режиме конструктора рассмотренный ранее запрос (см. рис. 4.6) и сохраненный затем под именем "Пример!". 2. Для перехода в режим SQL выберите из списка кнопки Вид (View) соответствующее значение. Access выведет для запроса, созданного в режиме конструктора, эквивалентную инструкцию SQL (рис. 4.25).
is1 Пример 1 : запрос на выборку
ISELECT ТОВАР ,НАИМ_ТОВ, ТОВАР .ЦЕНА, ТОВАР. СТАБКА_НДС
IFROM ТОВАР IWHERE (((ТОВАР,ЦЕНА)<юоо) AND ((ТОВАР,СТАВКА ндс)<-ол)) OR (((ТОВАР, ЦЕНА) >2soo)) ORDER BY ТОВАР. ЦЕНА;
Рис. 4.25. Запрос с логическими операциями в условии отбора в режиме SQL с
Инструкция SELECT используется для выбора полей из таблиц базы данных и формирования набора записей — таблицы запроса. Предложение FROM определяет таблицы или запросы, которые служат источником данных для данного запроса, В предложении WHERE задаются условия отбора записей, которые полностью соответствуют сформулированному заданию на создание запроса (см. рис. 4.6). Предложение ORDER BY указывает, по каким полям должна быть выполнена сортировка записей в таблице запроса. При отсутствии сортировки этого предложения нет в инструкции. На рисунке инструкция указывает на сортировку по возрастанию по полю ЙЕНА таблицы ТОВАР. 1. Перейдите в режим конструктора, внесите изменения в бланк запроса, например, добавьте поле с кодом товара — код_тов. 2. Вернитесь в режим SQL и посмотрите, как изменилась инструкция SQL. 3. Чтобы убедиться, что запросы можно редактировать в режиме SQL, а не в режиме конструктора, внесите изменения в инструкцию SQL, удалив из списка полей код тов.
Глава 4. Запросы
165
4. Затем перейдите в режим конструктора и убедитесь, что из бланка запроса удалено поле код_тов. 5. Откройте в режиме конструктора запрос Число отгрузок по договорам, в котором используется только функция подсчета числа договоров (см. рис. 4.20, 4.21). 6. Перейдите в режим SQL. Инструкция SQL в этом запросе будет записана аналогично тому, как показано на рис. 4.26.
Число отгрузок по договорам : запрос на выборку [SELECT НАКЛАДНАЯ.НОМ_ДОГ, Count (НАКЛАДНАЯ .НОМ ЛОГ) AS [Count - Н ОМ ^Д О Г]
IFROM НАКЛАДНАЯ «GROUP BY НАКЛАДНАЯ. НОН_ДОГ;
у»
V
Рис. 4.26. Запрос с использованием функции Count в режиме SQL
В инструкции SELECT определен вывод полей в таблицу запроса. Это поле ном_дог, по которому производится группировка, и вычисляемое поле, содержащее результат, возвращаемый функцией count, примененной к полю ном_дог. Кроме того, зарезервированное слово АЗ позволяет определить для поля с результатом вычисления функции псевдоним count: ном__дог, который станет заголовком столбца. Обратите внимание, что в инструкции допускается использование, наряду с* именами полей, включаемых в результат, функций и более сложных выражений, определяющих содержимое вычисляемых полей. Предложение Группировка (Group By) указывает, что необходимо объединить записи с одинаковыми значениями в указанных полях (ном_дог таблицы НАКЛАДНАЯ) в одну запись.
Многотабличные запросы Многотабличный запрос позволяет сформировать записи результата путем объединения взаимосвязанных записей из таблиц базы данных и выбора из них нужных полей и записей. Многотабличный запрос часто осущестапяет объединение данных, которые на этапе проектирования были разделены на множество объектов в соответствии с требованиями нормализации. В таких объектах, прежде всего, обеспечивалось отсутствие дублируемости данных в базе, повторяются только значения ключевых полей. В результате выполнения запроса формируется таблица с повторяющимися данными, в которой каждая запись собирает необходимые данные из разных таблиц.
166
Часть I. Основы технологии Microsoft Access
Например, при объединении двух нормализованных связанных одномногозначными отношениями таблиц, для которых обеспечивается связная целостность, результирующая запись образуется на основе записи подчиненной таблицы, в которую добавляются поля из связанной записи в главной таблице. Подобное объединение формирует ненормализованную таблицу, в которой число записей равно числу записей в подчиненной таблице. При этом данные главной таблицы дублируются в различных записях результирующей таблицы. При проектировании и конструировании запроса важнейшим условием является правильное представление о том, как идет объединение записей таблиц при формировании результата. Рассмотрим технологию конструирования многотабличного запроса на выборку на примере. Допустим, необходимо получить информацию о товарах, запланированных к поставке покупателям по всем договорам. Результат должен содержать наименование покупателя, месяц поставки, наименования заказанных товаров и их количество. Для создания запроса в окне базы данных выберем объект Запросы (Queries) и щелкнем по строке Создание запроса в режиме конструктора (Create query in Design view).
Формирование схемы данных запроса В окне Добавление таблицы (Show Tabie) (см. рис. 4.4) выберем взаимосвя5анные таблицы: П ПОКУПАТЕЛЬ — для выборки наименования покупателя (поле НАИМ_ПОК); П ПОСТАВКА_ПЛАН — для выборки месяца поставки (поле СРОК_ПОСТ) и количества товара, запланированного к поставке (поле кол_пост); П ТОВАР — для выборки наименования товара (поле НАЙМИТОВ), представленного кодом код__тов в таблице ПОСТАВКА^ПЛАН. Закроем окно Добавление таблицы (Show Table). В окне конструктора запросов будет представлена схема данных запроса, содержащая выбранные таблицы. Между таблицами ПОСТАВКА_ПЛАН и ТОВАР автоматически установлена связь. Таблицы ПОКУПАТЕЛЬ и ПОСТАВКА_ПЛАН не имеют полей, по которым их можно было бы связать, поэтому в соответствии с общей схемой данных добавим в схему данных запроса таблицу ДОГОВОР, которая позволит организовать недостающую связь (рис. 4.27). Отношения между таблицами схемы данных запроса являются одномногозначными. Таблица ПОСТАВКА_ПЛАН является подчиненной и для таблицы ТОВАР, и для таблицы ДОГОВОР, которая, в свою очередь, подчинена таблице ПОКУПАТЕЛЬ.
Глава 4. Запросы
167
Эапросб : запрос на выборку
*
A.I
КОД_ПОК ИНН
: Г ' I
|НАИМ_ПОК АДРЕС_ПСЖ v.|
*
'
ддтдлог код_пок 'СУМНА_ДОГ
•0
*
Л"
KO/LTOB СРОК_ПОСТ мин_пост
1
221
л:
*
КОДЛСв НАИМ_ТОВ ЦЕНА ш
t,
кол_пост ^
.V'l
>'.
g§j
Поле; Имя таблицы: Сортировка: Вывод на экран: Условие отбора: или:
D
п
a
<•;•
•1
V
Рис. 4.27. Окно запроса с созданной схемой данных
Подготовка бланка запроса Перетащим с помощью мыши поля, включаемые в результат выполнения запроса, в строку бланка запроса Поле (Field): НАИМ_ПОК — из таблицы ПОКУПАТЕЛЬ; НАИМ_ТОВ — из таблицы ТОВАР; СРОК_ПОСТ и кол__пост — из таблицы ПОСТАВКА_Ш1АН. Поскольку в запросе используется несколько таблиц, в бланке запроса удобно видеть наряду с именем поля имя таблицы. Если строка Имя таблицы (Table Name) не отображена в бланке запроса, выполним команду Вид]Имена таблиц (View|Table Names) или нажмем соответствующую кнопку на панели инструментов.
Ввод значений в условия отбора записей Допустим, необходимо получить информацию о плане поставки конкретных товаров - FDD 3,5. и HDD Maxtor 20GB. Запишем в разных строках Условие отбора (Criteria) наименования этих товаров, поскольку необходимо выбрать записи со значением в поле НАИМ_ТОВ "FDD 3,5" или "HDD Maxtor госв". Если марка HDD не известна или безразлична, зададим ее с использованием символа шаблона — звездочка "*". После ввода наименования с символом шаблона система сама вставляет операгор Like, определяющий поиск по образцу. После заполнения бланка запроса он примет вид, представленный на рис. 4.28.
Часть /. Основы технологии Microsoft Access Эапросв : запрос на выборку
НОМ_ДОГ
KOfiJTOK •*; ИНН НАИМ_ПОК АДРЕС ПОК у!.
ДАТЛ_ДОГ
KCVLTOB
код.пок
СРОК_ПОСТ
мин_пост кол пост
СУММАДОГ
Поле: Имя таблицы: Сортировка; Вывод на экран; Условие отбора; или:
HAMMJ10K ПОКУПАТЕЛЬ
0
СРОК ПОСТ ПОСТАВКА^ПЛАН 0
НАИМ TQ8 ТОВАР
КОЛ ПОСТ " ПОСТАВКА ПЛАН ;
0 "FDD 3,5" Lite "HDD*"
0 V
<•; 1
>'*"
Рис. 4.28. Запрос на получение информации о плане поставок товаров FDD 3,5 и HDD
Выполним запрос, нажав на панели конструктора запросов кнопку Запуск (Run) или Вид (View). Результат выполнения запроса представлен на рис. 4.29.
Срок поставки Наименование товара 1 FDD 3,5 3 FDD 3,5 2 :HDD Maxtor 2QGB
Компьютер маркет Компьютер маркет Компьютер маркет Запись;
И
4
Количество
• I.H ]• И из 4
Рис. 4.29. Результат выполнения запроса о плане поставок товаров FDD 3,5 и HDD
Формирование записей результата при выполнении запроса Сначала рассмотрим, как формируются записи результата запроса, если не заданы условия отбора. В данном примере для каждой пары таблиц указан способ объединения только тех записей, в которых связанные поля обеих таблиц совпадают (в
Глава 4. Запросы
169
соответствии с заданным по умолчанию первым способом объединения). При этом, поскольку рассматриваемые пары таблиц находятся в отношении один-ко-многим и в схеме данных для их связи определены параметры обеспечения целостности, в результате сформируется столько записей, сколько их имеется в подчиненной таблице низшего уровня ПОСТАВКАМИЛАН. Обеспечение целостности не позволяет включить в таблицу ГЮСТАВКА_ПЛАН записи, для которых не существует записей в главных таблицах. По сути, записи таблицы ПОСТАВКА_ПЛАН дополняются расшифровывающими данными из таблиц ТОВАР и ПОКУПАТЕЛЬ. Вместо ключевого поля код_тов в запись о плане поставок будет включено наименование товара, а вместо ном_дог наименование покупателя. Таким образом, для того чтобы понять, что получится в результате выполнения запроса, надо знать, в каких отношениях находятся таблицы запроса и как определена связь между ними; установлены ли для связи таблиц параметры обеспечения целостности и какой способ объединения задан для связи. При задании условий отбора основные принципы формирования записей результата остаются прежними. Выполняется только одна дополнительная функция: отбор записей, соответствующих сформулированным условиям, Таблица с результатом запроса будет содержать все записи о поставках товара, наименования которых указаны в условии отбора. Сохраните запрос под именем "План поставок".
Параметры объединения записей таблиц в инструкциях SQL Откройте в режиме конструктора запрос План поставок, в схеме данных которого для исходных таблиц установлен первый способ объединения. Перейдите в режим SQL, выбрав его из списка кнопки Вид (View). Инструкция SQL для этого запроса будет иметь вид: SELECT ПОКУПАТЕЛЬ.НАИМ_ПОК, ПОСТАВКАJ1J1AH\ СРОК_ПОСТ, ТОВАР. НАИМ_ТСЗ, ПОСТАВКА_ПЛАН.КОЛ_ПОСТ FROM ТОВАР INNER JOIN (ПОКУПАТЕЛЬ INNER JOIN (ДОГОВОР INNER JOIN ПОСТАВКА_ПЛАН ON ДОГОВОР.НОМ_ДОГ = ПОСТАВКА_ПЛАН.НОМ_ДОГ) ON ПОКУПАТЕЛЬ.КОД_ПОК = ДОГОВОР.КОД_ПОК) ОМ ТОВАР.КОД_ТОВ = ПОСТАВКА_ПЛАН.КОД_ТОВ WHERE (((ТОВАР.HAMM_TOB)="FDD 3,5" Or (ТОВАР.HAKMJTOB) Like "HDD*"));
Предложение FROM данной инструкции SELECT не только определяет таблицы, которые служат источником данных для данного запроса, но и способ объединения каждой пары таблиц INNER JOIN и цоля, по которым связываются таблицы, например: ON ДОГОВОР.НОМ_ДОГ = ПОСТАВКА_ПЛАН.НОМ_ДОГ.
Часть I. Основы технологии Microsoft Access
170
Операция INNER JOIN используется для определения симметричного объединения, задаваемого первым способом. Кроме того, в предложении четко определена последовательность объединения таблиц: сначала производится объединение таблиц ПОСТАВКА_ПЛАК и ДОГОВОР, затем полученная таблица объединяется с таблицей ПОКУПАТЕЛЬ и, наконец, с таблицей ТОВАР. Вернитесь в режим конструктора запроса и измените способ объединения таблиц ПОКУПАТЕЛЬ -• ДОГОВОР, ДОГОВОР - ПОСТАВКА_ПЛАН и ПОСТАВКА^ ПЛАН — ТОВАР, как показано на рис. 4.30. 1
и План поставок : запрос на выборку
KOflJTOK ИНН НАИМ_ПОК
m
АДРЕС пок у;
ном_дог ДАТА^ОГ КОД.ПОК СУММАДОГ
ПОСТАВКА. ном_дог код_тов а*ок_пост WHJTOCT
кол пост
Рис. 4.30. Отображение в схеме данных запроса второго и третьего способов объединения записей таблиц
Чтобы увидеть результат этого способа объединения, удалите условия отбора и проследите, чтобы в таблице ПОКУПАТЕЛЬ были и те, кто не заказывал товар (рис. 4.31). В ПОЛЯХ Срок поставки, Наименование товара, Количество ДЛЯ покупателей,
не заключивших договоров, в результате такого объединения стоят значения Null.
Убедиться в этом можно, если ввести в условие отбора любого из перечисленных полей Null. В результате будет получен список только тех покупателей, которые не заключали договоров, т. к. только для них это поле имеет значение Null. Если задать в условии отбора Not Null, будут выведены только записи о покупателях, заказавших товар в рассматриваемом учетном периоде. Инструкция SQL для такого запроса будет иметь следующий вид: SELECT ПОКУПАТЕЛЬ.НАИМ__ПОК, ПОСТАВКА ПЛАН.КОЛ ПОСТ
ПОСТАВКАJUIAH. СРОКJ10CT,
ТОВАР.НАШ__ТОВ,
Глава 4. Запросы
171
FROM ТОВАР RIGHT JOIN (ПОКУПАТЕЛЬ LEFT JOIN (ДОГОВОР LEFT JOIN ПОСТАВКА_ПЛАН ON ДОГОВОР.НОМ^ДОГ = ПОСТАВКА_ПЛАН.НОМ_ДОГ) ON ПОКУПАТЕЛЬ.КОД_ПОК - ДОГОВОР.КОД_ПОК) ON ТОВАР.КОД_ТОВ = ПОСТАВКА ПЛАН.КОД ТОВ;
|!
is* План поставок ; запрос на выборку
.. ; П У '
НАИМ ПОК Срок поставки Наименование товара Компьютер маркет 1 Монитор 17LG 2 Монитор 17LG ^_ Компьютер маркет Компьютер маркет 3 Монитор 17LG : Компьютер маркет 1 FDD 3,5 Компьютер маркет 3 FDD 3,5 Компьютер маркет 1 Монитор 17LG Компьютер маркет 2 :Монитор 17LG Компьютер маркет 2 HDD Maxtor 20GB Компьютер маркет 3 Корпус MiniTower Перспектива 1 : CD-ROM Panasonic IDE Инфоцентр Монитор ' Компьтер лэнд Компьютерная техника Запись: „Hj^j J |
1 >• ] И |>#j из 16
<
Количество * 100 20 30 50 10 100 13— I 10 30 40
TJ jj
Рис. 4.31. Результат объединения записей вторым и третьим способом
Операция LEFT JOIN используется для определения левого внешнего объединения, задаваемого вторым способом. При этом в результат включаются все записи из первой (левой в окне Параметры объединения) таблицы, даже если нет совпадающих значений для записей из второй (правой) таблицы. При этом способе объединения записей в результирующий набор будет включена запись о покупателе, даже если он не заключал договоров. Операция RIGHT JOIN используется для определения правого внешнего объединения, задаваемого третьим способом. При этом объединение включает все записи из второй (правой в окне Параметры объединения) таблицы, даже если нет совпадающих значений с записями из первой (левой) таблицы. В данном примере такой способ объединения использован для таблиц ТОВАР И ПОСТАВКА_ПЛАН.
Для изменения способа объединения записей таблиц выделите связь, в контекстном меню воспользуйтесь командой Параметры объединения и в открывшемся окне выберите нужный способ объединения. Для пар таблиц должны быть установлены такие способы объединения, которые не приведут к неоднозначности внешних связей. Нельзя выполнить запрос, если в нем установлены неоднозначные способы объединения таблиц. В рассматриваемом примере для таблиц ТОВАР и ПОСТАВКА_ПЛАН нельзя установить
Часть I. Основы технологии Microsoft Access
172
способ объединения, при котором в результат будут включаться все товары, даже если для них нет связанных в таблице ПОСТАВКА_ПЛАН.
Ввод параметров в запрос В предыдущем примере для задания наименования товара необходимо было в режиме конструктора корректировать бланк запроса. Чтобы избежать этого, используйте в запросе параметры. Перед выполнением запроса Access запросит у пользователя конкретные значения параметров и введет их в условия отбора. В условие отбора поля НАШ_ТОБ вместо конкретных значений введем название параметра (рис. 4.32), по которому будет запрашиваться наименование товара при выполнении запроса. Название параметра вводится как текст, заключенный в квадратные скобки: [Наименование товара]
Если нужно получить данные по поставкам сразу двух товаров, введем второй параметр запроса: [Наименование второго товара]
Поле; HAWMJ1OK Имя табпицы: ПОКУПАТЕЛЬ Сортировка: Вывод на экран: Условие отбора;
СРОК ПОСТ ПОСТАВКА ПЛАН 0
В
или:
НАИМ ТОВ ТОВАР
кол_пост -*4; В
ПОСТАВКА
1 [Наименование товара]
[Наименование второго товара]
*...Д!
0 >У
JL
Рис. 4.32. Бланк запроса с параметрами для ввода значения в поле НАИМ_ТОВ
При выполнении запроса Access выведет диалоговые окна, представленные на рис. 4.33, в которые пользователь сможет ввести нужные значения параметров. Введите значение параметра
Введите значение параметра [?JfXj
Наименование товара
Наименование второго товара
!
Отмена
Рис. 4,33. Диалоговые окна для ввода параметров запроса
773
Глава 4. Запросы
Просмотрите запрос в режиме SQL. В предложении WHERE для этого запроса в качестве значений условий отбора использованы следующие параметры: WHERE (((ТОВАР. НАИМ_ТОВ} = [Наименование товара])) OR (((ТОВАР. ЯАИМ_ТОВ) = [Наименование второго товара]));
Групповые операции в многотабличном запросе Допустим, необходимо подсчитать общее количество товаров, отгруженных в указанный период. Создайте многотабличный запрос на выборку на основе таблиц ТОВАР, ОТГРУЗКИ, НАКЛАДНАЯ. В бланк запроса включите поля НАЙМИТОВ — наименование товара, КОЛ_ОТГР — количество отгруженного, ДАТА^ОТГР — дата отгрузки товара. Основой для образования записей этого запроса является таблица ОТГРУЗКА, а дополнительные данные выбираются из таблиц НАКЛАДНАЯ и ТЭВАР. Число строк в таблице запроса будет равно числу строк в таблице ОТГРУЗКА. Для группировки записей с одинаковым наименованием товара и подсчета общего количества товара в группе нажмите кнопку Групповые операции и в соответствующей строке в поле НАИМ_ТОВ оставьте значение группировка, а в поле кол_отгр выберите значение sum. В поле ДАТА_ОТГР выберите значение Условие И введите условие отбора: Between #01.02.2004* And #20.02.2004* (ANSI-89) ИЛИ Between '01.02.2004' And '20.02.2004' (ANSI-92). В рб-
зультате схема данных и бланк запроса должны принять вид, показанный па рис. 4.34. Результат выполнения запроса приведен на рис. 4.35. Просмотрите запрос в режиме SQL. Инструкция SELECT для этого запроса имеет следующий вид: SELECT ТОВАР.НАИМ_ТОВ,
Sum(ОТГРУЗКА.КОЛ_ОТГР) AS
[Зшп-КОЛ_ОТГР]
FROM НАКЛАДНАЯ INNER JOIN (ТОВАР INNER JOIN ОТГРУЗКА ON ТОВАР.КОД_ТОВ = ОТГРУЗКА.КОД_ТОВ) ON (НАКЛАДНАЯ.КОД_СК = ОТГРУЗКА.КОД_СК) AND (НАКЛАДНАЯ. НОМ^НАКЛ = ОТГРУЗКА. HOMJIAKTI)
WHERE (((НАКЛАДНАЯ.ДАТА_ОТГР) Between #2/1/20С4# And # 2 / 2 0 / 2 0 0 4 * ) ) GROUP BY ТОВАР.HAHMJTOB ORDER BY Sum (ОТГРУЗКА.КОЛ_ОТГР)
DESC;
В предложении SELECT перечислены поля, которые должны быть включены в таблицу запроса. В предложении FROM указывается, что таблицы ТОВАР и ОТГРУЗКА объединяются первым способом по полю код_тов, и далее таблица НАКЛАДНАЯ также первым способом объединяется с таблицей, полученной в результате объединения таблиц ТОВАР и ОТГРУЗКА, по полям код ск и ном НАКЛ.
Часть I. Основы технологии Microsoft Access
174
ЗапросЮ : запрос на выборку
нон_ндкл код_ск КОД_ТОВ КОЛ ОТГР
Поле; НАИН ТОВ Имя таблицы: ТОВАР Групповая операция: Группиров Сортировка: Вывод на экран; Условие отбора:
V
КОЛ ОТГР ОТГРУЗКА
.
ДДТА.ОТГР НАКЛАДНАЯ Условие
по убыванию
' Between #01.02,2004* And #20,02.2QCrt#
Рис. 4.34. Многотабличный запрос с групповой операцией
В
№ -, иг ''-. [DJ[XJ
Наименование товара | Зит-КО.П_ОТГР | CD-ROM Panasonic IDE HDD Maxtor 2QGB FDD 3.5 Запись; 11 I 1 I I 3
из 3
Рис. 4.35. Таблица запроса с подсчетом количества товара, отгруженного за указанный период В предложении WHERE сформулировано условие отбора тех записей, в которых значения поля НАКЛАДНАЯ. ДАТЙ_СТГР лежат в пределах заданных дат. Предложение GROUP BY указывает, что необходимо выделить группы записей с одинаковыми значениями в поле НАИМ_ТОВ и представить группу в таблице запроса одной записью. Результат выполнения функции Sum (ОТГРУЗКА. КОЛ_ОТГР) для каждой из групп представлен вычисляемым полем, которому присваивается имя ЗШП-КОЛ_ОТГР. >•> Предложение ORDER BY указывает, по каким полям должна быть выполнена сортировка записей в таблице запроса. При отсутствии сортировки этого предложения нет в инструкции. Данная инструкция указывает на сортировку ПО убыванию (ПЕЗО) ПО ПОЛЮ Зит(ОТГРУЗКА.КОЛ_ОТГР). Запрос с группировкой и вычислениями по статистическим функциям может быть подготовлен мастером. Пример многотабличного запроса с труп-
Глава 4. Запросы
175
пировкой по наименованию товара и месяцу отгрузки приведен далее в подразд. "Простой запрос"разд. "Мастера создания запросов".
Ссылки на имена полей различных таблиц в условии отбора В условии отбора в качестве операндов могут использоваться не только конкретные значения для отбора по полям. Создадим запрос, в условии отбора которого сравниваются значения из разных полей. Допустим, необходимо выбрать записи из таблицы ОТГРУЗКА, в которых стоимость товара не соответствует произведению количества отгруженного на цену, указанную для этого товара в таблице ТОВАР, и рассчитать величину отклонения. Для решения этой задачи создадим запрос, представленный на рис. 4.36.
t- Запрос 1C : запрос на выборку
НОМ.НАКЛ
код_ск код_тов
^
s
КОЛ_ОТГР СУММА ОТГГЧ
Поле: НАИМ ТОВ Имя таблицы: ТОВАР Сортировка; Вывод на экран: 0 Условие отбора:
СУММА_ОТГР ОТГРУЗКА В < >[КОЛ_ОТГР]*[ЦЕНА]
[СУММА ОТГР]-[КОЛ ОТГР]*[ЦЕНА] .""•
1 •Уз
<:. ч)
>'""
Рис. 4.36. Запрос с использованием в условиях отбора имен полей из разных таблиц Для отбора записей с неверно указанной суммой отгрузки в строке Условие отбора (Criteria) для поля СУММА_ОТГР записано выражение; <>[КОЛ_ОТГР]*[ЦЕНА]
Указание имен таблиц в ссылках на поля является не обязательным, потому что поля имеют уникальные имена. В противном случае при ссылке на поде перед его именем необходимо указывать имя таблицы, например: [ТОВАР]![ЦЕНА].
176
Часть I. Основы технологии Microsoft Access
Для расчета величины, на которую отличается значение суммы в таблице от правильного, создано вычисляемое поле, в котором записано выражение: [СУММА_(ЛТР] - [КСШ_ОТГР] * [ЦЕНА]
Заменим сформированное по умолчанию имя вычисляемого поля Выражение! на Отклонение. Результаты выполнения запроса приведены на рис. 4.37. ЗапросЮ : запрос на выборку Код наклэдной|Ко^ НООЗ СОЗ Н004 С02 Н004 С01
; Монитор 17LG HDD Maxtor20GB СканерАсег
3174,00р. 3590,00р. 33 380,00р.
-10000,00?. ТоООДОр. 10 000,00р.
I и !*Миэ ч
Ы
Рис. 4.37. Записи об отгрузке товаров с неверно указанной суммой
Замечание Если результат выполнения запроса не содержит записей, то это означает, что все суммы подсчитаны правильно, т. е. равны произведению количества на цену товара.
Просмотрите запрос в режиме SQL. Инструкция SELECT для этого запроса имеет вид: SELECT ОТГРУЗКА.НОМ_НАКЛ, ОТГРУЗКА.КСД_СК, ТОВАР.НАИМ_ТОВ, ОТГРУЗКА.СУММА__ОТГР, [СУММА_СТГР]-[КОЛ_ОТГР]*[ЦЕНА] A3 Отклонение FROM T05AP INNER JOIN ОТГРУЗКА ON ТОВАР. КОД__ТОВ = ОТГРУЗКА. КОД_ТОВ WHERE ( { {ОТГРУЗКА. СУММА_ОТГР) О [КОЛ__ОТГР] * [ЦЕНА] ) ) ;
В предложении SELECT наряду с полями таблиц, включаемыми в таблицу запроса, представлено вычисляемое поле, которому присвоено имя Отклонение.
Решение задач на основе нескольких запросов Реализовать алгоритм и сформировать результат на основе входных данных из таблиц базы и параметров задачи одним запросом при решении сложной задачи невозможно. Для решения сложных задач они должны быть разбиты на несколько более простых подзадач, алгоритм каждой из которых может быть реализован выполнением одного запроса. Последовательное выполне-
Глава 4. Запросы
177
ние нескольких запросов приводит к решению поставленной задачи. Каждый из запросов имеет свои входные и выходные данные. Чтобы описать алгоритм задачи, реализуемый одним запросом, обычно достаточно словесного описания действий, Для представления алгоритмов решения сложных задач целесообразно использовать функционально-технологическую схему, на которой указываются входные и выходные данные каждого из запросов. В простейшем случае выходные данные предшествующего запроса являются входными для следующего построенного на нем запроса и, при выполнении только последнего запроса в цепочке построенных друг на друге запросов вы инициируете последовательное выполнение всех запросов цепочки и полное решение задачи. Функционально-технологическая схема задачи, решаемой с помощью двух последовательно выполняемых запросов, в общем виде приведена на рис. 4.38. Входные данные Таблицы базы данных, используемые в запросе 1
Выходные данные
Имя и описание запроса 1
Ввод параметров запроса Таблицы базы данных, используемые в запросе 2
Таблица с результатами запроса 1
Имя и описание запроса 2
Результаты запроса 1
Таблица с результатами решения задачи
Рис. 4.38. Функционально-технологическая схема задачи, состоящей из двух последовательно выполняемых запросов
Пример решения задачи последовательно выполняющимися запросами Допустим, необходимо произвести анализ выполнения договоров на постав ку товаров на конец заданного месяца. При решении этой задачи должно быть подсчитано количество товара, запланированного к поставке, отгру женного покупателям в соответствии с договорами, и получена величин» недопоставки товаров.
Часть I. Основы технологии Microsoft Access
178
Данные о плановых поставках хранятся в таблице HOCTABKAJTJIAH. На ее основе создадим запрос для подсчета суммарного количества товаров, запланированных к поставке на конец заданного месяца (рис. 4.39).
.
:
СРОК пост
Konjiocr
*~
ПОСТАВКА_ППАМ Условие
ПОСТАВКА ПЛАН d Sum
f — lfwTlK7"i [«. |[П|[Х|
& План : запрос на выборку
А
.•-
НОМ.ДОГ
*sl
кортов СРОК_ПОСТ | MUIHJIOCT КОЛ^ПОСТ У!< <
У
Поле: код тов Имя таблицы: ПОСТАВКИ ПЛАН Групповая операция: Группировка Сортировка; Вывод на экран: 0 Условие отбора: или:
D
0
<ЦНомер месяца]
<и
>
V
Рис. 4.39. Подсчет суммарного количества товаров, запланированных к поставке
В запросе План производится группировка записей таблицы по полю код_тов. Для операции используются только записи, в которых срок поставки (месяц) имеет значение, меньшее или равное заданному параметром запроса с именем номер месяца. В каждой группе записей об одном товаре суммируется количество, запланированное к поставке. Данные о фактически поставленных, отгруженных покупателям товаров хранятся в таблице ОТГРУЗКА. На ее основе может быть выполнен подсчет суммарного количества фактически поставленных товаров. Для отбора поставок, выполненных до конца заданного месяца, добавим в запрос таблицу НАКЛАДНАЯ, в которой хранится дата отгрузки товаров (рис. 4.40). Таблицы, на которых построен запрос Факт, находятся в отношении одинко-многим, для их связи по составному ключу установлены параметры обеспечения целостности. В результате объединения этих таблиц формируется таблица запроса с числом записей, равным числу записей в подчиненной таблице ОТГРУЗКА, но теперь записи об отгрузках .товара по одной накладной дополняются датой из главной таблицы НАКЛАДНАЯ. Для отбора только тех накладных, по которым отгружался товар до конца заданного месяца, из даты отгрузки с помощью функции Month выделяется
Глава 4. Запросы
номер месяца, и для этого вычисляемого поля в условие отбора вводится параметр запроса с именем, совпадающим с именем параметра в предыдущем запросе Номер месяца.
акт : запрос на выборку
НОМ_НАКЛ
ко/цех
ДАТА_ОТГР НОМ_ДОГ
Попе: КОДТОВ Имя таблицы; ОТГРУЗКА Групповая операция; Группировка Сортировка: Вывод на экран: .Условие отбора:
МопГК[ДДТД_ОТП
кол ОТГР ОТГРУЗКА
• .
Условие
:: <=[Номер месяца]
или;
Рис. 4.40. Подсчет суммарного количества отгруженных товаров
Сравнение количества запланированных к поставке и отгруженных товаров логично произвести в запросе, основанном на двух предыдущих. Однако необходимость учесть, что по некоторым договорам товар мог не отгружаться и в то же время отгружаться покупателям, которые не заключали договоров, требует добавления в запрос таблицы ТОВАР, в которой представлена вся номенклатура товаров фирмы. Последнее обстоятельство позволит установить в запросе такие параметры объединения таблиц, которые приведут к формированию в таблице запроса записей не только о товарах, по которым был определен план и факт поставки, но и о запланированных к поставке, но не отгружаемых; отгружаемых, но не планируемых, вообще не планируемых и не отгружаемых товарах (рис. 4.41). В запросе для связей установлен второй способ объединения записей, поэтому в таблицу запроса будут включены и те записи из таблицы ТОВАР, для которых нет связанных записей в таблицах план и Факт. Учитывая, что во всех пустых полях таблицы запроса определено значение Null, для получения разности между запланированным и фактически поставленным количеством товара создадим вычисляемое поле с выражением Nz ( [Зит-КОЛ_ПОСТ] ) -Nz { [5ит-КОЛ_ОТГР] ) . ПрИСВОИМ ВЫЧИСЛЯСМОМу ПОЛЮ
имя "Отклонение". 7 Зак 835
Часть I. Основы технологии Microsoft Access
180
0 Анализ выполнения плана : запрос на выборку
Поле: НАИМ Инд таблицы: ТОВАР Сортировка; Вывод на экран: Условие отбора:
Sum-КОЛ План
Sum-КОЛ Факт
Отклонение; NZ([5utn-KQn_nOCT])-NZ([5um-KOn^OTrP])'
в
или:
Рис, 4.41. Вычисление разности плановых и фактических поставок товаров
Функция NZ (выражение,- [значение_если_ыи!1]) возвращает значение, указанное первым аргументом, или для поля со значением Null новое значение, указанное вторым аргументом. Если второй аргумент не указан, по умолчанию для числового поля со значением Null возвращается значение о, для символьного — пустая строка "". Результатом арифметических операций с полем N u l l является Null. Убедитесь в этом, исключив из выражения функцию NZ. В таблице запроса Анализ выполнения плана (рис. 4.42) представлен весь список товаров фирмы. Показано, что не все товары были заказаны в договорах, только по ряду из них выполнялась отгрузка товаров, а некоторые товары отгружались без предварительного оформления договоров. Внимание Выполнение запроса Анализ выполнения плана инициирует выполнение запросов План и Факт, поэтому нет необходимости в их предварительном выполнении.
Записав в условие отбора поля зшп-кол_пост значение Not Null, можно отобрать только строки, относящиеся к товарам, на которые были заключены договоры. Для того чтобы явно увидеть, в какой последовательности производится объединение таблиц запроса, просмотрите запрос в режиме SQL.
Глава 4. Запросы
Инструкция SELECT для этого запроса имеет вид: SELECT ТОВАР.НАИМ_ТОВ, План. [Зит-КОЛ_ПОСТ] , Факт. [5игг,~КОЛ_ОТГР] , Нг([5ит-КОЛ_ПОСТ])-Ы2([ЗШ1-КОЛ_ОТГР]) AS Отклонение FROM (ТОВАР LEFT JOIN План ON ТОВАР.КОД_ТОВ = План.КОД_ТОВ) LEFT JOIN Факт ON ТОВАР.КОД ТОВ = Факт.КОД ТОВ;
•19 ll
йР Анализ выполнения плане : запрос на выборку Наименование товара Sum-КОЛ ПОСТ |Surn-KO; Монитор 17LG 262 FDD 3,5 60 HDD Maxtor 2QGB 10 Корпус MiniTower 30 CD-ROM Panasonic IDE 40 DIMM64MPC100 — Принтер EPSON ST.A4 СкэнерАсег Зв. Карта Genius Liv Г Модем Genius ext За писы _Hj < | | 10 -^ j И I 1 J из 10
14 12
эш ние 243 60 -2
30 Б
30 10 " /" -Ь
i 1 3'
0 : -3
о]
Рис. 4.42. Результат вычисления разности плановых и фактических поставок товаров
В предложении FROM указано, что сначала будет производиться левое внешнее объединение таблиц ТОВАР и план по полю связи код_тов (ТОВАР LEFT JOIN план ON ТОВАР.код_тов = План. код_тсв). Затем будет выполнено левое внешнее объединение таблицы, полученной в результате первого объединения, и таблицы Факт по тому же полю связи. Объединение таблиц в рассматриваемом запросе дает правильный результат только потому, что в каждой из объединяемых таблиц код_тоз является ключом. В таблице ТОВАР ключ определен изначально. В таблицах запросов план и Факт поле код_тов также имеет уникальные значения, т. к. они получены в результате группировки по этому полю. Попробуем подсчитать суммарное количество плановых и фактических поставок товаров одним запросом, представленным на рис. 4.43. Проанализируйте результат выполнения запроса и убедитесь, что он неправильный. Неверный результат получается вследствие того, что объединяются записи таблиц, находящихся в отношениях многие-ко-многим.
Часть I. Основы технологии Microsoft Access
182
is1 Запрос!5 : запрос на выборку
ном л от код_тов
!
CPOKJTOCT MMHJ10CT "
кол пост >ч код_тов НАИМ_ТОБ ЦЕНА
ЕЙ
ЯГРУЭК* НОМ_НАКЛ
код_ск код_тов
КОП_ОТГР
Поле: КОДТОВ Иия таблицы: ТОВАР Групповая операция; Группировка Сортировка: Вывод на экран: Условие отбора; ипи:
НАИМ ТО! ТОВАР Группировка
кол пост
КОЛ
ПОСТАВКА ПЛАН
ОТГРУЗКА
• :
:". Г
Рис. 4.43. Запрос, связи в схеме данных которого приводят к неверным результатам
ЗАДАНИЕ 2. Запросы
1. Проанализируйте план поставок товара заданному покупателю. 2. Проанализируйте план поставок товара в стоимостном выражении. 3. Подсчитайте, на какую сумму отгружен товар покупателям, которые не заключали договоров. 4. Подсчитайте, на какую сумму покупатели недополучили товар на текущую дату. Контрольные вопросы по запросам на выборку
1. Какая команда меню позволяет добавить необходимые таблицы в запрос? 2. Как в запросе отобразить нужные поля таблицы? 3. Можно ли разместить поле в бланке запроса, дважды щелкнув на нем в списке полей таблицы? 4. Можно ли заменить поле в бланке запроса выбором его из раскрывающегося списка?
Глава -4. Запросы
Т83
5. Какая логическая операция применяется к условиям отбора, записанным для различных полей в одной строке? 6. Какие операторы сравнения и логические операторы могут быть использованы при записи условия отбора? 7. Как выполнить запрос, не открывая его в режиме конструктора? 8. Можно ли использовать в выражении условия отбора имя поля? 9. Для каких значений выполняются операции в выражении вычисляемого поля? 10. Где хранятся значения вычисляемого поля? 11. Где задается имя вычисляемого поля? 12. Из каких записей образуется группа при использовании групповой операции? 13. Какие поля выбираются для группировки записей? 14. Можно ли задать условия отбора записей, включаемых в группы? 15. Какое значение должно быть выбрано в строке Групповые операции (Total) для поля, по которому задается условие отбора? 16. В каком столбце бланка запроса записывается условие отбора нужных групп? 17. Как просмотреть для запроса, созданного в режиме конструктора, эквивалентную инструкцию SQL? 18. Какая инструкция SQL соответствует запросу на выборку? 19. Изменяет ли инструкция SELECT данные в базе? 20. В каком предложении инструкции SQL указываются таблицы, на которых создается запрос? 21. В каком предложении инструкции SQL задаются условия отбора записей? 22. Можно ли для полей, выбираемых в инструкции SQL для вывода, применять функции? 23. В каком предложении инструкции SQL задаются поля, по которым должна быть выполнена группировка записей запроса? 24. Каким знаком разделяются имена полей в списках инструкции SQL? 25. Можно ли использовать символ звездочки (*) для отбора всех полей таблицы? Ответы 1. Запрос|Добавить Ta6flHuy(Query]Show Table) на панели конструктора запросов. 2. Разместив их в столбцах бланка запроса.
184
Часть I. Основы технологии Microsoft Access
3. Да. 4. Да. 5. АЫО (И). 6. =, <, >, <>, <=, > = , Between, In, Like, And, Or, Not.
7. Выделив запрос в окне базы данных и нажав кнопку Открыть (Open). 8. Да, заключив его в квадратные скобки. 9. Для значений полей одной записи. 10. Только в записях таблицы запроса. 11. В его свойстве Подпись поля (Caption) или непосредственно перед выражением вычисляемого поля. 12. Из записей с одинаковыми значениями в полях группировки. 13. Поля, имеющие повторяющиеся значения.
14. Да. 15. Условие (Where). 16. В поле, по которому производится группировка или для которого выполняется функция. 17. Выбрав для запроса из списка кнопки Вид (View) режим SQL. 18. SELECT.
19. Нет. 20. FROM. 21. WHERE.
22. Да. 23. Group By.
24. Запятой. 25. Да. Контрольные вопросы по многотабличным запросам
1. Какой способ объединения записей по умолчанию устанавливается для связи таблиц? 2. Мешает ли параметр Обеспечение целостности данных установлению параметра объединения? 3. В каком окне какой кнопкой открывается возможность выбора параметра объединения?
Глава 4. Запросы
185
4. Запрос построен на двух таблицах, находящихся в отношениях 1:М, для которых установлен параметр обеспечения целостности. Первая таблица имеет пять записей, а вторая 10. Причем 10 записей второй таблицы подчинены трем записям первой. Сколько записей будет включено в таблицу запроса, если для исходных таблиц выбран первый способ объединения записей, и сколько, если второй? 5. Изменится ли параметр объединения таблиц, установленный в запросе, если изменить его в схеме данных базы? 6. Какая команда позволяет отобразить в бланке запроса строку с именами таблиц? 7. Какие поля представлены в списке, открывающемся в строке Поле бланка запроса? 8. Сколько записей будет содержать таблица запроса, если она построена на двух несвязанных таблицах по 5 записей? 9. Какая операция будет применена к записям объединяемых в запросе таблиц, если между ними не установлена связь? 10. Как вводится параметр в запрос? 11. Как указать на использование конкретного поля, если в таблицах, на которых строится запрос, имеются одинаковые имена? 12. Допускается ли группировка записей запроса по нескольким полям? 13. Нужно ли последовательно выполнять запрос!, запрос2, запросЗ, если запросЗ построен на запросе2, а запрос2 на запросе!? 14. В каком предложении и какой операцией задается способ объединения записей таблиц в инструкции SQL? 15. После какого ключевого слова в предложении FROM указываются поля связи таблиц? 16. Как в предложении FROM указывается вложенность операций объединения таблиц? 17. Можно ли в предложении FROM инструкции SELECT в качестве значения условия отбора использовать параметр? 18. Каким предложением определяется необходимость в сортировке? Ответы
1. Первый, при котором объединяются только те записи, в которых связанные поля обеих таблиц совпадают.
2. Нет. 3. В окне Изменение связей кнопкой Объединение. 4. 10 и 12 соответственно.
Часть I. Основы технологии Microsoft Access
fgg
5. Нет. 6. Команда Вид|Имена таблиц (View|Table Names). 7. Поля всех таблиц запроса. 8. 25.
9. "Полное объединение" или "Декартово произведение". 10. Как текстовая строка, заключенная в квадратные скобки. 11. Перед именем поля поставить имя таблицы. 12. Да.
13. Нет, Чтобы получить результат, достаточно выполнить запросЗ. 14. В предложении FROM операциями INNER JOIN, LEFT JOIN и RIGHT JOIN.
15. ом. 16. С помощью круглых скобок.
17. Да. 18.
ORDER BY.
Создание новой таблицы с помощью запроса Запрос на создание таблицы используется для сохранения результата запроса. Этот вид запроса основан на запросе на выборку, но, в отличие от него, сохраняет таблицу с результатами запроса. Необходимость в сохранении результатов запроса возникает, например, когда невозможно построить запрос непосредственно на другом запросе. К этому случаю относится, в частности, построение запроса на обновление полей на основе запроса с операцией группировки. Сформируем запрос на создание таблицы на примере ранее полученного запроса на выборку с групповыми вычислениями Число отгрузок по договорам (см. рис. 4.20, 4.21). В окне базы данных вызовем названный запрос в режиме конструктора запросов. Преобразуем этот запрос в запрос на создание таблицы, выбрав нужное значение из списка Тип запроса (Query Type) на панели конструктора Создание таблицы (Make-Table Query) или выполнив команду меню Запрос|Создание таблицы (Query|Make Table). В окне Создание таблицы (Make Table) введем имя создаваемой таблицы "Число отгрузок" (рис. 4.44). Для того чтобы просмотреть, какие записи будут помещены в новую таблицу, щелкните по кнопке панели инструментов Вид (View). Выполните за-
Глава 4. Запросы
187
прос, чтобы таблица число отгрузок была сохранена в базе данных. Теперь эту таблицу можно увидеть в списке таблиц окна базы данных. Создание таблицы Создание таблицы • цмя таблицы: |Число отгрузок <• в текущей базе данных Г в другой базе данных:
Рис. 4.44. Определение имени таблицы, создаваемой в запросе
Перейдите в режим SQL. Эквивалентная запросу на создание таблицы инструкция SELECT INTO будет записана следующим образом SELECT НАКЛАДНАЯ.НОМ_ДОГ, Count[НАКЛАДНАЯ.НОМ_ДОГ) AS [СоипЪ-НОМ_ДОГ] INTO [Число отгрузок] FROM НАКЛАДНАЯ GROUP BY НАКЛАДНАЯ.НОМ_ДОГ;
Инструкция SELECT INTO аналогично SELECT выполняет выборку данных, но, в отличие от нее, для сохранения выбранных данных создает новую таблицу, имя которой указывается в предложении INTO. Новая таблица включает перечисленные в SELECT поля из таблиц, указанных в предложении FROM. Допустимо использование предложения GROUP BY, определяющего поле группировки. При этом список полей новой таблицы включает поле, вычисляемое с помощью одной из статистических функций (в примере count). Если перед предложением GROUP BY поместить предложение WHERE, группы будут формироваться из записей, отобранных после применения предложения WHERE.
Корректировка данных средствамизапроса Запрос на обновление Для обновления данных в полях базовых таблиц может быть использоиан запрос на обновление (Update Query). Изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения
Часть I. Основы технологии Microsoft Access
188
для изменений в полях определяются в бланке запроса в строке Обновление (Update To). Для того чтобы создать запрос на обновление (Update Query), первоначально создается запрос на выборку (Select Query), а затем в окне конструктора запросов он преобразуется в запрос на обновление выбором Обновление (Update Query) из списка Тип запроса (Query Type) (см. рис. 4.2) или командой меню Запрос|Обновление (Query Update). После выполнения этой команды в бланке запроса появляется строка Обновление (Update To). Пример запроса на обновление приведен на рис. 4.45.
Обновляемое поле
Поле для условия отбора
—4 1Н 1А Поле: СУММА бТГР R5 д тов Имя таблицы: ОТГРУЗКА ТОВАР Обновление; [ЦЕНА]*[КОЛ_ОТГР] Условие отбора: [Введите код товара] или:
У.
Выражение определяет новое значение поля СУММА ОТГР
Параметр запроса определяет условие отбора обновляемых записей
Рис. 4.45. Пример запроса на обновление
В бланк запроса включаются тюля, требующие обновления, а также поля, по которым задаются условия отбора обновляемых записей. Для обновляемого поля в строку Обновление (Update To) вводится значение или выражение, определяющее новое значение поля. Выражение можно создать с помощью построителя выражений.
Замечание
i
Новые значения, присваиваемые полям таблицы, должны быть совместимы с их свойствами, наложенными на их значения ограничениями, и не должны при-
Глава 4. Запросы
189
водить к нарушению целостности данных. В противном случае запрос выполняться не будет.
После выполнения команды Запрос]Запуск (Query Run) или нажатия соответствующей кнопки панели инструментов открывается диалоговое окно с сообщением о числе обновляемых записей и вопросом о продолжении операции обновления. Переключившись после выполнения запроса в режим таблицы, можно просмотреть содержимое только обновленных полей. Переключение выполняется командой Вид|Режим таблицы (View)Datasheet View) или нажатием кнопки Вид (View) панели инструментов. Если переключиться в режим таблицы до выполнения запроса, можно просмотреть старое содержимое обновляемых полей. Внимание При использовании в запросе на обновление таблиц, находящихся в отношении 1:М, обновлять можно только содержимое столбцов таблицы со стороны "многие".
Перейдите в режим SQL. Эквивалентная запросу на обновление инструкция UPDATE будет записана следующим образом: UPDATE ТОВАР INNER JOIN ОТГРУЗКА ON ТОВАР.КОД_ТОВ = ОТГРУЗКА.КОД_ТОВ SET ОТГРУЗКА.СУММА_ОТГР - [ЦЕНА] МКОЛ_ОТГР] WHERE (((ТОВАР.КОД_ТОВ)=[Введите код т о в а р а ] ) ) ;
Имена таблиц, используемых в запросе, и способ их объединения задаются непосредственно за именем инструкции UPDATE. Инструкция UPDATE обновляет указанное в предложении SET поле ОТГРУЗКА,СУКМА_ОТГЕ, присваивая значение, заданное выражением [ЦЕНА]*[кол_отгр]. Обновление происходит во всех записях, которые удовлетворяют условию отбора, заданному в предложении WHERE.
Пример обновления полей значениями, рассчитанными в запросе с группировкой Допустим, необходимо рассчитать общую стоимость товара, отгруженного по накладной, и сохранить ее в соответствующем поле таблицы НАКЛАДНАЯ. Рассмотренный выше запрос Расчет стоимости (см. рис. 4.45) позволяет автоматизировать расчет стоимости товара, указанного в каждой строке спецификации накладной — записи таблицы ОТГРУЗКА. Для этого достаточно убрать в нем параметр условия отбора.
190
Часть I. Основы технологии Microsoft Access
Далее на основе таблицы ОТГРУЗКА можно создать запрос, который подсчитает общую стоимость товара, отгруженного по каждой накладной (рис. 4.46). 0 Расчет стоимости накладной : запрос на создание таблицы L jiCifx] •Л*
* НОМ_НАКП
код_ск
KOAJOB КОЛ_ОТГР СУММА_ОТГР
Mi ->,
< Попе: НОМ_НАКЛ Имя таблицы; ОТГРУЗКА Групповая операция; Группировка Сортировка; Вывод на экран; 0 Условие отбора; или:
КОД_СК ОТГРУЗКА Группировка 0
СУММА ОТГР ОТГРУЗКА Sum
*"* Ж
0 V
Рис. 4.46. Расчет стоимости всего товара, отгруженного по накладной, и сохранение в новой таблице
В запросе записи группируются по двум полям, определяющим составной ключ накладной: номер накладной (НОМ_НАКЛ) и код склада (код_ск). Таким образом, в группу будут включены все записи об отгрузках товаров по одной накладной. С помощью статистической функции sum для группы будет подсчитана стоимость всех товаров, отгруженных по накладной.
Замечание
;
Если в таблице ОТГРУЗКА не хранится значение стоимости товара, общая стоимость товаров одной накладной может быть рассчитана в вычисляемом поле по формуле [ЦЕНА] * [КОЛ_ОТГР] , и для этого поля может быть использована статистическая функция sum. Запрос в этом случае строится на двух
таблицах ОТГРУЗКА и ТОВАР. Теперь значения стоимости накладных, рассчитанные в предыдущем запросе на выборку с использованием статистической функции sum, нужно сохранить в соответствующем поле таблицы НАКЛАДНАЯ. Однако запрос на обновление непосредственно на таком запросе построить нельзя. Поэтому преобразуем запрос на выборку Расчет стоимости накладной в запрос на создание таблицы. Создаваемой в запросе таблице дадим имя "Стоимость
Глава 4. Запросы
91
накладной". В дальнейшем будем использовать для обновления не сам запрос» а эту таблицу. Запрос на обновление на основе обновляемой таблицы базы данных НАКЛАДНАЯ и новой таблицы стоимость накладной, содержащей данные для обновления, приведен на рис. 4.47. В схеме данных запроса связь таблиц установлена по полям, однозначно идентифицирующим накладную: ном_ндк и код_ск. В бланке запроса представлено единственное обновляемое в таблице НАКЛАДНАЯ поле СУММА_НАК, в сроке Обновление (Update To) которого введено имя поля зит-суммд_ртгр из таблицы Стоимость накладной, определяющее новое значение.
is1 Обновление стоимости наиладной : запрос на обновление
НОМ_НАКЛ КОД_СК 5игп-СУММА ОТГР
СУММА НДКЛ НАКЛАДНАЯ [5ит-СУММД_ОТГР] •-
Рис. 4.47. Обновление поля с общей стоимостью товара по накладной
Таким образом, для решения задачи вычисления общей стоимости накладной необходимо последовательно выполнить сначала запрос на создание таблицы Расчет стоимости накладной, а затем запрос на обновление Обновление стоимости накладной. Если в таблице ОТГРУЗКА не была рассчитана стоимость каждого товара, отгружаемого покупателю, предварительно должен быть выполнен запрос Расчет стоимости (см. рис. 4.45).
Запрос на добавление С помощью запроса на добавление (Append Query) производится добавление записей из одной или нескольких таблиц в таблицу базы данных. При использовании нескольких таблиц их записи объединяются в создаваемом
I
Часть I. Основы технологии Microsoft Access
конструктором запросе на выборку в соответствии с указанным способом объединения. Структура записи таблицы, из которой добавляются записи, может не полностью совпадать со структурой записи дополняемой таблицы. В добавляемых записях может быть меньше полей, если на поля в таблице, куда добавляются записи, не наложено требование по обязательности их заполнения. Допускается несоответствие типов полей, если возможно преобразование типа данных одного поля в тип данных другого поля. Добавляемые записи обязательно должны включать значения ключевых полей. В бланк запроса могут быть включены поля для задания условий отбора. В качестве значений полей добавляемых записей может быть использовано вычисляемое выражение. Первоначально запрос на добавление (Append Query) создается как запрос на выборку (Select Query) на одной или нескольких взаимосвязанных таблицах. Затем в окне конструктора запросов он превращается в запрос на добавление выбором типа запроса Добавление (Append Query) на панели инструментов или команды меню Запрос] '! Добавление... Добавление (Query|Append Query). При этом открывается диалоговое окно Добавление (Append) (рис. 4.48). Добавление Добавление записей е таблиц/ имя таблицы:
^НАКЛАДНАЯ
ОК V
{* в текущей базе данных
Отмена
f в другой базе данных:
Рис. 4.48. Окно для ввода имени таблицы, в которую добавляются записи
В этом окне в поле имя таблицы (Table Name) вводится или выбирается имя таблицы, в которую надо добавить записи. Если таблица — получатель добавляемых записей — находится в открытой базе данных, надо отметить пункт в текущей базе данных (Current Database). Для таблицы, находящейся в другой базе данных, надо выбрать пункт в другой базе данных (Another Database) и ввести имя файла базы данных. К другой базе данных при необходимости нужно указать путь. Помимо базы данных Access можно указать базу данных Microsoft FoxPro, Paradox, dBASE или ввести строку подключения для базы данных SQL (см. долее).
Глава 4. Запросы
После преобразования запроса в запрос на добавление в его бланке появляется строка Добавление (Append To) (см. рис. 4.49).
Добавление данных в связанные таблицы Пусть на одном из складов фирмы имеется своя база данных, в которой ведется учет накладных. Данные накладных так же, как и данные в централизованной базе фирмы "Поставка товаров", сохраняются в двух таблицах. Допустим, они имеют имена "Накладные склада" и "Отгрузка склада" и такие же ключевые поля, как и аналогичные таблицы централизованной базы. В конце каждого дня в централизованной базе данных выполняется команда импортирования этих таблиц с данными об отгруженных со склада товарад. Далее с помощью запросов на добавление накладные, оформленные на складе, включаются в централизованную базу данных. Первым должен выполняться запрос на добавление записей в главную таблицу НАКЛАДНАЯ (рис. 4.49). Только после этого могут быть добавлены связанные записи в подчиненную таблицу ОТГРУЗКА. Это обусловлено тем, что в схеме данных БД для связи таблиц НАКЛАДНАЯ и ОТГРУЗКА установлен параметр Обеспечение целостности данных (Enforce Referential Integrity), делающий возможным добавление подчиненных записей только в том случае, когда в главной таблице уже имеется связанная запись. в1 Добавление накладных : запрос на добавление -Запрос или таблица с добавляемыми записями НОН_НАКЛ
код_ск ДАТА Н_ДОГ СУММА
Поля из таблиц с добавляемыми записями _,
Поле: НОМ НА <Л Имя таблицы: Накладные ск. Сортировка: Добавление : НОМ НАКЛ Условие отбора: или: < .
Накладные ск.
ДАТА Накладные ск
HJOP -1 Накладные склада .
КОД СК
ДАТА ОТГР
ном лог
КОД СК
\
Поля таблицы, в которую добавляются записи
Рис. 4.49. Запрос на добавление записей
V
>. _
194
Часть I. Основы технологии Microsoft Access
В запросе из таблицы накладные склада в бланк запроса включены поля, на основе которых формируются записи, добавляемые в таблицу НАКЛАДНАЯ. Ключевые поля НОМ_НАКЛ и код_ск, а также поле связи н_дог обязательно включаются в бланк запроса. В строке Добавление (Append To) указаны имена полей таблицы НАКЛАДНАЯ, в которые будут добавляться значения из соответствующих полей таблицы накладные склада. Они могут быть выбраны из открывающегося в ячейке списка полей. Заметим, что, если выбранные поля имеют одни и те же имена в обеих таблицах, имена в строку Добавление (Append To) вносятся автоматически. Для предварительного просмотра записей, которые планируется добавить в таблицу, надо нажать кнопку Вид (View) на панели инструментов. Возврат в режим конструктора запросов производится по этой же кнопке, Для добавления записей надо выполнить запрос, 'нажав кнопку Запуск (Run) на панели инструментов. При этом откроется диалоговое окно с сообщением о числе добавляемых записей и вопросом о продолжении операции добавления. Те записи, добавление которых приведет к появлению совпадающих или пустых значений в ключевом поле, не будут добавлены. Записи не добавляются и в случае, если невозможно преобразование типа данных в добавляемых полях или не выполняются условия на значения. Замените в бланке запроса поле ДАТА на функцию Date о, а СУММА умножьте на 2 и убедитесь, что в запросе на добавление данные выражения будут вычислены и занесены в поля добавляемых записей. Перейдите в режим SQL. Эквивалентная запросу на добавление инструкция INSERT INTO до внесения указанных изменений: INSERT INTO НАКЛАДНАЯ (НОМ_НАКЛ, КОД__СК, ДАТА_ОТГР, Н_ДОГ, СУММА__НАКЛ) SELECT [Накладные склада].НОМ_НАКЛ, [Накладные склада].КОД_СК, [Накладные склада].ДАТА, [Накладные склада].Н_ДОГ, [Накладные склада].СУММА FROM [Накладные склада];
Инструкция INSERT INTO определяет поля таблицы НАКЛАДНАЯ, которые должны заполниться значениями из полей добавляемых записей. Поскольку в запросе в качестве источника добавляемых записей указана таблица Накладные склада, конструктор создал на ее основе запрос на выборку, который определяет поля добавляемых записей. Этот запрос представлен инструкцией SELECT. Список имен полей и порядок их перечисления для обеих таблиц должны совпадать.
Глава 4. Запросы
195
Инструкция INSERT INTO после внесения указанных изменений: INSERT
INTO НАКЛАДНАЯ
(НОМ_НАКЛ,
КОД_СК,
ДАТА_ОТГР,
Н_ДОГ,
СУММА_НАКЛ}
SELECT [Накладные склада].НОМ_НАКЛ, [Накладные склада].КОД_СК, Выражение2, [Накладные склада].Н_ДОГ, [СУММА]*2 AS Выражение!
Date()
AS
FROM [Накладные склада]; АнаЛОГИЧНЫМ ЗаПрОСОМ ДОбаВЛЯЮТСЯ ЗаПИСИ ИЗ таблицы Отгрузка склада В
таблицу ОТГРУЗКА. ЗАДАНИЕ 3. Добавление записей Создайте запрос на добавление записей из таблицы отгрузка склада в таблицу ОТГРУЗКА.
Добавление данных из нескольких таблиц Допустим, необходимо ввести накладную на отгрузку товара покупателю. Товары по накладным должны отгружаться один раз в месяц в полном соответствии с планом поставок. Это означает, что по каждому договору в месяц выписывается только одна накладная, а спецификация накладной должна полностью совпадать со спецификацией договора на заданный месяц. Заполнив в таблице НАКЛАДНАЯ новую запись номером накладной, номером склада, номером договора и датой отгрузки, можно приступить к добавлению связанных записей в таблицу ОТГРУЗКА. Как сформировать эти записи на основании записей, выбранных из таблицы ПОСТАВКА_ПЛАН, и добавить их в таблицу ОТГРУЗКА, показано в запросе, представленном на рис. 4.50. И* Запрос16 : запрос на добавление
[. [П||Х] п.
.ЯДВЭ |НОМ_НАКП
~~.
I
ШшМгпйШ 1
г— НОМ JOT
код_тсв CPOKJ1OCT
мин_пост коп_пост СУММА_ПОСТ
у
>
<
Поле ИНЯ таблицы Сортировка Добавление Условие отбора
НОМ НАК НАКПАДН
КОД СК НАКЛАД
КОД Т ПОСТА
КОП ПОСТ ПОСТАВКА
СУММА ПОСТ ПОСТАВКА П1
НОМ НАК
КОД СК
КОД Т
КОЛ ОТГР
СУММА ОТГР
СРОК ПОСТ ПОСТАВКА I
НОМ_ДОГ ГЮСТА8К,
Мог*Ы[ДДТД_01 .^
[Номер не сяца] [Номер догое [Номер месяца]
или
1 <|
Рис. 4.50. Запрос на добавление записей о поставках товаров по заданному договору в заданном месяце
>
196
Часть I. Основы технологии Microsoft Access
Запрос построен на основе таблиц НАКЛАДНАЯ и ПОСТАВКА_ПЛАН. Между ними установлена связь по полю ном_дог. Таблица НАКЛАДНАЯ добавлена в запрос для того, чтобы сформировать в добавляемых записях ключевое поле, включающее НОМ_НАКЛ, КОД_СК. В запрос включены поля НОМ_НАКЛ, код_ск, код_тов, кол_пост, СУММА_ПОСТ, которые составят запись, добавляемую в таблицу ОТГРУЗКА, а также поля СРОК_ПОСТ, ном_дог и вычисляемое поле Month(ДАТА_ОТГР) для задания условий отбора добавляемых записей. Параметры запроса позволяют ввести номер месяца и номер договора, по которым из таблицы ПОСТАВКА_ПЛАН будут выбраны все записи, которые нужно добавить в таблицу ОТГРУЗКА. В каждом месяце по договору выписывается только одна накладная, поэтому по номеру договора и номеру месяца из таблицы НАКЛАДНАЯ будет выбрана только одна запись — та, которая была добавлена в таблицу для ввода в базу данных новой накладной. При объединении записей таблиц запроса ключевые поля этой записи будут добавлены к записям, выбранным из таблицы ПОСТАВКА__ПЛАН. В результате эти записи приобретут составной ключ: НОМ__НАКЛ + код_ск + код_тов, — необходимый для их добавления в таблицу ОТГРУЗКА. Для предварительного просмотра записей, которые будут добавлены в таблицу, нажмите на панели инструментов кнопку Вид (View). Для добавления записей нажмите на панели инструментов кнопку Запуск (Run). Перейдите в режим SQL. Эквивалентная запросу на добавление инструкция INSERT INTO будет записана следующим образом: INSERT INTO ОТГРУЗКА
(НОМ_НАКЛ,
КОД_СК,
КОД_ТОВ,
КОЛ_ОТГР,
СУММА_ОТГР)
SELECT НАКЛАДНАЯ.НОМ_НАКЛ, НАКЛАДНАЯ.КОД_СК, ПОСТАВКА_ПЛАН.КОД_ТОВ, ПОСТАВКА_Ш1АН. КОЛ_ПОСТ, ПОСТАВКА_ГШАН. СУММА_ПОСТ FROM НАКЛАДНАЯ INNER JOIN ПОСТАВКА_ПЛАН ON НАКЛАДНАЯ.НОМ_ДОГ = ПОСТАВКА_Ш1АН. НОМ_ДОГ WHERE ( ( (ПОСТАВКА_ПЛАН.СРОК_ПОСг:) = [Номер месяца] -} AND ((ПОСТАВКА_ГШАН.НОМ_ДОГ)=[Номер договора]) AND ( (Month([ДАТА_ОТГР])) = [Номер м е с я ц а ] ) ) ;
Инструкция INSERT INTO определяет поля, составляющие добавляемые в таблицу ОТГРУЗКА записи. Структура и число добавляемых записей определяются числом записей, возвращаемых инструкцией выбора SELECT. Список имен полей и порядок их перечисления для таблицы ОТГРУЗКА, в которую добавляются записи, и для таблицы, определяемой инструкцией SELECT, должен совпадать.
Глава 4. Запросы
797
Запрос на удаление Запрос на удаление (Delete Query) позволяет удалить записи из одной таблицы или из нескольких взаимосвязанных таблиц, для которые установлен параметр обеспечения целостности данных Каскадное удаление связанных записей (Cascade Delete Related Records). Первоначально запрос на удаление (Delete Query) создается как запрос на выборку (Select Query). В схему данных включается таблица, из которой удаляются записи и связанные с ней таблицы, для полей которых требуется задать условия отбора. Затем запрос в режиме конструктора преобразуется в запрос на удаление (Delete Query) выбором типа запроса Удаление (Delete Query) на панели инструментов или команды меню Запрос|Удаление (Query|Delete Query). После преобразования запроса в запрос на удаление в его бланке появляется строка Удаление (Delete) (рис. 4.51). Затем формируется бланк запроса. Для задания таблицы, записи которой требуется удалить, необходимо с помощью мыши переместить символ звездочки (*) из списка полей соответствующей таблицы в бланк запроса. В строке Удаление (Delete) в столбце этого поля появляется значение из (From). Для того чтобы задать условия отбора удаляемых записей, переместите с помощью мыши в бланк запроса поля, для которых устанавливаются условия отбора. В строке Удаление (Delete) под именами этих полей появляется значение условие (Where). Строку Условие отбора (Criteria) для этих полей заполните необходимыми условиями. Для предварительного просмотра удаляемых записей можно нажать кнопку Вид (View) на панели инструментов. Для возврата в режим конструктора запроса также используется эта кнопка. Д1Я удаления записей нажмите кнопку Запуск (Run) на панели инструментов. Следует иметь в виду, что удаленные записи нельзя восстановить. Поэтому перед удалением записей целесообразно выполнить предварительный просмотр удаляемых записей. Результаты работы запроса на удаление зависят от установленных в схеме базы данных отношений между таблицами и параметров обеспечения целостности для их связей. Если параметры обеспечения целостности для связей таблицы не установлены вообще, то записи удаляются только в указанной в бланке запроса таблице вне зависимости от ее логических связей. Если между таблицами, находящимися в отношении один-ко-многим, установлена связь с поддержанием целостности, но не задан параметр Каскадное удаление связанных записей (Cascade Delete Related Records), сначала необходимо удалить записи подчиненной таблицы и только после этого можно
Часть I. Основы технологии Microsoft Access
198
выполнить удаление записей в главной таблице, т. е. удаление записи главной таблицы возможно только тогда, когда в подчиненной таблице нет связанных записей. Если параметр Каскадное удаление связанных записей (Cascade Delete Related Records) задан, то для удаления записей главной таблицы и связанных с ними подчиненных записей достаточно указать в запросе удаление записей главной таблицы.
Удаление записей из таблиц, связанных с указанием каскадного удаления записей Допустим, необходимо удалить из справочника запись о покупателе с кодом ПООЗ. В схеме данных базы "Поставка товаров" для всех связей установлен параметр обеспечения целостности Каскадное удаление связанных записей (Cascade Delete Related Records), поэтому удаление записи из таблицы ПОКУПАТЕЛЬ повлечет за собой удаление из базы всех подчиненных ей записей на всех уровнях иерархии. Автоматически будут удалены все договоры этого покупателя, а также все накладные, выписанные по этим договорам, т. е. будут удалены связанные записи из таблиц ДОГОВОР, ПОСТАВКА_ПЛАН, НАКЛАДНАЯ И ОТГРУЗКА.
Запрос на удаление записи о покупателе с кодом ПООЗ представлен на рис. 4.51. Запрос включает только одну таблицу ПОКУПАТЕЛЬ, для поля которой код_пок задано условие отбора записей. Этого достаточно для удаления записи о покупателе и связанных с ними записей на всех уровнях.
Запрос! 8 : запрос на удаление
Поле: КОД_Г10К Имя таблицы: ПОКУПАТЕЛЬ Удаление: Условие Условие отбора: "ПООЗ"
<•', л!
ц
Рис. 4.51. Запрос на удаление записи в главной таблице
Глава 4. Запросы
199
При выполнении этого запроса будет сообщено об удалении одной записи. Откройте таблицу ПОКУПАТЕЛЬ и все подчиненные ей таблицы всех уровней и убедитесь, что в них также удалены записи, связанные с этим покупателем.
Удаление записей из таблиц, связанных без указания каскадного удаления записей Допустим, необходимо удалить договор некоторого покупателя, заключенный в конкретную дату. Данные о договорах хранятся в таблицах ДОГОВОР и ПОСТАВКА_ПЛАН! Если для связи этих таблиц в схеме базы данныч установлен параметр обеспечения целостности Каскадное удаление связанных записей (Cascade Delete Related Records), запрос на удаление строится, как и в предыдущем случае, на одной главной таблице, теперь — таблице ДОГОВОР, для которой и формулируются условия отбора записей. Если для связи таблиц не установлено каскадное удаление связанных записей, то в этом примере вне зависимости от того, установлен ли вообще параметр обеспечения целостности, запрос нужно строить на обеих таблицах и, прежде всего, удалять записи из подчиненной таблицы ПОСТАВКА_ПЛАН. Это связано с тем, что по таблице ДОГОВОР должны формулироваться условия отбора записей не только в таблице договоров, но и в таблице ПОСТАВКА_ПЛАН, т. к. даты заключения договора и кода покупателя нет в таблице ПОСТАВКА_ПЛАН. Запрос на удаление записей таблицы ПОСТАВЕСА_ПЛАН представлен на рис. 4.52.
Удаление : запрос на удаление ГЮСТЛВКА_ГЩН номлог код_тов
ЦАТА_ДОГ
СРОК_ПОСТ
СОД_ПОК
мин.пост кол.пост
:УММА_ДОГ
СУММА ПОСТ V
Попе: ПОСТАВКА ПЛАН.* Имя таблицы: ПОСТАВКА ПЛАН Удаление: Из Условие отбора: „
<,
код_пок ДОГОВОР Условие "ПООЗ"
ДАТА^ОГ ДОГОВОР Условие #04,04.2004#
-М
1
Рис. 4.52. Запрос на удаление записей в таблице ПОСТАВКА_ШТАН
Часть I. Основы технологии Microsoft Access
200
После удаления записей из таблицы ПОСТАВКА_ПЛАН может быть удалена запись из таблицы ДОГОВОР. Для этого достаточно преобразовать рассмотренный запрос, удалив из его схемы данных таблицу ПОСТАВКА_ПЛАН, и выполнить его.
Замечание Если параметр каскадного удаления связанных записей не установлен, удаление записей обеих таблиц с помощью одного запроса невозможно. Запрос, представленный на рис. 4.53, работать не будет. Сначала нужно удалить записи подчиненной таблицы, используя при этом главную таблицу для задания условий отбора, и только затем можно другим запросом удалить записи главной таблицы. Если параметр каскадного удаления связанных записей установлен, достаточно одного запроса на удаление записей главной таблицы. Если в запросе некоторой главной таблице подчинены две таблицы, то удалить можно только записи одной из подчиненных таблиц.
Поле: ПОСТАВКА ПЛАН,* Имя таблицы: ПОСТАВКА ПЛАН Удаление: И) Условие отбора;
KOAJTOK ДОГОВОР Условие "ПООЗ"
ДАТА ЛОГ ДОГОВОР Условие #04.04.2004*
ДОГОВОР* " ДОГОВОР Из
или: <|
У!
V,
Рис. 4.53. Запрос на удаление записей из двух взаимосвязанных таблиц
Откройте запрос Удаление, представленный на рис. 4.52, в режиме конструктора и перейдите в режим SQL. Эквивалентная этому запросу на удаление инструкция DELETE будет записана следующим образом:
DELETE ПОСТАВКА_ГЩАН.*, ДОГОВОР.код_покг ДОГОВОР.ДАТд_дог FROM ДОГОВОР INNER JOIN ПОСТАВКА__ПЛАН ON ДОГОВОР. НОМ_ДОГ = nOCTABKAJTJIAH.НОМ_ДОГ WHERE (((ДОГОВОР.КОД_ПОК)="ПООЗ") AND {(ДОГОВОР.ДАТА_ДОГ)=#4/4/2004#));
Инструкция DELETE удаляет из таблицы записи, удовлетворяющие условию отбора, заданному в предложении WHERE. Если в предложении FROM объединяются две или более таблиц, то удалить можно только записи одной из таблиц. Для того чтобы указать, из какой именно, таблицы должны быть удалены записи, в список полей включается конструкция имя__таблицы* (например: ПОСТАВКА_ПЛАН . *). В запросе на удаление, так же как в запросе на выборку, указывается, как должен производиться отбор записей, но, в отличие от последнего, эти записи удаляются.
Глава 4. Запросы
201
Мастера создания запросов Простейшие запросы некоторых видов могут быть созданы с помощью мастеров Access. С помощью мастера можно создать: П простой запрос на выборку; П перекрестный запрос; П запрос для поиска повторяющихся записей (записей с повторяющимися значениями в полях); П запрос для поиска записей, не имеющих подчиненных. Мастер запросов ускоряет процесс создания запроса, автоматически выполняя первоначальные простейшие действия по подготовке запроса. Вызванный мастер запрашивает у пользователя сведения и создает запрос на основе его ответов. При необходимости можно отредактировать запрос в режиме конструктора. Создание запроса с помощью мастера начинается с выбора в окне базы данных объекта Запросы (Queries) и нажатия кнопки Создать (New). В окне диалога Новый запрос (New Query) надо выбрать один из предлагаемых видов запроса: Простой (Simple Query Wizard), Перекрестный запрос (Crosstab Query Wizard), Повторяющиеся записи (Find Duplicates Query Wizard), Записи без подчиненных (Find Unmatched Query Wizard). Далее следует выполнять инструкции, выводящиеся в окнах диалога мастера. В последнем окне диалога предлагается выбрать запуск запроса или просмотр структуры запроса в режиме конструктора. Заметим, что запрос для поиска повторяющихся записей и запрос для поиска записей, не имеющих подчиненных, являются элементарными запросами на выборку.
Мастера запросов на выборку Простой запрос При создании простого запроса на выборку мастер предоставляет возможность выбрать поля из взаимосвязанных таблиц и запросов. Мастер может подготовить итоговый запрос, сгруппировав записи и подсчитав для числовых полей этих групп сумму, среднее значение, минимум, максимум, число записей в группе. Если выбрано поле типа Дата, мастер предлагает выполнить группировку по датам, дням, месяцам, кварталам или годам. В подготовленном бланке запроса мастер не фор\шрует условий отбора.
202
Часть I. Основы технологии Microsoft Access
Перейти к созданию простого запроса мастером можно, воспользовавшись строкой Создание запроса с помощью мастера (Create query by using wizard), размещаемой в списке запросов базы данных. Например, для подсчета суммарного количества товаров, отгруженных в каждом из месяцев учетного периода, достаточно при работе с мастером выбрать: П поле с датой отгрузки ДАТА_ОТГР из таблицы НАКЛАДНАЯ, поле с количеством товара КОЛ_ОТГР из таблицы ОТГРУЗКА и поле с наименованием товара НАИМ_ТОВ из таблицы ТОВАР; П итоговый отчет и функцию Sum для вычисления итоговых значений поля КОЛ_ОТГР; П интервал группировки дат — по месяцам. В запросе будет выполнена группировка по наименованию товара и месяцу и вычислено суммарное количество каждого из товаров в каждом из месяцев. Эти поля будут выводиться на экран в результате выполнения запроса. Чтобы выполнить группировку по месяцу, его необходимо выделить из даты. Мастер использует для этого выражение вида: ДАТА_ОТГР по месяцам: Format$ ( [НАКЛАДНАЯ] . [ДАТА_ОТГР] ; 'гпггагапХ уууу 1 )
Функция Formats возвращает строковое значение части даты, форматированной в соответствии с указанным вторым операндом форматом. Формат 'mmmm\ у у у у ' приводит к формированию строкового значения, содержащего название месяца и год, например: январь 2004. Такое представление даты позволит правильно группировать данные по месяцам и в случае, когда учетный период включает не один год. Кроме того, мастер подготовит вычисляемое поле с именем выражение!, которое позволит не только сгруппировать, но и отсортировать результат по названиям месяцев: Выражение!: Year([НАКЛАДНАЯ].[ДАТА_ОТГР]}*12 + DatePart { 'гг.1 ; [НАКЛАДНАЯ] . [ДАТА_ОТГР] ) -1
Записанное выражение подсчитывает порядковый номер месяца с начала летоисчисления. Функция Year возвращает целое число, обозначающее год. Функция DatePart возвращает заданную часть даты, 'т 1 означает, что необходимо возвратить номер месяца. Это поле на экран не выводится. Для сортировки записей таблицы запроса по месяцам нескольких лет достаточно в строке Сортировка поля выражение! выбрать значение по возрастанию или убыванию. Таблица запроса, которому в процессе диалога с мастером было присвоено имя "Отгрузка товаров по месяцам", представлена на рис. 4.54.
Глава 4. Запросы
203
Отгрузка товаров по месяцам : запрос на выборку ДАТА ОТГР по
Наименование товара CD-ROM Panasonic IDE Монитор 17LG ^кзнерАсег CD-ROM Panasonic IDE FDD 3,5 HDD Maxtor 20GB DIMM64MPC100 HDD Maxtor 20GB ;3в. Карта Genius Liy Монитор 17LG CD-ROM Panasonic IDE .FDD3.5 | Зв. Карта Genius Liv Монитор 17LG Монитор 17LG СканерАсег
Февраль 2004 Март 2004 Март 2004 Март 2004 Март 2004 Апрель 2004 Апрель 2004 Апрель 2004 Апрель 2004 Май 2004 " Май 2004 Январь 2005 Январь 2005 Запись; И] Л I Г
Sum - КОЛ_ОТГР
"FDD з,5"
HDD Maxtor 20GB
18
'
5 8 Б 3 3 2 10 1C
in 7 2 10 'О "1
И
Рис. 4.54. Результат выполнения простого запроса, подготовленного мастером
Запрос для поиска повторяющихся записей Мастер по созданию запроса для поиска повторяющихся записей строит запрос, который определяет, содержит ли таблица повторяющиеся значения в одном или нескольких полях. Мастер позволяет выбрать анализируемую таблицу, задать поля, в которых следует проверить повторяемость значений, отобрать поля, которые надо вывести наряду с повторяющимися. Запрос выводит только те записи, для которых есть хотя бы еще одна запись в таблице с одинаковыми значениями в выбранных полях. Записи выводятся в порядке возрастания значений в полях с повторяющимися значениями.
Запрос для поиска записей, не имеющих подчиненных Мастер по созданию запроса для поиска записей, не имеющих подчиненных, позволяет найти в таблице записи, у которых нет связанных записей в подчиненной таблице. Например, можно найти договоры, по которым вообще не было отгрузок товаров. В этом примере в качестве анализируемой таблицы выбирается таблица ДОГОВОР, в качестве подчиненной — НАКЛАДНАЯ. Для связи выбирается поле ном_дог (номер договора).
204
Часть I. Основы технологии Microsoft Access
Мастер, создавая запрос, устанавливает для выбранных таблиц второй способ объединения. Это приводит к включению в результат запроса всех записей из первой таблицы ДОГОВОР даже в том случае, когда для нее нет подчиненных записей во второй таблице НАКЛАДНАЯ. В запрос, помимо выбранных полей таблицы, для которой производится поиск записей, не имеющих подчиненных, включается одно поле из подчиненной таблицы — поле связи кок_дог. Это поле для записей без подчиненных содержит значение Null и не выводится на экран, т. к. служит для задания условия отбора is Null, которое и позволяет найти только необходимые записи. ЗАДАНИЕ 4. Поиск записей, не имеющих подчиненных Найдите товары, на поставку которых не было заключено договоров. В качестве анализируемой таблицы выберите таблицу ТОВАР, подчиненной ПОСТАВКА_ПЛАН. Для связи выберите поле код_тов.
Мастер перекрестных запросов В перекрестном запросе мастер формирует таблицу, в которой левый столбец из значений одного поля образует заголовки строк, верхняя строка образует заголовки столбцов из значений другого поля, а на пересечении строк и столбцов размешаются итоговые значения, вычисленные по значениям третьего поля. Для получения итоговых значений записи группируются по полям, используемым в качестве заголовков строк и столбцов, и для значений третьего поля в полученных группах записей применяется одна из выбранных статистических функций. Можно предусмотреть выполнение статистической функции и получение общего итогового значения для каждой строки в целом. Допустим, необходимо вычислить количество товаров, запланированных к поставке по каждому договору. Для каждого из товаров в договоре может быть несколько записей, т. к. товар может планироваться к поставке в различных месяцах. Необходимые для решения сформулированной задачи данные хранятся в таблице ПОСТАВКА ПЛАН. Для создания такого перекрестного запроса в окне базы данных выберем объект Запросы (Queries), нажмем кнопку Создать (New) и в окне Новый запрос (New Query) выберем мастер Перекрестный запрос (Crosstab Query Wizard). В первом диалоговом окне Создание перекрестных таблиц (Crosstab Query Wizard) выберем таблицу ПОСТАВХА_ПЛАН, на которой необходимо построить запрос. I. В следующих диалоговых окнах выберем поля: • для заголовков строк — поле ксд_тов (код товара); • для заголовков столбцов — поле :~ом_дсг (номер договора);
Глава 4. Запросы
205
поле кол_пост — количество товара, на основе которого будут определяться значения на пересечении строк и столбцов.
Замечание Группировка в данном перекрестном запросе осуществляется по двум полям — ном_дог и код_тов. В результате такой группировки каждой ячейке перекрестной таблицы соответствует группа записей. 2. Для вычисления единственного значения в ячейке таблицы выберем функцию sum для этого поля, Эта функция определит количество товара по договору в целом. 3. Отметим пункт Вычислить итоговые значения для каждой строки (Yes, include row sums). Подсчет итогового значения для строк позволит получить общее количество товаров, запланированных к поставке фирмой. 4. Оставим имя запроса, предложенное мастером, и нажмем Готово (Finish). Результат выполнения созданного мастером запроса приведен на рис. 4.55.
Is1 ПОСТАВКА_Г|/1АН_нерекрестный : перекрестный запрос Код товара _ Монитор 17LG FDD 3.5 HDD Maxtor 20GB Корпус MiniTower > CD-ROM Panasonic IDE Запись:
И | ^ |[
5
[-
1 Итоговое значение КОЛ ПОСТ - Д111 Д222 262 150 112 60 60! 10 10 30 30
до;
'
И _Mj
ЕЭС!
дззз
40
из 5
Рис. 4.55. Таблица перекрестного запроса с подсчетом количества товаров по договорам и фирме в целом В таблице запроса благодаря наследованию свойств таблицы отображается не код товара, а его наименование. Если вы хотите, чтобы в результате выполнения запроса в таблице отображались не только номера договоров, но и наименования покупателей, перед формированием перекрестного запроса создайте простой запрос на основе таблиц ПОСТАВКА_ПЛАН, ДОГОВОР, ПОКУПАТЕЛЬ и ТОВАР. Выберите из таблицы ПОКУПАТЕЛЬ поле НАИМ_ПОК, из таблицы ДОГОВОР — поле ном_дог, из таблицы ПОСТАВКА_ПЛАН — поле кол_пост, а из таблицы ТОВАР поле НАЙМИТОВ. Дайте ему имя Заказано. Перекрестный запрос постройте на этом запросе выборки, используя в качестве заголовков строк значения из полей НАИМ_ПОК и ном_дог, в качестве заголовков столбцов значения из поля НАИМ_ТОВ. Для подсчета значений в ячейках таблицы выберите поле кол_пост и функцию sum. Подсчет итогового значения для строк в такой перекрестной таблице не
Часть I. Основы технологии Microsoft Access
206
имеет смысла, т. к. приведет к сложению количеств по разным товарам. Таблица такого перекрестного запроса приведена на рис. 4.56. Заказано_перенрестный : перекрестный запрос НАИМ ПОК Компьютер маркет Компьютер маркет Перспектива
НОМ_ДОГ [CD-ROM | FDD 3,5 JHDQ Maxlor|Kopnyc М1п1[Моннтор Д111 60 15С Д222 10 30 Т12 ДЗЗЗ 40
Запись :_1Щ_П
Рис. 4.56. Таблица перекрестного запроса, построенная на запросе выборки
При необходимости фильтрации записей перекрестного запроса введите в режиме конструктора параметры в поля заголовков строк и/или столбцов (рис. 4.57). _
Поле; Имя таблицы: Групповая операция: Перекрестная таблица: Сортировка: Условие отбора: или:
ном_дог
НАИМ ПОК Запрос 18 Группировка Заголовки строк
Запрос18 Группировка Заголовки строк
[Наименование покупателя]
НАИМ_ТОБ Запрос 18 Группировка Заголовки столбцов
кол_пост " Запрос! 8 ._• Sum Зн-зчение
[Наименование товара]
~й
щ
Рис. 4.57. Определение параметров перекрестного запроса
Параметры запроса
[ ? |] X ]
Параметр [Наименовё ние товара] [Наименовг ние покупателя]
{Тип данных Текстовый Текстовый
|А rJ —
!
У. ОК
Отмена
Рис. 4.58. Определение типа данных для параметров перекрестного запроса
Глава 4. Запросы
207
Внимание Для параметров перекрестного запроса обязательно следует задать типы данных. Для этого выполните команду Запрос|Параметры (Query|Parameters). В открывшемся окне Параметры запроса (Query Parameters) введите имена параметров и выберите тип данных, как показано на рис. 4.58.
Конструирование перекрестного запроса Создание перекрестного запроса, который представляет данные в форме, подобной электронной таблице, с помощью мастера было рассмотрено ранее. Однако такой запрос несложно построить полностью в режиме конструктора. Построение запроса начинается как обычно, например, двойным щелчком мыши на строке Создание запроса в режиме конструктора (Create query in Design view) в окне базы данных. В окне конструктора начинается создание запроса на выборку. В любой момент строящийся запрос на выборку может быть преобразован в перекрестный запрос. Для этого надо выбрать тип запроса Перекрестный (Crosstab Query) на панели инструментов или выполнить команду меню Запрос)Перекрестный (Query]Crosstab Query). Рассмотрим действия пользователя при работе с перекрестным запросом в режиме конструктора на примере. В запрос Заказано_перекрестный, полученный мастером перекрестных запросов, который представлен на рис. 4.56, уже были введены параметры в режиме конструктора. Для большей информативности полученной перекрестной таблицы полю, содержащему наименование покупателя, дадим имя Покупатель, ПОЛЮ С номером ДОГОВОра — Договор.
Для выполнения перечисленных преобразований откроем перекрестный запрос в режиме конструктора. Для изменения подписи поля НАИМ_ПОК, содержащего наименование покупателя, щелкнем правой кнопкой мыши, находясь в зоне этого поля. В открывшемся контекстном меню выберем пункт Свойства (Properties). В окне Свойства поля (Field Properties) введем в строку Подпись поля (Caption) название Покупатель. Аналогично поступим с полем ном_дог, заменив его имя на договор. Перекрестный запрос в режиме конструктора приведен на рис. 4.57. Результат выполнения запроса приведен на рис. 4.59. Откройте запрос в режиме SQL. Эквивалентная запросу Заказано__перекрестный инструкция TRANSFORM будет записана следующим образом: PARAMETERS [Наименование товара] Text (255), [Наименование покупателя] Text (255); TRANSFORM Sum (Заказано.КОЛ ПОСТ) A3 [Sum-КОЛ ПОСТ]
208
Часть I. Основы технологии Microsoft Access
SELECT Заказано.НАИМ__ПОК, Заказано.НОМ_ДОГ FROM Заказано WHERE ({(Заказано.НАИМ_ПОК)=[Наименование покупателя]) AND ( (Заказано. НАИМ__ТОВ) =[Наименование товара]) ) GROUP BY Заказано.НАИМ_ПОКГ Заказано.НОМ_ДОГ PIVOT Заказано.НАЙМИТОВ;
TRANSFORM указывает, по какому полю и с помощью какой статистической функции рассчитываются значения в ячейках перекрестной таблицы (Sun(Заказано.КОЛ ПОСТ) AS [Зил-КОЛ ПОСТ]).
Закаэано_перекрестный : пер. Покупатель ^Компьютер иаркет s Запись; И j l
Договор | FDD 3,5 Д111 из \
Рис. 4.59. Результат выполнения перекрестного запроса
Встроенная инструкция SELECT указывает поля, значения которых используются как заголовки строк {Заказано.НАИМ_ПОК, Заказано.ном_дог]. В примере для формирования заголовков строк использованы два поля. Кроме того, если в запросе вычисляются итоговые значения, в инструкцию включается соответствующее вычисляемое поле. Подпись поля, введенная в его свойства, в инструкции не отображается. Предложение GROUP BY задает но. НАЯМ^ПОК, Заказано.НОМ_ДОГ.
группировку строк по полям заказа-
Предложение PIVOT определяет поле, значения которого будут использованы в качестве заголовков столбцов. Кроме того, по этому полю производится группировка среди записей, сгруппированных по значениям строк. Заметим, что в предложении PIVOT вместо поля может использоваться выражение или набор фиксированных значений. Строка PARAMETERS [Наименование товара] Text ( 2 5 5 ) , покупателя] Text ( 2 5 5 ) ; определяет параметры запроса:
[Наименование
[Наименование т о в а р а ] И [Наименование п о к у п а т е л я ] .
Если потребуется удалить параметры в перекрестном запросе, недостаточно стереть их в строке условия отбора нужно удалить их определение в окне Параметры запроса (Query Parameters) и в инструкции SQL. Предикат DISTINCTROW требует, чтобы Access не включал в таблицу запроса повторяющиеся записи. Вслед за этим перечисляются поля, которые надо включить в таблицу запроса.
Глава 4. Запросы
209
Контрольные вопросы по запросам действия 1. Можно ли создать запросы действия с помощью мастера? 2. С создания какого типа запроса начинается конструирование запроса действия? 3. Как просмотреть в запросе на обновление записи, которые будут добавлены в таблицу? 4. Определен ли в структуре таблицы созданной запросом, ключ? 5. Какой командой осуществляется преобразование запроса на выборку в запрос на обновление? 6. В какой строке запроса на обновление указывается новое значение обновляемого поля? 7. Можно ли для подсчета нового значения обновляемого поля использовать выражение? 8. Какая инструкция языка SQL соответствует запросу на создание таблицы? 9. Можно ли в новую таблицу, создаваемую запросом, включать поля нескольких таблиц? 10. Какая инструкция языка SQL соответствует запросу на обновление? 11. Можно ли просмотреть содержимое обновляемых полей до и после обновления, не выходя из режима конструктора запросов? 12. В какой строке запроса на добавление указывается, откуда должны выбираться значения полей добавляемых записей? 13. Где указывается имя таблицы, в которую добавляются записи? 14. В какой строке запроса на добавление указывается, в какие поля должны попадать добавляемые записи? 15. Какая инструкция языка SQL соответствует запросу на добаатение? 16. Вслед за каким словом в инструкции INSERT записывается имя таблицы, в которую добавляются записи? 17. С помощью чего формируются добавляемые зап и с и в и нструкци и INSERT?
18. Могут ли добавляемые записи формироваться на основе нескольких таблиц? 19. Можно ли одним запросом удалить записи из нескольких таблиц? 20. Если в запросе на удаление использованы главная таблица и две подчиненных, находящихся с главной в отношении 1:М, из какой таблицы могут удаляться записи? 21. Каким образом в запросе на удаление указывается таблица, из которой удаляются записи?
Часть I. Основы технологии Microsoft Access
22. Какая инструкция языка SQL соответствует запросу на удаление? 23. Если в предложении FROM инструкции DELETE указана одна таблица, нужно ли использовать в списке полей конструкцию имя_таблицы. * ? 24. Какие поля включаются в список полей запроса на удаление? Ответы 1. Нет. 2. Запроса на выборку. 3. Нажав в режиме конструктора запросов кнопку Вид (View). 4. Нет. 5. Обновление (Update Query) из списка кнопки Тип запроса (Query Type). 6. Обновление (Update To). 7. Да. 8. SELECT INTO.
9. Да. 10.
UPDATE.
П. Да. 12. В строке Поле указываются имена полей, а в строке Имя таблицы имена таблиц, из которых выбираются данные для добавления.
13. В диалоговом окне Добавление (Append), открываемом при преобразовании запроса на выборку в запрос на добавление. 14. Добавление (Append To). 15. INSERT. 16. INTO.
17. С помощью инструкции выбора SELECT. 18. Да, как в любом запросе на выборку. 19. Нет. Исключением является автоматическое удаление подчиненных записей, для которых установлен параметр Каскадное удаление связанных записей (Cascade Delete Related Records). 20. Из любой подчиненной таблицы. 21. Размещением в строке Поле бланка запроса конструкции имя_та6лицы.* и в строке Удаление значения Из. 22.
DELETE.
23. Нет. 24. Если необходимо, все поля таблицы, из которой удаляются записи, и поля, для которых формулируются условия отбора.
Глава 4. Запросы
211
Контрольные вопросы по перекрестным запросам 1. Сколько таблиц использует мастер при построении перекрестного запроса? 2. Как с помощью мастера построить многотабличный перекрестный запрос:1 3. Можно ли для заголовков строк использовать несколько полей? 4. Можно ли в режиме конструктора построить перекрестный запрос? 5. По каким полям задается группировка в бланке запроса при конструировании перекрестного запроса? 6. Какое слово нужно выбрать в строке Перекрестная таблица для поля, используемого для вычисления итоговых значений? 7. Какое значение нужно выбрать в строке Групповая операция для поля, итоговые значения которого вычисляются с помощью заданного выражения? 8. Где записывается выражение для расчета итоговых значений? 9. Где можно задать подпись поля? 10. Какая инструкция языка SQL соответствует перекрестному запросу? И. Каким предложением инструкции TRANSFORM указывается поле, значения которого будут использоваться в качестве заголовков столбцов перекрестной таблицы? 12. Каким предложением инструкции TRANSFORM задается группировка по значениям заголовков строк? Ответы 1. Одну. 2. Создать многотабличный запрос на выборку и использовать его при работе мастера.
3. Да. 4. Да. 5. По полям, определяющим значения строк и столбцов. 6. Значение. 7. Выражение. 8. В строке Поле. 9. В свойствах поля в строке Подпись поля (Caption) или непосредственно в поле бланка запроса перед его именем. 10. TRANSFORM. П. PIVOT. 12. GROUP BY.
8 Зах. 835
Глава 5
Формы В этой главе содержатся разделы, посвященные основам конструирования форм в Access, где даются основные понятия, описание инструментария конструирования с применением мастеров или без них. Через формы может осуществляться ввод данных во взаимосвязанные таблицы базы данных, просмотр данных, а также их изменение. Работая с формой, пользователь может добавлять, удалять и изменять записи таблиц, получать расчетные данные. В процессе работы может осуществляться контроль вводимых данных, устанавливаться ограничения на доступ к данным, выводиться необходимые сообщения. Формы являются основой разработки диалоговых приложений пользователя для работы с базой данных.
Инструментальные средства создания форм Для создания формы могут быть использованы мастера Access. Однако точное формирование макета формы в соответствии с требованиями к ее макету, в зависимости от назначения формы, обеспечивается средствами конструирования форм. Далее рассматриваются основные понятия и инструментальные средства создания форм.
Мастера создания формы ввода/вывода Чтобы начать создание формы мастером, надо в окне базы данных (Database) (рис. 5.1) в области Объекты (Objects) выбрать пункт Формы (Forms). В рабочем поле этого объекта есть значок Создание формы с помощью мастера (Create form by using wizard). Далее можно приступить к поэтапному созданию формы мастером. Для того чтобы получить доступ к списку всех вариантов создания новой формы, нужно на панели инструментов окна базы данных нажать кнопку Создать (New) (см. рис. 5.1), которая вызовет окно Новая форма (рис. 5.2). В этом окне необходимо выбрать пункт Мастер форм (Form Wizard).
Глава 5. Формы
213
Поставка товаров : база данных (формат Access 2002 - 2003) [Открыть ^Конструктор Объекты 3
Таблицы
Л Создат^
Создание формы в режиме конструктора Создание формы с помощью мастера
Запросы Формы Отчеты
Рис. 5.1. Окно базы данных при создании первой формы
Новая форма : KpHCTpyKTOrj
Автоматическое создание формы на основе выбранных полей.
Автоформа: в столбец Автоформа:ленточная [Автоформа:табличная |Автоформа: сводная таблица 'Автоформа: сводная диаграмма , Диаграмма (Сводная таблица
Выберите в качестве источника данных таблицу или запрос:
Рис. 5.2. Диалоговое окно выбора режима создания формы
Мастер форм (Form Wizard) может создавать форму для одной таблицы или для нескольких взаимосвязанных таблиц. Мастер позволяет пользователю задать поля, которые надо включать в форму, и выбрать стиль ее оформления. Кроме этого режима простейшая форма на основе только одной таблицы может быть легко создана выбором одного из режимов Автоформа: в столбец (AutoForm: Columnar), Автоформа: ленточная (AutoForm: Tabular), Автофор-
Часть I. Основы технологии Microsoft Access
214
ма: табличная (AutoForm: Datasheet). Форма в столбец (Columnar) является однозагтисевой, табличная (Datasheet) и ленточная (Tabular) формы являются многозаписевыми и размещают все поля в одной строке. Эти команды создают для заданной таблицы-источника формы, которые отличаются от форм, создаваемых мастером, тем, что включают все поля таблицы и не предоставляют возможности выбора стиля оформления. Эти команды, не вступая в диалог с пользователем и не отображая формы в режиме конструктора, выводят ее на экран в режиме формы, т. е. готовую форму, заполненную значениями из таблицы. Таблица, для которой строится автоформа, выбирается предварительно в окне Новая форма (New Form). Форма, созданная мастером, так же как и форма, созданная любой командой Автоформа (AutoForm), может быть отредактирована в соответствии с требованиями пользователя в режиме конструктора форм.
Режим конструктора форм Для конструирования и редактирования форм ввода/вывода в Access пользователь работает с конструктором форм (Form Design). Создание формы в режиме конструктора полностью возлагается на пользователя. Чтобы начать создание формы в режиме конструктора, надо в окне базы данных (Database) (см. рис. 5.1) в области Объекты (Objects) выбрать пункт Формы (Forms). Вызов конструктора может быть осуществлен в рабочем пространстве окна активизацией значка Создание формы в режиме конструктора (Create form in Design view). Для выбора режима конструктора при создании новой формы можно также нажать кнопку Создать (New) на панели инструментов окна базы данных. После нажатия этой кнопки открывающееся диалоговое окно Новая форма (New Form) (см. рис. 5.2) предоставляет возможность выбрать режим создания формы — Конструктор (Design View). S Microsoft Access Файл
Правка
Вид
Вставка
Форта т
Сервис
Окно
С_правка
- А
Осласть задач —_ v^J Панель элементов •/J Формат (форма/отчет) Настройка...
Контекстное меню Рис. 5.3. Контекстное меню панелей инструментов
Глава 5. Формы
215
Для выполнения необходимых действий в процессе конструирования формы и ее редактирования используются панели инструментов Конструктор форм (Form Design), Панель элементов (Toolbox), Формат (форма/отчет) (Formatting (Form/Report)). Эти панели открываются в режиме конструктора, когда создается новая форма или открывается форма для редактирования ее макета. Пользователь может открыть эти панели в меню Вид/Панели инструментов или из контекстного меню (рис. 5.3), если установит курсор на панели строки меню.
Разделы, объекты и элементы формы в режиме конструктора Форма в режиме конструктора всегда имеет раздел Область данных (Detail). Разделы Заголовок формы (Form Header) и Примечание формы (Form Footer) могут быть отображены по команде меню В ид] Заголовок/примечание формы (рис. 5.4). Разделы формы наполняются различными графическими объектами и элементами в процессе конструирования. Область выделения формы
Форма! : форма Э • i • 10 • I • II • t • 12 • I
i
•9 Область данных
* Примечание формы
Рис. 5.4. Фрагмент диалогового окна конструктора форм
Присоединенная форма получает данные из базового источника записей. Другие выводящиеся в форме сведения, такие как заголовок, дата и номера страниц, сохраняются в макете формы. Объекты и элементы форм, панель элементов
Графические элементы, связанные с полями таблиц и предназначенные для отображения данных некоторого поля, называются присоединенными элемен-
216
Часть I. Основы технологии Microsoft Access
томи управления. Такие элементы управления создаются и модифицируются в областях формы с помощью инструментов панели элементов (Toolbox) (рис. 5.5). Эта панель может быть открыта в меню по команде Вцд]Панель элементов. На рис. 5.5 показана панель элементов (Toolbox) с открытым окном для добавления или удаления кнопок с помощью кнопки Добавить или удалить кнопки. Названия кнопок, показанные в этом окне, соответствуют всплывающим надписям на панели элементов при установке курсора на ту или иную кнопку.
Добиинть кш удалить кнспки -
Панель элементов
Рис. 5.5. Панель элементов
Ниже приводится основное назначение кнопок панели элементов (Toolbox): П Выбор объектов (Select Objects) — выделение щелчком мыши элемента, раздела или формы, выделение группы элементов путем обвода курсором мыши рамки вокруг них; О Мастера (Control Wizards) — включение или отключение мастера для создания элементов управления (например, элементов Список, Поле со списком); 3 Надпись (Label) — создание текстов постоянных заголовков, примечаний, инструкций, не связанных с другими элементами управления;
Глава 5. Формы
217
П Поле (Text Box) — создание элемента типа Свободный (Unbound), который может быть затем связан с полем таблицы или запроса, или использован для создания вычисляемого поля формы; П Группа переключателей (Option Group) — размещение набора флажков, переключателей или выключателей; О Выключатель (Toggle Button) — создание выключателей; П Переключатель (Option Button) — выбор альтернативных значений; П Флажок (Check Box) — выбор набора из возможных значений; СП Поле со списком (Combo Box) — создание поля с раскрывающимся списком значений поля из записей некоторой таблицы базы (значение может вводиться в поле пользователем или выбираться из списка); D Список (List Box) — создание всегда раскрытого списка значений, которые при связи с полем таблицы базы являются единственным источником ввода в поле; О Кнопка (Command Button) — создание командной кнопки, с помощью которой может быть выполнено одно из действий, например, переход по записям, открыта форма, напечатан отчет и реализованы другие функции Access; О Рисунок (Image) — для отображения нередактируемого рисунка, не являющегося объектом OLE; П Свободная рамка объекта (Unbound Object Frame) — отображение свободного объекта OLE, который остается неизменным при переходе по записям; П Присоединенная рамка объекта (Bound Object Frame) — отображение объектов OLE, сохраненных в поле базового источника записей формы; О Разрыв страницы (Page Break) — начало нового экрана в форме, новой страницы в печатной форме (отчете); П Вкладка (Tab Control) — создание вкладок в форме, на каждой из которых могут размещаться свои элементы управления; П Подчиненная форма/отчет (Subform/Subreport) — вывод данных из таблиц, связанных с таблицей-источником формы; D Линия (Line) — разграничение разделов в форме (отчете); О Прямоугольник (Rectangle) — создание рамки при оформлении; О Другие элементы (More Controls) — открытие обширного списка дополнительных элементов, при выборе из которого в форме будет создан соответствующий элемент. С помощью перечисленных инструментов пользователь создает соответствующие элементы и объекты в форме и размещает их таким образом, чтобы
218
Часть I. Основы технологии Microsoft Access
сформировать удобный графический интерфейс для работы с базой данных через форму. Основными типами таких элементов управления (см. панель элементов) являются Поле (Text Box), Поле со списком (List Box), Список (Combo Box). (
Замечание
)
Тип элемента управления, выбираемый по умолчанию для поля, определен в свойствах поля таблицы базы данных, с которым связано поле формы. Задается это свойство при определении типа данных поля в режиме конструктора таблиц на вкладке Подстановка (Lookup).
Графические объекты, не связанные с таблицами или запросами, предназначены, прежде всего, для формирования макета формы и содержат объекты Надпись (Label) для отображения описательного текста (например, заголовка формы), поясняющего текста и кратких инструкций. Наряду со свободными надписями есть надписи, присоединенные к полям. Такие надписи формируются автоматически при создании поля в форме. В свойстве Подпись такого элемента автоматически устанавливается значение, определенное при конструировании таблицы. Кнопки в форме являются элементом управления, используемым для выполнения действий (команд). Когда пользователь щелкает мышкой на кнопке при работе с формой, не только выполняется соответствующее действие, но на экране видно, как кнопка нажимается. В форме могут быть предусмотрены кнопки для разных целей, например, для перехода к другим записям в просматриваемой таблице, для работы с записями добавить, дублировать, восстановить, удалить, сохранить; для работы с формой: открыть, закрыть, фильтровать, обновить. Кнопки создаются для выполнения и других действий, например,'для изменения или применения фильтра, обновления данных в форме, запуска запроса или макроса, поиска конкретной записи, печати текущей записи и др. Свойства объектов и элементов Как форма в целом, так и каждый из объектов и элементов обладает свойствами, которые можно просматривать и корректировать, выполнив команду меню Вид|Свойства (Viewj Properties) или команду Свойства (Properties) в контекстном меню, вызываемом правой кнопкой мыши. Перед вызовом контекстного меню курсор устанавливается на элемент формы, свойства которого надо отобразить. Перед выполнением команды элемент нужно предварительно выделить обычным щелчком мыши. Свойства элемента позволяют определить его внешний вид, размер, местоположение в форме, режим ввода/вывода, "привязать" к элементу выражение, макрос или программу и другие характеристики элемента управления
Глава 5. Формы
219
этого типа. Каждый тип элементов управления формы имеет стандартный набор значений свойств. Для вызова контекстного меню для формы в целом курсор должен быть предварительно установлен в верхнем левом углу на пересечении линеек в области выделения формы, где после щелчка мыши появляется черный квадрат (см. рис. 5.4). В этом меню можно перейти к просмотру общих свойств формы (рис. 5.6). ШГ Форма Форма Макет
| данные [ События | Другие |
Все
Подпись .. I Режим по умолчанию , . . Одиночная форма .. Да Режим формы Режим таблииы . . . Да Режим сводной таблицы .. Да Режим сводной диаграммы . , Да , . Все Полосы прокрутки Область выделения . . Да Кнопки перехода . . Да Разделительные линии . . Да Автоматический размер . . Да Выравнивание по центру , . , Нет . . Изменяемая Тип границы Кнопка оконного меню . , , , ' . , . . . Да . . Все Кнопки размеров окна Кнопка закрытия . . Да Кнопка контекстной справки . , , . , Нет Ширина . . 9,998см Рисунок , . . (отсутствует) Тип рисунка , . . Внедренный , . Фрагмент Масштабы рисунка Выравнивание рисунка . . По центру Мозаичное заполнение . . Нет . . 10 Число делений по X . , 10 Число делений по V . . Нет Формат для печати . . Осм Высота подтаблицы , . Нет Развернутая подтаблица , . (Стандартный) Источник палитры , , Слева направо Ориентация , , Да Допускается перемещение
Рис. 5.6. Диалоговое окно свойств формы
Двойной щелчок мыши на области выделения формы позволяет сразу вызвать окно общих свойств формы. Для отображения на экране ее свойств может быть также выполнена команда меню Вид|Свойства (View|Properties).
220
Часть I. Основы технологии Microsoft Access
Если линейки не выводятся на экран, нужно установить курсор на серую фоновую область справа от формы. Заметим, что выделить целиком форму можно также, выполнив команду Правка]Выделить форму (Edit Select Form). Свойства формы отображаются в диалоговом окне Форма (Form), где для каждого свойства и его значения отводится строка (см. рис. 5.6). Панели инструментов конструктора форм и форматирования На рис. 5.7 показана панель Конструктор форм (Form Design) с открытым окном для удаления и добавления кнопок на панели инструментов с помощью кнопки Параметры панелей инструментов. Названия кнопок, показанные в этом окне, соответствуют всплывающим надписям на панели конструктора при установке курсора на ту или иную кнопку. Ниже приводится основное назначение кнопок панели Конструктор форм (Form Design): 3 Вид (View) — выбор режима отображения формы из списка, включающего варианты: Конструктор (Design View), Режим формы (Form View), Режим таблицы (Table View), Сводная таблица (Pivot Table View) и Сводная диаграмма (Pivot Chart View); П Сохранить (Save) — сохранение внесенных в активный объект изменений; G Печать (Print) — печать выводимых в форме данных; П Предварительный просмотр (Print Preview) — отображение страницы перед ее печатью; П Вырезать (Cut) — удаление выделенных элементов с копированием их в буфер обмена; О Копировать (Сору) — копирование в буфер обмена выделенных элементов; П Вставить (Paste) — вставка содержимого буфера обмена в выделенную область формы или элемент управления; П Формат по образцу (Format Painter) — копирование параметров форматирования текущего элемента управления; О Отменить (Undu Move) — отмена последнего действия; П Вернуть (Redo) — возврат к последнему действию; П Гиперссылка (Hyperlink) — создание элемента управления для перехода к объектам базы данных (той же или другой), к документам Word, Excel и другим приложениям Windows, а также к документам глобальной сети Интернет или локальной сети; П Список полей (Field List) — вызов списка доступных полей для выделенной области формы;
221
Глава 5. Формы
Параметры панелей инструментов
Конструктор форм
ftiElКонструктор форм
Вид Сохранить
Ctrl+5
(•
Настройка...
Поиск файлов... Печать Предварительный просмотр Вырезать
Ctrl+X
Копировать
Ctr!+C
Вставить
Ctrl+V
Фермат по образцу Отменить Вернуть Гиперссылка...
Ctrl+K
Список полей Панель элементов Автоформат.., Программа Свойства
Alt+ENTER
Построить... Окно базы данных
F11
Создать объект Справка; Microsoft Office Access
Fl
Сброс панели
Рис. 5.7. Панель Конструктор форм
П Панель элементов (Toolbox) — открытие панели элементов; О Автоформат (AutoFormat) — настройка и применение встроенных форматов к форме, разделу, или элементам управления; ГЗ Программа (Code) — открытие модуля формы в редакторе VBA; П Свойства (Properties) — открытие окна свойств для выделенной формы, раздела или элемента управления; П Построить (Build) — вызов диалогового окна, позволяющего выбрать и запустить построитель выражений (Expession Builder), редактор макросов
222
Часть I. Основы технологии Microsoft Access
(Macro Builder) или программ на VBA (Code Builder) для выделенной формы или элемента управления; G Окно базы данных (Database Window) — переход в окно базы данных; П Создать объект (Create Object) — открытие списка объектов и для создания нового объекта базы данных: Таблица (Table), Запрос (Query), Форма (Form), Отчет (Report), Страница (Web-страницы) (Page), Макрос (Macro), Модуль (Module); П Справка: Microsoft Qffice Access (MSAccess Help) — вызов помощника Access для получения справочной информации, советов или настройки параметров помощника. Кнопка Параметры панелей инструментов (см. рис. 5.7) позволяет добавить или удалить кнопки, снимая или устанавливая флажки в открывающемся списке кнопок или перейти к окну настройки для выбора панелей инструментов и их настройки. В процессе конструирования формы для настройки полей и надписей можно использовать команды форматирования, позволяющие настроить шрифт и другие параметры элемента для надписей и отображения значений полей в режиме формы. Если выделен раздел, можно, например, выбрать тип оформления, цвет фона, а для подчиненной части формы — толщину линии границы. Панель форматирования Формат (форма/отчет) (Formatting (Form/Report)) показана на рис. 5.8. Панель форматирования содержит стандартные кнопки форматирования, используемые при редактировании в приложениях MS Office. Эти кнопки становятся доступными при выделении рамки элемента управления. Дополнительная панель, позволяющая добавить или временно удалить кнопки, вызывается нажатием кнопки панели форматирования Параметры панелей инструментов. Ниже дано краткое назначение кнопок панели форматирования: П Объект (Object) — позволяет выбрать и выделить из списка доступные разделы и элементы управления формы; П Шрифт (Font) — позволяет выбрать шрифт для выделенного элемента управления; G Размер (Font Size) — позволяет выбрать размер шрифта для выделенного элемента управления; П Полужирный (Bold), Курсив (Italyc), Подчеркнутый (Underline) — делают шрифт жирным, наклонным или подчеркнутым для выделенного элемента управления; О По левому краю (Align Left), По центру (Сепег), По правому краю (Align Rignt) — выравнивают содержимое выделенного элемента управления по левому краю, по центру или по правому краю;
Глава 5. Формы
223 Параметры панелей инструментов АДРЕС_СК
-I: Arial
Ж.>"ч
Объект:
Формат (форма/отчет)
Шрифт:
>
i •
Размер: Полужирный Курсив Подчеркнутый По левому краю По центру По правду краю Цвет га лив ки/ фона Цвет текста Цвет пинии/границы Толщина пинии/границы Оформление Сброс панели
Рис, 5.8. Панель форматирования
П Цвет заливки/фона (Fill/Back Color) — позволяет выбрать цвет фона для выделенного элемента управления или раздела; П Цвет текста (Font/Fore Color) — позволяет выбрать цвет текста; О Цвет линии/границы (Line/Border Color) — позволяет выбрать цвет границы для выделенного элемента управления; G Толщина линии/границы (Line/Border Width) — позволяет выбрать толщину границы для выделенного элемента управления; О Оформление (Special Effect: Flat) — позволяет выбрать вариант оформления выделенного раздела. Настройка панели инструментов Панели инструментов для форм отображаются в соответствии с режимом работы, т. е. являются контекстно-зависимыми. При переходе из окна базы данных в режим конструктора формы автоматически закрывается панель инструментов База данных (Database) и открываются панели Конструктор форм (Form Design) и Панель элементов (Toolbox). С помощью контекстного меню при активной панели конструктора можно открыть панель форматирования Формат (форма/отчет) (Formatting (Form/Report)). При активиза-
Часть I. Основы технологии Microsoft Access
224
ции окна базы данных закроются панели конструктора и элементов, а откроется панель инструментов База данных (Database). Для отображения любой панели можно выполнить команду Вид|Панели инструментов|Настройка (ViewjToolbars Customize) и в окне Настройка (Customize) на вкладке Панели инструментов (Toolbars) (рис. 5.9) установить флажки для нужных панелей. Для отображения панели конструктора форм надо снять флажок Конструктор форм (Form Design). Окно настройки может быть вызвано на панели инструментов конструктора, панели форматирования или другой панели по нажатию кнопки Параметры панелей инструментов (см. рис. 5.7, 5.8). Настройка Панели инструментов ; Команды ] Параметры Панели инструментов: База данных Г~ Веб-узел Г" Выравнивание и размер "" Запрос в режиме таблицы Г" Конструктор запросов Г" Конструктор макросов Г~ Конструктор отчетов Р]<днструктор таблиц
?
ммСОд-*иЫАчЛь^нЗДьнн1
|™* Контекстные меню *~ Макет страницы Область задач V Панель элементов Предварительный просмотр Работа с исходным текстом Разметка страницы
Рис. 5.9. Выбор панелей инструментов
Изменение состава кнопок панели инструментов Состав доступных кнопок панели инструментов может быть изменен. Рассмотрим, например, изменение состава кнопок (команд) панели конструктора форм. Для этого в окне Настройка (Customize) на вкладке Команды (Commands) (рис. 5.10) в области Категории (Categories) нужно выбрать опцию Конструктор форм или отчетов (Form/Report Design). Далее курсором мыши можно перетаскивать любую кнопку из области Команды (Commands) на панель конструктора форм или удалять кнопку обратным перемещением.
Глава 5. Формы
225 Настройка Панели инструментов
Команды j Параметры |
Чтобы добавить команду на панель инструментов, выберите категорию и перетащите команду из этого окна на панель. Категории: Команды: <онструктор запросов •* \
Список попей
Элементы управления Формат Конструктор макросов ервис Веб —I Работа с исходным те* Зстроенные меню Все таблицы _Т.1
Программа Сортировка и группировка Последовательность переход ' Образец Сохранить как отчет.,.
|Игменить выделенный объект '1
Упорядочить команды,..
Закрыть
Рис. 5.10. Диалоговое окно для выбора кнопок на панель конструктора форм
Замечание Для модификации свойств кнопки необходимо выделить ее на панели конструктора форм при открытом окне Настройка (Customize). После этого становится доступной кнопка Изменить выделенный объект (Modify Selection). Далее в окне настройки нужно нажать эту кнопку и в открывшемся списке в строке Имя (Name) можно изменить имя. Изменить значок можно выбором новой пиктограммы в строке Выбрать значок для кнопки (Change Button Image).
Создание однотабличной формы Для создания однотабличной формы определяются требовании к форме и далее проектируется макет экранной формы с размещением в нем полей таблицы и других элементов. В соответствии с макетом нужно осуществить конструирование экранной формы средствами Access. При конструировании однотабличной формы выбирается таблица БД, на основе которой создается форма. Такая форма является присоединенной, она получает данные из базового источника записей, которым является таблица. В процессе создания формы выбираются поля таблицы, которые должны быть представлены в форме, осуществляется их размещение в маке-
226
Часть I. Основы технологии Microsoft Access
те формы, создаются вычисляемые поля и графические элементы: кнопки, выключатели, элементы оформления, поясняющий текст и рисунки. Для настройки различных элементов формы используется типовой набор их свойств.
Способы построения однотабличной формы Создание однотабличной формы можно осуществить средствами Мастера форм (Form Wizard), позволяющего пользователю задать поля, которые нужно включать в форму, и выбрать стиль ее оформления. Кроме этого режима форма на основе одной таблицы может быть легко создана выбором одного из режимов автоформ. Автоформы табличная (Datasheet) и ленточная (Tabular) являются многозаписевыми и размещают все поля в одной строке, что удобно для ввода данных из простых справочников, имеющих только табличную часть. Форма в столбец (Columnar) является однозаписевой, ее целесообразно использовать в случаях, когда в таблице есть поля с данными, требующими большого окна для отображения (поле MEMO, картинки, фотографии). Команды автоформы создают для заданной таблицы-источника форму, не вступая в диалог с пользователем, и выводят сразу на экран готовую для работы форму. Форма, созданная мастером, так же как и форма, созданная любой командой Автоформа (AutoForm), может быть после создания отредактирована в соответствии с требованиями пользователя в режиме конструктора форм.
Создание однотабличной формы в режиме Автоформы Рассмотрим создание однотабличной формы для ввода, просмотра и корректировки данных на примере таблицы ТОВАР базы данных "Поставка товаров". В результате загрузки данных по товарам должны формироваться записи только таблицы ТОВАР (объект загрузки). Таблица ТОВАР не является подчиненной другим таблицам, поэтому в процессе загрузки записей не должны устанавливаться связи с записями других таблиц. Определим структуру экранной формы, которую назовем "СПРАВОЧНИК ТОВАРОВ". Макет формы для ввода данных в таблицу ТОВАР должен содержать: ключевое поле код_тов, описательные поля в соответствии с примером созданной базы данных (см. главу 3) и фотографию товара. Источником записей формы является таблица ТОВАР. Все поля таблицы ТОВАР, включая фотографию, будут размещаться в области данных формы.
Глава 5. Формы
227
Создадим однотабличную форму СПРАВОЧНИК ТОВАРОВ с помощью команды Автоформа (AutoForm). В окне базы данных Поставка товаров: база данных (см. рис. 5.!) выбираем в области Объекты (Objects) пункт Формы (Forms) и нажимаем кнопку Создать (New). В окне Новая форма (New Form) (рис. 5.11) задаем в качестве источника данных таблицу ТОВАР и режим создания Автоформа: в столбец (AutoForm: Columnar). Этот режим обеспечит ввод/вывод всех полей выбранной таблицы в однозаписевой форме, которая удобна в данном случае, т. к. поле Фото требует специального места в форме. Новая форма |Конструктор Мастер фори
Автоматическое создание форм с полями, расположенными Б один столбец,
Датоформа:ленточная Автоформа:табличная Двтоформа; сводная таблица ;Двтоформа; сводная диаграмма Диаграмма :Сводная таблица
11 Выберите в качестве источника данных таблицу или запрос:
Рис. 5,11. Выбор режима создания для построения однотабличной формы
Наименование Принтер HPLaserJet
Рис. 5.12. Форма, полученная по команде Автоформа: в столбец для работы с таблицей ТОВАР
228
Часть I. Основы технологам Microsoft Access
Создание формы в режиме Автоформа: в столбец (AutoForm: Columnar) завершается отображением формы (рис. 5.12). Подписи полей в форме соответствуют заданным в их свойствах при определении структуры таблицы (см. главу 3). Подпись формы соответствует имени таблицы источника (ТОВАР), при сохранении формы по команде Файл/Сохранить можно подтвердить это имя или изменить его на СПРАВОЧНИК ТОВАРОВ. При открытии формы появляется панель инструментов Режим формы (Form View) (рис. 5.13), которая отображается на экране все время, пока активно окно формы. Список кнопок с названиями можно просмотреть при переходе к режиму настройки панели. Вид Дохранить Поиск файлов... Печать Предварительный просмотр Орфография... Вырезать Копировать Вставить Отмена невозможна Гигер ссыпка.., Сортировка по возрастании: Сортировка по убывании Фильтр по выделенному Изменить фильтр Применить фильтр Ней™,.. Новая запись Удалить эапись Своцства Окно базы данных Создать объект ^правка: Microsoft Office Access Расширенный фильтр... Сетка Высота строки,.. Ширина столбца...
Рис. 5.13. Панель инструментов Режим форм!
F]
Глава 5. Формы
229
Редактирование однотабличной формы Для уточнения местоположения, размера, шрифта и других параметров отображения элементов формы, а также для изменения текста надписей необходимо перейти в режим конструктора форм. При открытой форме переход в режим конструктора можно осуществить нажатием кнопки Вид (View) на панели инструментов Режим формы (Form View) (см. рис. 5.13). Кнопка Вид (View) имеет список, развернув который, можно выбрать необходимый режим представления формы. Переход в режим конструктора можно осуществить также при активном окне формы выполнением команды меню Вид)Конструктор (View|Design View). После перехода в режим конструктора созданная форма откроется в окне конструктора форм (рис. 5.14).
формирование элемента Надпись
вид и положение курсора при расширении области . ! ' . . , IE
.1
Рис. 5.14. Режим конструктора формы, полученной командой Автоформа: в столбец по таблице ТОВАР
230
Часть I. Основы технологии Microsoft Access^
После выбора режима конструктора в окне Access появляются панели инструментов Конструктор форм (Form Design) (см. рис. 5.7), Панель элементов (Toolbox) (см. рис. 5.5) и Формат (форма/отчет) (Formatting (Form/Report) (см. рис. 5.8).
Создание заголовка Для ввода текста заголовка в полученную форму в окне конструктора (см. рис. 5.14) расширим область заголовка формы, установив курсор мыши на границу области заголовка и области данных и перемешая эту границу на нужное расстояние. Для ввода текста заголовка необходимо создать графический элемент Надпись (Label). Начинается создание элемента щелчком мыши на кнопке панели элементов Надпись (Label) (см. рис. 5.5), после чего становятся доступными кнопки форматирования на панели Формат (форма/отчет) (см. рис. 5.8). Теперь может быть выбран нужный шрифт и другие параметры оформления. Переместим курсор мыши на место начала текста в области заголовка формы (предварительно расширив ее курсором мыши). Нажмем кнопку мыши и, не отпуская ее, растянем рамку текста до нужного размера. Введем текст. Завершается создание элемента Надпись (Label) нажатием клавиши <Enter> или щелчком мыши вне рамки элемента. Форматирование элемента Надпись (Label) может быть выполнено в любой момент. Для этого, когда курсор не установлен на тексте надписи, элемент требуется вьщелить щелчком мыши внутри его рамки. Для изменения текста надписи курсор должен быть переведен на текст, при этом сам элемент (его рамка) остается невыделенным и команды форматирования для него недоступны. Элемент Надпись (Label), размещенный в области заголовка формы, может быть перемещен в пределах этой области. Могут быть также изменены размеры рамки элемента. Рамка выделенного элемента может быть растянута или сжата при размещении курсора на специальных точках рамки, в которых появляется двунаправленная стрелка. Перемещение надписи возможно при выделенной рамке и отображении курсора мыши в виде руки. (^
Замечание
J
При установке курсора мыши на любой границе рамки элемента формы курсор мыши отображается в виде раскрытой ладони и тогда возможно перемещение элемента за пределы области. При установке курсора в левом верхнем углу курсор отображается в виде указательного пальца и перемещение возможно только в пределах области, которая при этом может автоматически расширяться.
Глава 5, Формы
231
Для удаления элемента его рамку надо выделить и нажать клавишу или выполнить команду Правка|Удалить.
Перемещение и форматирование связанных элементов При перемещении связанных элементов Поле (Text Box) и Надпись (Label), когда между ним установлена связь, следует иметь в виду, что независимое перемещение поля и его надписи возможно только тогда, когда курсор примет вид указательного пальца. В противном случае оба элемента перемещаются синхронно. Действия по форматированию этих элементов осуществляются при их выделении аналогично рассмотренному выше форматированию несвязанного элемента.
Изменение свойств формы и ее элементов Редактирование формы и ее элементов может быть произведено не только графическими средствами, но и путем изменения их свойств. Для этого при выделенном элементе должно быть открыто диалоговое окно свойств командой Вид|Свойства (View|Properties) или с помощью контекстного меню. В качестве примера на рис. 5.15 показано окно свойств элемента Поле: НАИМ_ТОВ (Text Box: НАИМ_ТОВ) при выбранной вкладке Макет (Format).
Сохранение формы после редактирования После завершения редактирования формы она может быть сохранена. Если редактируемая форма еще не сохранялась, выполняется команда меню Файл (Сохранить (File(Save) или нажимается кнопка панели инструментов Сохранить (Save). Можно сохранить форму и при ее закрытии командой Файл|3акрыть (File(Close) или нажатием кнопки Закрыть (LEI) окна формы. Далее надо подтвердить необходимость сохранения формы и в диалоговом окне Сохранение (Save) нужно ввести название СПРАВОЧНИК ТОВАРОВ в область Имя формы (Form Name) (рис. 5.16). • Если редактируемая форма была ранее сохранена, то для сохранения измененной формы под новым именем надо выполнить команду меню Файл|Сохранить как (File|Save As). Пример отредактированной формы СПРАВОЧНИК ТОВАРОВ в режиме конструктора представлен на рис. 5.17.
Часть I. Основы технологии Microsoft Access
232
Поле:НАИМ JOB HAMMJTOB Макет j данные j События | Другие |
v! Все
J
Формат поля | Число десятичных знаков Авто Вывод на экран Да Режим вывода Всегда Полосы прокрутки Отсутствуют Расширение Нет Сжатие Нет От левого края 2,418см От верхнего края 0,804см Ширина 3,011см Высота 0,45см Тип фона Обычный Цвет фона -2147483643 Оформление , . , . . утопленное Тип границы Сплошная Цвет границы О Ширина границы Сверхтонкая Цвет текста -2147483640 Шрифт , . . . , . , . , MS 5ans 5erif Размер шрифта 8 Насыщенность обычный Курсив Нет Подчеркнутый Нет Выравнивание текста Обычное Направление чтения Контекст Язык клавиатуры Система Согласование полосы прокрутки , . Система Начертание цифр Система Леере поле Осм Верхнее поле Осм Правое поле Осм Нижнее поле Осм Междустрочный интервал Осм Гиперссылка Нет
..т.!
Рис. 5.15. Свойства поля НАЖ!_ТОВ, установленные мастером при создании формы для таблицы ТОВАР
Сохранение Имя формы:
[СПРАВОЧНИК ТОВАРОВ
. .;••
Отмена
Рис. 5.16. Ввод имени формы при ее сохранении
Глава 5. Формы
233 • i
№ СПРАВОЧНИК ТОВАРОВ : форма • 1 ' 1 • i • Z • i •3 ' 1 • 4 • i • 5 • 1-Е.
1* Заголовок формы i . J * Область данных i
Наи мимо ванн £
tetepteyOОВ> ^РО
3
JHAHMJTOB
д_ |код_тов~
*:
"Кос
~1
— 1 1—
[
Ратог аяфн. J TOSS ря ФОТО
г 3
т
1 • 7 • i • S • i ' Э • 1 • 10 ' i • Ц • i • 2 • i ' 13 • 1 • Н • 1 • 15 • 1 •."*•.!
Цен а
П
|ЦЕНА
Еди ница ИЗМЕ речи я!
|ЕЙ
5: Б
Сте вка h ШС
|СТАВКА_НЛС 1
1
1
1
форме J *При чечание [^0В^Ы%ГИ<$ГЦф
ован
\
*1
1 ,
,-
Рис. 5.17. Форма СПРАВОЧНИК ТОВАРОВ в режиме конструктора
Работа с данными таблицы в режиме формы После завершения редактирования формы приступим к работе с таблицей ТОВАР через форму. Для перехода в режим формы из режима конструктора нужно нажать кнопку Вид (View) на панели Конструктор форм (Form Design) (см. рис. 5.7) или выполнить команду меню Вид|Режин формы (View|Form View). Для загрузки, просмотра и корректировки данных таблицы ТЭВАР через ранее сохраненную форму в окне базы данных (см. рис. 5.1) в области Объекты (Objects) надо перейти к строке Формы (Forms) и, выделив в рабочей области название формы СПРАВОЧНИК ТОВАРОВ, нажать кнопку Открыть (Open). На рис. 5.18 приводится форма СПРАВОЧНИК ТОВАРОВ в режиме формы, в которой отображены данные из текущей (активной четвертой) строки таблицы ТОВАР. Данные других записей по товарам будут отображаться при использовании кнопок для изменения текущей записи. Для ввода новой записи в таблицу ТОВАР нужно перейти к последней (пустой) записи в форме и, прежде всего, ввести туда значения обязательных полей. Сразу перейти к пустой записи можно используя кнопку Р^|,
Часть I. Основы технологии Microsoft Access
234
I|S ТОВАР
B@jS
СПРАВОЧНИК ТОВАРОВ Наименование (Принтер HPLaserJet!
код
|тоо?
Фотография товаре
Цена
|
Единица измерения
Ставка НДС
|
"\Л ''^-*,Ш*\
5 432,00р.
- - >
|штцка
10%
<
^njf
:
Товар сертидмцирован Запись; И И 1 1
7 LJ И 1^*1 •« 12
Рис. 5.18. Форма ввода/вывода для работы с данными таблицы ТОВАР
Значения, вводимые в поля однотабличной формы, должны соответствовать типам данных и их свойствам, заданным при определении структуры таблицы. Пример документов с исходными данными справочников покупателей и складов для ввода через однотабличную форму приведен в Приложении 2. Для завершения создания (редактирования) записи таблицы достаточно перейти к другой записи или выполнить команду меню Записи|Сохранить запись. ЗАДАНИЕ 1. Создание форм с помощью автоформ и мастера Создайте однотабличные формы для таблиц ПОКУПАТЕЛИ и СКЛАДЫ с помощью команды Автоформа или мастера, отредактируйте ее в конструкторе и произведите добавление нескольких записей. Пример документов с исходными данными справочников покупателей и складов для ввода через однотабличную форму приведен в Приложении 2.
Создание многотабличных форм Составная многотабличная форма создается для работы с несколькими взаимосвязанными таблицами. Многотабличная форма может состоять из основной части и одной или нескольких подчиненных включаемых форм, т. е. быть со-
Глава 5. Формы
235
ставной. Подчиненная форма, как правило, строится на основе таблицы, подчиненной относительно таблицы-источника основной части формы. (
Замечание
^
Подчиненная (включаемая) форма может строиться также на основе главной таблицы относительно таблицы-источника основной части формы.
Многотабличная форма может не иметь включаемых форм. В этом случае в форму, кроме полей таблицы, на основе которой она строится, добавляются поля из связанной таблицы, являющейся главной относительно основной таблицы формы. Многотабличная форма может быть создана в режиме конструктора или с помощью мастера форм. При создании многотабличной формы средствами Access могут использоваться различные приемы. Наиболее технологичным является, очевидно, первоначальное создание форм с помощью мастера с последующей их доработкой в конструкторе. Мастер упрощает процесс создания формы, т. к. автоматически выполняет большинство требуемых операций.
(
Замечание
)
При создании многотабличной формы с помощью мастера Access создает для формы запрос в виде базовой инструкции на языке запросов SQL. В этом запросе фигурируют таблицы и поля, которые использованы при построении формы.
Мастер форм предоставляет возможность выбрать включаемые в форму поля из нескольких взаимосвязанных таблиц, а также запросов. При этом используются различные способы построения многотабличной формы. Полученная с помощью мастера форма при необходимости может быть отредактирована в режиме конструктора.
Способы построения многотабличной формы Явное включение подчиненной формы При использовании мастера форм подчиненная форма строится только для таблицы, которая является подчиненной по отношению к таблицеисточнику основной части. Подчиненная форма воспроизводит данные из всех записей подчиненной таблицы, которые связаны с записью главной таблицы, отображаемой в основной части формы. С помощью мастера можно создать составную форму, включающую одну или несколько подчиненных форм стандартного вида с выбранными полями.
236
Часть I. Основы технологии Microsoft Access
Вызов связанной формы по кнопке Мастер форм позволяет создать связанные формы, которые не включаются непосредственно в форму. При этом вместо подчиненной формы включается лишь кнопка, представляющая связанную форму. Если необходимо просмотреть подчиненные записи, связанная подчиненная форма вызывается на экран нажатием этой кнопки. Открывающееся содержимое связанной формы синхронизировано с текущей записью формы. Этот способ построения многотабличной формы удобен в сложных формах, перегруженных большим числом элементов управления, а также в случае, когда пользователю нет необходимости постоянно видеть связанные данные.
Многотабличная форма без подчиненных и связанных форм Составная многотабличная форма, построенная мастером, может не включать подчиненных и связанных форм. Такая форма создается, если необходимо отображать записи подчиненной таблицы, дополненные полями из одной или нескольких главных таблиц. В этом случае источником данных, выводимых в форме, является запись подчиненной таблицы. В одной записи, отображаемой в форме, содержатся значения полей из записи подчиненной таблицы и полей из всегда единственной связанной с ней записи главной таблицы.
Замечание Данные из главной таблицы, отображаемые в такой форме, будут повторяться в разных записях, т. к. в результате объединения двух нормализованных таблиц образуется ненормализованная структура данных.
Многотабличная форма на основе запроса Создание формы на основе полей из нескольких взаимосвязанных таблиц с помощью мастера является для пользователя достаточно простой процедурой. Однако, если в базе данных уже имеется запрос, в котором выбраны таблицы, нужные для получения результата, определены поля, которые необходимо включить в результат, целесообразно создавать форму на основе ранее созданного запроса. В этом случае мастер использует ранее проделанную пользователем работу.
Создание мастером формы для работы с двумя взаимосвязанными таблицами Для одновременной работы с главной и подчиненной таблицами, как правило, строится многотабличная форма из основной части и подчиненной
Глава 5, Формы
237
включаемой формы, т. е. составная форма. Подчиненная форма строится на основе таблицы, подчиненной относительно таблицы-источника основной части формы. Для создания формы в окне базы данных (см. рис. 5.1) в области Объекты (Objects) надо перейти к строке Формы (Forms) и нажать кнопку Создать (New). В диалоговом окне Новая форма (New Form) (см. рис. 5.20) необходимо выбрать режим создания Мастер форм (Form Wizard). ПРИМЕР. Ниже рассматривается пример создания составной формы для одновременной загрузки и работы с данными двух таблиц СКЛАД и ЗАПАС, связанных отношениями типа 1:М. Соответствующая подсхема данных для формы показана на рис. 5.19.
код_тов НАММ_ТОВ
код_ск
ТЕК_ЗАПАС НОРМ ЗДПАС
Рис. 5.19. Подсхема данных для примера двухтабличной формы
Таблица ЗАПАС сдержит данные о запасе товаров на складах. В данном случае все склады предполагаются специализированными, когда любой товар может храниться только на определенном складе. То есть в рассматриваемом случае таблица ЗАПАС может иметь в качестве уникального ключа значение Кед товара и соответственно содержать наименование товара. Выберем в окне Новая форма (New Form) главную таблицу СКЛАД (рис. 5.20). В открывшемся в первый раз диалоговом окне Создание форм (Form Wizard) (см. рис. 5.21) обычно выбираются нужные таблицы из списков Таблицы и запросы (Tables and queries), начиная с главной таблицы (если она не была выбрана в предыдущем окне) и Доступные поля (Aviable Fields) каждой из таблиц, включаемые в форму. На рис. 5.21 показан момент, когда было выбрано только поле ном_скл. Выберем далее для таблицы СКЛАД все поля, а для таблицы ЗАПАС — все поля за исключением кода склада код_ск (поле связи таблиц), поскольку он уже включен в форму из главной таблицы СКЛАД.
Часть I. Основы технологии Microsoft Access
238 повоя форма
=Конструктор Автоформа: в столбец Автоформа: ленточная ', Автоформа: табличная (йвтофюрма: сводная таблица i Автоформа; сводная диаграмма Диаграмма Сводная таблица
Автоматическое создание формы на основе выбранных попей.
Выберите в качестве источнике данных таблицу или запрос:
Рис. 5.20. Выбор режима мастера для создания формы и таблицы для основной ее части
Создание форм Выберите поля для формы. Допускается выбор нескольких таблиц или запросов.
Таблицы и запросы [Таблица: СКЛАД Выбранные поля:
Доступные поля;
НАИМ_СК ОТВ_ЛИЦО АДРЕС_СК
-
Отмена
Далее >
Готово
Рис. 5.21. Выбор таблиц и полей для создаваемой формы
Внимание Если выбраны поля из таблиц, для которых не определена связь в схеме данных, появится сообщение о невозможности создать форму. При этом мастер предлагает или изменить состав полей, или выводит схему данных для воз-
Глава 5. Формы
239
можного определения нужных связей. После изменения связей мастер должен запускаться заново. После выбора полей для обеих таблиц и нажатия кнопки Далее в окне Создание форм (Form Wizard) (рис. 5.22) в поле Выберите вид представления данных (How do you want to view your data) надо выделить имя таблицы (СКЛАД), которая является источником основной части формы. Поскольку таблица склад была сразу выбрана в качестве основного источника, то она уже выделена.
Создание форм Выберите вид представления данных: ном скл, код а, НАИМ ск, отв_лицо, АДРЕС_СК
- ЗАПАС
код_тов, НАИМ тов, ТЕК..ЗАПАС, НОРМ ЗАПАС
Подчиненные формы С Связанные формы
Отмена
< Назад
Далее >
Готово
Рис. 5.22. Выбор варианта включения подчиненной формы Поскольку таблица-источник СКЛАД основной части формы в данном случае является главной по отношению к другой таблице, тоже выбранной для формы, в окне Создание форм (Form Wizard) можно выбрать один из двух возможных типов подключения формы: П для непосредственного включения подчиненной формы надо выбрать переключатель Подчиненные формы (Form with subform(s)); О для включения кнопки, вызывающей связанную форму, надо выбрать Связанные формы (Linked forms). На рис. 5.22 видно, как отображается распределение полей в основной и подчиненной частях формы при выборе варианта Связанные формы (Linked forms).
Часть I. Основы технологии Microsoft Access
240
Выбираем первый вариант с непосредственным включением подчиненной формы. В следующем диалоговом окне предоставляется возможность выбрать вид ленточный (Tabular) или табличный (Datasheet) (рис. 5.23) для подчиненной формы. При выборе ленточного вида для списка выводимых записей в подчиненной форме названия столбцов (полей) берутся из Подписи, заданной в общих свойствах при конструировании* подчиненной таблицы. Замечание Если таблица-источник основной части формы является подчиненной по отношению к другой таблице, тоже выбранной для формы, то создаваемая многотабличная форма не будет включать подчиненную форму. Однако форма будет содержать отобранные поля из главной таблицы. В окне Создание форм (Form Wizard) автоматически будет установлен тип формы Одиночная форма (Single Form).
Создание форм Выберите внешний вид подчиненной формы: !ленточный f" табличный С сводная таблица Г сводная диаграмма
Отмена
< Назад
Далее >
Готово
Рис. 5.23. Выбор табличного вида для подчиненной формы
В следующем диалоговом окне мастера (рис. 5.24) предоставляется возможность выбрать стиль оформления, который определяет общий вид формы, отображение надписей и значений полей в форме. В последнем диалоговом окне Создание форм (Form Wizard) можно изменить имена основной и подчиненной формы, если был выбран вариант с непосредственным включением подчиненной формы (рис. 5.25), или имя
Глава 5. Формы
241
каждой из связанных форм, если был выбран вариант включения кнопки, вызывающей связанную форму. Создание форм Выберите требуемый стиль.
[Диффузный Международный Наждачная бумага Официальный Промышленный Рисовая бумага Рисунок Суми Стандартный Чертеж
Отмена
< Назад
Далее >
QOTOBO
Рис. 5.24. Выбор оформления для создаваемой формы
В том же окне можно выбирать дальнейшие действия, отметив один из пунктов: Открыть форму для просмотра и ввода данных. (Open the form to view or enter information.) или Изменить макет формы (Modify the form's design). Если был выбран вариант Открыть форму для просмотра и ввода данных (Open the form to view or enter information), после нажатия кнопки Готово (Finish) мастер завершает создание формы и форма автоматически выводи гся на экран (рис. 5.26) с данными из таблиц, на которых она строилась. Сохранение форм производится автоматически. При выборе варианта Изменить макет формы (Modify the form's design) (см. рис. 5.25) форма после завершения работы мастера выводится в режиме конструктора (рис. 5.27), позволяющем произвести нужную доработку. В макете формы размещены выбранные поля из таблиц-источников основной (главной) и подчиненной формы. В процессе доработки формы, используя технику редактирования формы, можно перемещать поля в основной форме, изменять их свойства, в том числе шрифт и размеры, подпись поля, формировать текст в заголовке формы. Аналогичные действия по доработке выполняются для подчиненной формы.
242
Часть I. Основы технологии Microsoft Access Создание форм Задайте имена форм: Форма;
|СКЛДД
Подчиненная форма:
[ЗАПАС подчиненная форма
Указаны все сеедениял необходимые для создания фориы с помощью мастера. Дальнейшие действия: Открыть форму для просмотра и ввода данных, ^ Изменить макет формы.
Г" Вывести справку по работе с формой?
Отмена
< Назад
Готово
Рис. 5.25. Задание имен формы, выбор режима для отображения формы в режиме конструктора и завершение работы мастера
Номер склада
02J
Код фирмы
100
Наименование
Оптовый
Ore. лицо <
Петров АЛ.
Адрес скл, ЗАПАС
. . Код roe. > 002
I Н.1И1.№н->в,»нне тов.
Норм, запас
; РЕЮ 3,5
16 :
0
005
- CD-ROM Panasonic DE
50^
0
006
:
24 .
0
0
0
СканерАсег
•
Запись; И | Ч j j
Т*к. ion.icj
2
> I И j»*-j из 3
Рис. 5.26. Форма, открытая для просмотра и ввода данных
Глава 5. Формы
243
Ъ СКЛАД; форма
и 1
г 3
• i •
£
Номер склада
КОД_Ф
Наименование
НАИМ_СК
Ore. лицо
ОТВ_ЛИЦО
ПОД -JHH8HH
':
.. - -'. (;-,-• ,-- , •
^.-4-.;- -г надп пси полей ;= '. табл ЗАПАС
6
имен э полей : " табл ЗАПАС —
L:
' 1 '
7
• 2 •
•з•
'
, :^- .
,«
• + •
1
5 •
ая фо эма
1
• S •
:.'к • 7 •
1
.
' „- •.
— ...
" • , - -,;1
•В • i • 9 •
' 10 • '
[ * Заголовок формы [_
Наименование тов.
Кад тов.
j
.
;
— — **-
• '
АДРЕС С К
5
J
имена полей главной таблицы ', С <ЛДД
НОМ__СКП
Код фирмы
Ддресскя.
• i > 7 • i • : • i • Э • i • 10 • i • 1 • i • 12 • 1 • 13 • i • 14 • i •.*
надписи полей
ЗАПАС 4
. i •
• i • 2 • i • 3 . 1 . 4 - 1 -
* Заголовок формы * Область данных
*
код_тов
Область
ндим_тое
Тек. 1лпа*| Норм, i.ni,K I [ данные ТЕК_ЗАПАС
—
*%
НОРМ_ЗАПАС-,|
| * Примечание формы 1_
Ч
И -• ' '
•^Примечание формь
^щ i-.---^--i'>', -\-/-' тл&шш ••--. !
1
Л. "••-.'-
i
Рис. 5.27. Форма в режиме конструктора после завершения работы мастера
Следует отмстить исключительную простоту и универсальность всех действий по изменению размеров, перемещению любого элемента, редактированию подписей и аналогичных действий. На этапе доработки можно выполнить и более сложные действия по редактированию формы и настроить составную форму в соответствии с любыми требованиями к интерфейсу пользователя. Далее более подробно рассмотрены возможности конструктора форм (Form Design) при создании и редактировании форм.
Создание и редактирование многотабличной формы в режиме конструктора Средствами конструктора форм (Form Design) можно создавать многотабличныс формы и редактировать уже существующие. При создании и редактировании формы могут производиться: добавление новых полей и надписей, включение полей со списком, создание кнопок, добавление подчиненных форм, внедрение объектов из других приложений, например, рисунков, диаграмм и т. д. изменение расположения отдельных полей, их отображения и подписей. При редактировании могут быть выполнены любые изменения 9 Зав. S35
Часть I. Основы технологии Microsoft Access
244
имеющихся элементов, их свойств, удаление элементов, добавление новых элементов.
Создание новой формы конструктором Конструирование формы начинается после выбора объекта Формы (Forms) в окне База данных (Database) (см. рис. 5.1) и нажатия кнопки Создать (New), которое вызывает окно Новая форма (New Form). В этом диалоговом окне нужно выбрать режим создания формы — Конструктор (Design View). В качестве базового источника данных формы можно выбрать из списка нужную таблицу (запрос) (см. рис. 5.2). Вызов конструктора может быть осуществлен из окна базы данных также активизацией значка Создание формы в режиме конструктора (Create form in Design view), позволяющего открыть сразу окно конструктора форм с именем формы по умолчанию— Форма! (Forml). Далее для выбора базового источника'необходимо выделить форму, дважды щелкнув мышкой на области выделения формы (см. рис. 5.4). Затем по команде меню Вид|Свойства или по контекстному меню нужно вызвать окно свойств формы (рис. 5.28). На вкладке Данные (Data) в окне свойств требуется выбрать в строке Источник записей нужную таблицу и закрыть окно свойств. вызов списка объектов для выбора базового источника
кнопка вызова построителя
Форма Макет Данные | События ] Другие | Все Источник записей СКЛАД ДОГОВОР Фильтр НАКЛАДНАЯ Порядок сортировки ОТГРУЗКА Применение фильтров ЗАПАС Разрешить изменение ПОКУПАТЕЛЬ Разрешить удаление 'СТАВКА _ППАН Разрешить добавление Ввод, данных Тип набора записей Блокировка записей Отсутствует Загрузить значения по умолчанию . Да
Рис. 5.28. Выбор источника записей для формы
Глава 5. Формы
245
Пример окна конструктора формы при выборе таблицы СКЛА,Ц в качестве источника записей приведен на рис. 5.29. В соответствии с выбранным источником на экране отображается список полей этого источника. Форма 1 : форма 1
!
Область данных
э • i • ш ЛП
СКЛАД . I X
список источника записей
ном_скл КОД_Ф НАИМ_СК отв_пицо АДРЕС_СК
Рис. 5.29. Окно конструктора форм при создании новой формы и выбранном источнике
Замечание Все элементы, добавляемые в форму, являются элементами управления. Примерами разных элементов управления являются поля, надписи, списки, переключатели, кнопки и линии. Способ создания элемента управления зависит от того, какой элемент создается: присоединенный, свободный или вычисляемый.
Включение полей в форму Если список полей источника не отображен на экране, выполняется команда меню Вид|Спнсок полей (View|Field List) или нажимается кнопка Список полей (Field List) на панели Конструктор форм (Form Design) (см. рис. 5.7). .
Замечание
Список полей доступен только в режиме конструктора при выбранном источнике.
Поле можно перетаскивать из списка полей в нужное место формы с помощью курсора мыши. При этом размещается поле и связанная с ним подпись. В самом поле будет отображено имя поля источника (таблицы или запроса). Если источником выбрана таблица, то в качестве подписи будет использовано значение свойства поля Подпись (Caption), которое было определено при конструировании таблицы. Добавление в форму поля, первоначачьно не связанного с источником, может быть выполнено с помощью кнопок панели элементов (см. рис. 5.5)
Часть I. Основы технологии Microsoft Access
246
Поле (Text Box) или Поле со списком (Combo Box). Для включения такого поля надо нажать кнопку Поле (Text Box) на панели элементов и вычертить в форме поле нужного размера. В рамке поля, которое создается как несвязанный элемент, указан тип — Свободный (Unbound):
ПолеО: •
^Свободный
.
Далее можно установить связь созданного элемента с полем таблицыисточника формы. Для установления связи создаваемого поля формы с полем источника формы надо выделить созданное поле в форме и вызвать окно его свойств (рис. 5.30). В этом окне на вкладке Данные (Data) в строке Данные (ControlSource) следует, выбрать нужное поле из списка доступных полей источника и закрыть окно свойств. вызов списка полей базового источника
Макет
Данные
События I Другие
Данные Маска ввода , Значение по умолчанию , .. Условие на значение Сообщение об ошибке Доступ Применение звтофильтра Смарт-теги
ЮМ..СКЛ НОИ СКЛ КОД_Ф НАИМ_СК
отв_лицо ДДРЕС_СК
Нет Параметр базы даннь
Рис. 5.30. Выбор поля таблицы для связи с полем формы
Использование запроса в качестве источника записей формы
Для включения в форму полей из взаимосвязанных записей базы данных должен быть построен и выбран запрос, в котором объединяются записи соответствующих таблиц. Такой запрос может быть создан ранее. Запросы наряду с таблицами базы доступны в списке, вызываемом в строке Источник записей в окне свойств формы (см. рис. 5.28). При отсутствии нужного запроса можно его создать с помощью построителя, который вызывается нажатием кнопки, появляющейся при установке курсора за названной строкой.
Замечание Если в форме в качестве источника записей была определена одна таблица, то для добавления полей из другой таблицы также нужно воспользоваться построителем.
Глава 5. Формы
247
На рис. 5.31 показан пример запроса, созданного в окне построителя АЛЯ включения в форму данных о тоиаре и складе, на котором он хранится. £ Инструкция SQL : построитель запросов
['«. ЦЩ^!
я<:;<'.4,й!| л
•A
ИОМ_ОСЛ
|код_Ф
|':код_тов
\
НАИМ_СК ^ ОТВ_ПИЦО
v
!|НАИМ_ТОВ
•— код_.:к ITEK ЗАПАС v 1
V
<
> Поле: Имя таблицы;
^ЗЦЯШ
' НАМИ ТОБ
ЗАПАС
Сортировка: Вывод на экран: Условие отбора: или:
НАИМ СК
ЗАПАС
В
СКЛАД
Н
ОТБ ЛИЦО СКЛАД
И
И
ч*
< • -i
>
Р^ис. 5.31. Пример запроса, созданного построителем для источника многотабличной формы
Н SELECT3AnAC.KOft_TOB,3AnAC.HAMM_Ttffl,CKflftn.HAMM_CK,CKflA. НАИМ_ТОВ НАИМ_СК ОТ8_ЛИЦО
# Область данных ... JCo, тов.:
Найме новани
ШКОЛ
^"У" '
тов.:
|ко д_тов
1
i
Наимен звание;
!
[НА ИМ_ТОЕ " ~'~Т~'
$%ддИ&ЯНЯ
[-1АИМ_С
[Отв. лицо
I
ОТВ^ЛИЦО
I
Рис. 5.32. Пример формы в режиме конструктора с полями из связанных таблиц БД
Таким образом, в данном случае в качестве источника записи формы определен запрос. Список доступных полей для их переноса в форму можно вы-
248
Часть I. Основы технологии Microsoft Access
звать командой Вид|Список полей. В этом случае в заголовке окна доступных полей содержится запрос-источи и к на SQL (рис. 5.32). Из списка их можно перенести в область данных формы. Соответствующая многотабличная форма в режиме конструктора после включения полей запроса показана на том же рисунке. Для любого размещенного в форме элемента можно произвести необходимое редактирование. (Возможности редактирования были рассмотрены подробно в разд. "Редактирование однотабличной формы" данной главы.)
Добавление подчиненной формы и ее редактирование В любую форму, в том числе однотабличную, можно добавить подчиненную форму. При этом можно использовать ранее созданную форму или сконструировать ее в процессе построения многотабличной формы. Можно также начать создание подчиненной формы, если перетащить из окна базы данных в область данных основной формы таблицу, являющуюся источником записей подчиненной формы. Встраивание подчиненной формы, построенной на основе главной таблицы относительно источника основной формы Для встраивания подчиненной формы в режиме конструктора без помощи мастера необходимо нажать на панели элементов (см. рис. 5.5) кнопку Подчиненная форма/отчет (Subform/Subreport). Кнопка Мастера (Control Wizards) панели элементов не должна быть включена. Затем нужно установить курсор на место размещения подчиненной формы, нажать кнопку мыши и, не отпуская ее, растянуть курсором рамку до нужного размера. Первоначально рамка подчиненной формы отображается в форме под именем Внедренный А' (ChildTV), внутри рамки записано Свободный (Unbound). Ниже приведен пример такой формы (рис. 5.33), основным источником которой выбрана таблица ДОГОВОР. В режиме конструктора в качестве подчиненной формы может быть взята форма, построенная не только на основе подчиненной таблицы относительно источника основной формы, но и на основе главной таблицы. В последнем случае, очевидно, для одной записи основной формы будут всегда отображаться данные только из одной связанной записи главной таблицы. В приведенном примере (см. рис. 5.33) установим связь свободного элемента подчиненной формы с ранее созданной формой для таблицы ПОКУПАТЕЛЬ, главной по отношению к таблице ДОГОВОР — источнику основной формы. Для этого выделим внедренный объект и выберем пункт меню Внд|Свойства (View Properties). В окне свойств (рис. 5.34) Подчиненная форма/отчет (Subform/Subreport) надо перейти на вкладку Данные (Data).
Глава 5. Формы
249
вЯ 0
• Ш ДОГОВОР : форма !
.
3
Мм!
• р • 1 • i • 2 • I • 3 ' i ' 4 • i • 5 • i • 6 • I • 7 • i • 3 • i > 3 • i • 10 •
1
11 Jtl
* Заголовок формы [
дог О вс>р ы
•* Область данных Ноэиг до гол ора
[номлог
Дата
JWTAJ401 |
КадяDKVJiai вля iB недр М1НЫЖ ' -вободный
_Y^__ iL
""|код_пок™"
„,
__
-
J
4
5
4 1
'
_J
. ' .:...' ... ' i
:
Рис. 5.33. Создание элемента для включения подчиненной формы
ИГ Подчиненная форма/отчет: ВнедрвнныйЗ Внедренный^ Макет Данные J События | Другие | Все Объект-источник ПОКУПАТЕЛЬ Подчиненные поля КОД_ПОК Основные поля КОД_ПОК Доступ Да Блокировка Нет
Рис. 5.34. Окно для задания свойств подчиненной формы (выбор существующей формы в качестве подчиненной и поля связи)
В строке Объект -источник (Source Object) надо выбрать из списка имен форм, существующих в базе данных, ту форму, которая будет подчиненной. В данном примере — форму ПОКУПАТЕЛЬ. После этого в рамке подчиненной формы отобразится выбранная форма в режиме конструктора. Связь между основной и подчиненной формой устанавливается автоматически (подчиненные поля — основные поля), если ранее в схеме данных БД была определена связь таблиц, соответствующих формам. Если связи между таблицами не определены, необходимо выполнить действия по установке связи. В окне свойств (см. рис. 5.34) в строках Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields) требуется ввести имена полей,
Часть I. Основы технологии Microsoft Access
250
по которым связываются таблицы. В рассмотренном примере связь должна осуществляться по коду покупателя (код_пок). Форма в режиме просмотра показана на рис. 5.35.
ДОГОВОРЫ Новкр договора. Дата
1J 1111 . [ШЙ .2003]
Код покупатели
:
ГЮ01
I
В^шдреикбоШ: ПОКУПАТЕЛЬ >
1ПШ
j 7709575511 11
Aj^ec
|Витебская. 12
I [
Нажпеиованпе Телефон
Номераеч.счета Запись: H| jj j|
всего записей договоров
Г
Компьютер меркет (61 2)345- 2345 |
[763Й50976326')536567 |
» |Н|>* из 1
* j
j
\
для каждой записи договора (из подчиненной таблицы) отображается только одна запись покупателя (из главной таблицы)
Рис. 5.35. Форма с отображением в подчиненной форме справочных данных (о покупателе) из главной таблицы
Использование мастера для включения подчиненной формы В процессе конструирования многотабличной формы для включения подчиненной формы можно использовать мастер, который позволяет не только включить существующую, но и создать нужную подчиненную форму. Рассмотрим включение подчиненной формы в форму, построенную для таблицы СКЛАД. Для того чтобы при нажатии на панели элементов кнопки Подчиненная форма/отчет (Subform/Subreport) запускался мастер, необходимо предварительно на этой панели (см. рис. 5.5) нажать кнопку Мастера (Control Wizards). В диалоговом окне мастера (рис. 5.36) можно выбрать таблицу (или запрос), на основе которой должна быть создана подчиненная форма, или существующую форму и далее указать поля связи с подчиненной формой (рис. 5.37). В данном примере выбрана ранее созданная ленточная многозаписевая форма ОТГРУЗКА, построенная на основе одноименной таблицы.
Глава 5. Формы
251
Мастер подчиненных форм Создать подчиненную форму или подчиненный отчет можно • либо из имеющейся формы, либо на основе таблиц и запросов.
Какие данные необходимо включить в подчиненную форму или подчиненный отчет? f" Имеющиеся таблицы и запросы <* {Имеющиеся формы ДОГОВОР ЗАПАС подчиненная форма ПОКУПАТЕЛЬ ПОСТАВКА_ПЛАН СКЛАД СПРАВОЧНИК ТОВАРОВ ТОВАР
Отмена
Далее >
Готово
Рис. 5.36. Окно мастера для включения формы в качестве подчиненной
Мастер подчиненных форм -.
Самостоят ельноопредепитепс ля связи между главной и рите их из списка,
юстоятельное определение Поля подчиненной формы или отчета:
Поля формы или отчета:
•
|ном_скл| 1
1
_2- |код_ск
_J
JLJI
JlJ
''ОТГРУЗКА' для каждой записи СКЛАД', поле связи 'НОН.СКЛ'
Отмена
< Назад
Далее >
QOTOBO
Рис. 5.37. Окно мастера для определения поля связи с подчиненной формой
Часть I. Основы технологии Microsoft Access
252
Форма в режиме конструктора, полученная после включения подчиненной формы мастером, приведена на рис. 5.38.
ВошЕО
Ш СКЛАД ОТГРУЗКИ : форма
р
• i • 1 •
• 2 '
i • 3 •
. . .5 .
i
, - 6 . . .7. . ' 6 . . . 3 .
• 10 • i • 11 • i • 12 • i ' 13 • i • И • i
* Заголовок формы
С) 1 !
э у з К И Т О B A I^ О Е
.
ИD
С К Л ,\ Д / VM
•
j 1 г • 4
* Область данных
ном_скл | •
роме i и Л. да 1, ,
НАИМ_СК
'Адре с скл.
|АДРЕС_СК
атгру 3KAI • 1 •
1
1
3 j Т j
.
i • 3 • , • * • , • 5 • , • 6 • . • 7 • i • ) • i • 9 • i • 10 • i • 11 • i • 12^
^Заголовок формы
|шд"'|смГ~
~~[
|ГКОЛ|ОТГР
~ "Йумм4'"отгИ*'
•С Область данных
•
|код_тов
-]|КОП_ОТГР
|СУММА_ОТГР
|
* Причечание формы
•
zJ
Рис. 5.38. Форма в режиме конструктора после включения подчиненной формы мастером
Использование метода "Drag-and-Drop" (перетащить и отпустить) Особым способом включения подчиненной формы является использование метода "Drag-and-Drop" (перетащить и отпустить). Таким образом можно перетащить в форму из окна базы данных готовую подчиненную форму или таблицу, для которой нужно создать подчиненную форму. Во втором случае для создания подчиненной формы подключается мастер. В результате встраивается рамка подчиненной формы и запускается мастер построения подчиненной формы. Мастер предлагает в качестве поля для связи форм внешний ключ подчиненной таблицы и автоматически создает многозаписевую форму. Управление дизайном формы через свойства Для получения интерфейса, удобного пользователю для работы с базой данных, необходимо использовать режим конструктора. Для внесения изменений в общий вид основной или подчиненной формы можно использовать общие свойства соответствующей формы. Для перехода к просмотру и редактирова-
Глава 5. Формы
253
нию свойств формы (рис. 5.39) можно установить курсор в области выделения формы (при установленной опции Вид/линейка), вызвать контекстное меню, нажав правую кнопку мыши, и выбрать Свойства (Properties). В том случае, если подчиненная форма строится на базе подчиненной таблицы относительно таблицы-источника основной формы, в окне свойств подчиненной формы требуется выбрать нужный вариант отображения данных подчиненной формы в свойстве Режим по умолчанию (Default View). Для получения многострочного отображения записей в подчиненной форме с подписями полей в названии столбцов нужно выбрать режим Ленточные формы (рис. 5.39). При этом режиме для того, чтобы подписи полей в каждой записи не повторялись, необходимо размещать подписи в области заголовка формы. В Access 2003, в отличие от предыдущих версий, после работы мастера подписи полей в подчиненной форме сразу размещены в области заголовка.
Форма Макет
j данные ] События j Другие |
Подпись Режим по умолчанию Режим формы . Режим таблицы Режим сводной таблицы
Все
ОТГРУЗКА ДЙДВИЯДЯ
Рис. 5.39. Окно общих свойств подчиненной формы
Для улучшения дизайна формы можно убрать область маркировки (слева), полосу прокрутки, поле нумерации записей, тип границы. Например, можно удалить линии, разделяющие области заголовка, данных и примечаний. Для этого достаточно установить значение Нет (No) для свойства формы Разделительные линии (Dividing Lines) на вкладке Макет (Format). Для.выбора или отключения полосы прокрутки формы устанавливается соответствующее значение свойства Полосы прокрутки (Scroll Bars).
Вычисления в форме Вычисления в форме могут осуществляться как в каждой записи формы, так и в группе записей при формировании итоговых величин. Расчетные величины отображаются в форме. Для сохранения результатов в таблице базы данных требуется подготовка макроса или процедуры на VBA (Visual Basic for Application). Примеры макроса и процедуры, обеспечивающие обновление поля в базе данных при вычислениях в форме, будут рассмотрены далее (см. главы 14 и 15).
Часть I. Основы технологии Microsoft Access
254
Вычисления в каждой записи формы Чтобы произвести вычисления на основе данных в каждой записи, в форме необходимо создать вычисляемый элемент управления, и который записывается выражение для расчета. При создании вычисляемого элемента управления надо открыть форму в режиме конструктора и сначала, нажав на панели элементов кнопку Поле (Text Box), разместить этот свободный элемент управления в нужном месте области данных. Затем в элемент управлении Свободный вводится выражение. Выражение должно начинаться со знака равенства -- "=". В качестве операндов выражения чаще всего используются имена полей и константы, а в качестве операторов — знаки арифметических операций. ПРИМЕР, Создадим мастером одиночную форму с именем " М И Н И М А Л Ь Н А Я ПАРТИЯ ТОВАРА" на основе таблиц ПССТАВКА_ПЛАН и ТОВАР. В форме надо подсчитать сумму минимальной поставки каждого поставляемого товара по договору, создав вычисляемый элемент управления с использованием полей формы мин_пост и ЦЕНА. Сначала создается новое поле - свободный элемент управления. В него надо записать выражение: - [ЦЕНА; - [ мин_пост] . Выражение может быть введено в окне свойств созданного элемента управления (рис. 5.40) на вкладке Данные (Data) в строку Данные (ControlSource).
Попе'Э
Макет
Данные
[события
Данные Маска ввода Значение по умолчанию Условие на значение Сообщение об ошибке Доступ Блокировка . . " . , . Применение автофилыра . , , , Смарт-теги
Другие ]
Все
, . =[ММН_ЛОСТ]*ЕЦЕНА]
Да Нет Параметр базы данных
Рис. 5.40. Окно свойств поля, создаваемого для вычислений
Можно воспользоваться построителем выражений, применив появляющуюся кнопку Построить сразу за "строкой свойства Данные (ControlSource). При формировании выражения в левой панели построителя (рис. 5.41) в группе Forms надо отметить созданную форму. МИНИМАЛЬНАЯ ПАРТИЯ ТОВАРА, а в средней панели выбрать нужные поля этой формы для выражения. При построении выражения поля не должны выбираться непосредственно из таблиц, составляющих источник записей формы.
Глава 5. Формы
255
ННННВЕШ
Построитель выражении
ок |
[ММН_ПОСТ] * [ЦЕНА] |
j
Отмена I
___J
' +]-J/]*M-|>|<|<>|
And Or | Not j Like | ( | ) |
D МИНИМАЛЬНАЯ ПАРТИЯ ТОВР S3 Таблицы О Запросы £] Forms - И Загруженные формы L- (И Все формы (И Reports (+} Функции СИ Константы CD Операторы С] Общие выражения " ' "
Вставить j
~™'
Справка
Е^ЗЙЗ^ШИИИИИИ л
<Форма> <Список полей> НОМ_ДОГ Надпись НОМ_ДОГ МИН ПОСТ Надпись МИН_ПОСТ НА№1 ТОВ Надпись НАИМ_ТОВ ЛинияЗ НадписьШ Попе9 Заголовок формы Область данных Примечание формы
"
Назад j
.__
.
._........!
AfterUpdate AllowAutoCorrect AutoTab BackCobr BackStyle BeforeUpdate BorderColor Border LineStyle BorderStyle Border Width BottomMargin CanGrow CanShrink CdumnHidden ColumnOrder CoJumnWidth
v ;
^
Рис. 5.41. Окно построителя выражений
Форма в режиме конструктора и режиме просмотра, полученная после создания вычисляемого поля, приведена на рис. 5.42 и 5.43.
Ш МИНИМАЛЬНАЯ ПАРТИЯ ТОВАРА : форма
j :
2
• i • 1 • i • 2 • t • 3 • ! • + • i ' 5 ' i ' 6 ' i ' 7 ' i • в • i • Э • _^.
•* Заголовок формы
—
•* Область данных
[Йог 1. ДОПэвора
!
[нар ненш ание пзвэр-1 ;Цен а
~~]
[Су имз п«1рии постав си :
!
-
НОМ ЛОГ
i
'Мин. пар тия п JtfilBX и] 3
Бы .1 st
(-Г
.
-нАим_тое ЩЕНА i i ]мин_пост
—
j
= [МИН_ППСТ]*[ЦЕНА] )
Рис. 5.42. Форма в режиме конструктора, полученная после создания вычисляемого поля
V
^1
4асгь /. Основы технологии Microsoft Access
256
МИНИМАЛЬНАЯ ПАРТИЯ ТОВАРА Ном. договора
|ДШ
Наименование товара
Монитор 17LG 6 587,00р.
Цена Мин. партия поставки
Запись: . И LjJ Г""
1 >.il.LJHjj из 10
Рис. 5.43. Форма с вычисляемым полем в режиме просмотра
Когда формы основаны на запросе, можно поместить выражение в запрос, а не в вычисляемый элемент управления.
Вычисление итоговых значений Вычисление итоговых значений для записей формы выполняется с помощью встроенных статистических функций, записываемых в качестве выражения в вычисляемых элементах управления. Итоговые значения в однотабличной форме
В однотабличной форме вычисляемый элемент управления, создаваемый для расчета итогового значения по всем записям, нужно размещать в области примечания формы.
Рис. 5.44. Форма в режиме конструктора с расчетным полем для итоговых значений
Глава 5. Формы
257
Например, в форме, в которой источником является таблица ДОГОВОР, можно создать поле для суммирования стоимости договора (СУММА_ДОГ) по всем договорам: - Зшг. ( [СУММА_ДОГ1)
Сначала нужно создать несвязанное поле (ВСЕГО:) в области примечания формы (рис. 5.44), а затем разместить внутри поля приведенное выражение. После перехода в режим просмотра в форме (рис. 5.45) отображается результат расчета. 1
BBS
№ Всего по договорам Номер договора k
Дата Код покупателя
Сумма по договору Jt]
Д111
,06.01.200310001
||
ю.оор. |
Д222
,23.12.2002 П001
||
20,00р,
ДЗЗЗ
|12.12.2002||П002
||
30,00р.
1д<ш
!22,12.2002||ПООЗ
|| ВСЕГО:
Запись: Н |
Г > j И_]>*| MS 5
10,00р. j 90,00р.
d
Рис. 5.45. Форма 6 режиме просмотра с расчетным полем для итоговых значений
Вычисление итогового значения для связанных записей подчиненной формы и вывод его в текущей записи основной формы Основная форма и ее подчиненная форма чаще всего строятся на основе таблиц, между которыми установлена связь типа один-ко-мнопш. При этом в основной форме выводится одна текущая запись, а в подчиненной форме доступны несколько записей, которые подчинены ей. При расчете итогового значения для группы записей подчиненной формы, связанных с текущей записью основной формы, вычисляемое поле может быть отображено в записи основной формы. ПРИМЕР. Пусть в двухтабличной форме, построенной на основе таблиц ДОГОВОР и ПОСТАВКА_ПЛАН, нужно на основе связанных записей подчиненной формы подсчитать сумму поставок по каждому договору. В подчиненной форме ПОСТАВКА_ПЛАН в области примечаний надо создать вычисляемый элемент управления (см рис. 5.46, Поле8) и записать туда выражение, содержащее статистическую функцию для суммирования стоимости постанок из записей ПОСТАВКА ПЛАН: =Summ([СУММА ПОСТ]).
Часть I. Основы технологии Microsoft Access
258
Замечание
i
Элементы управления из области примечаний не отображаются при просмотре подчиненной формы, если в ее свойстве Режим по умолчанию (Default View) установлено значение Таблица (Datasheet).
Для отображения результата в ы ч и с л е н и я в основной части формы создадим там вычисляемый элемент упраштения и запишем туда выражение: г п
= []ЮС : АЯКА_ПЛАН] . [Form] ! [Поле8]
Это выражение, где Forms указывает на объект типа "форма", является ссылкой на созданный вычисляемый элемент управления (Поле8) в подчиненной форме. В общем случае формат ссылки в элементе основной части формы на поле с итоговым значением, которое находится в области примечания подчиненной формы, имеет вид: =[Имя подчиненной формы].[Form]![Имя поля в подчиненной форме]
Ш СУММА ПО ДОГОВОРУ: форма
-[ПОСТАВКА ПЛАН подчиненная форма],fFofmj![Полев
Рис. 5.46. Вычисление итогового значения в подчиненной форме и отображение его в основной форме
В выражении для поля СУММА по ДОГОВОРУ использована ссылка на Поле8 в подчиненной форме. Подробно правила формирования ссылок на элементы управления форм (отчетов) рассмотрены в главе 14, посвященной макросам.
Глава 5. Формы
259
Замечание
>
В статистической функции нельзя использовать имена других вычисляемых элементов управления. При необходимости следует использовать вложенные выражения в статической функции.
Ограничения доступа к данным через форму Защита данных поля от изменений Для защиты данных поля от изменений используется свойство Блокировка (Locked). Блокировка может быть установлена для любого поля формы. Чтобы защитить поле, надо установить курсор в его рамке и с помощью контекстного меню вызвать свойства поля. В окне свойств (рис. 5.47) на вкладке Данные (Daia) в строке Блокировка (Locked) выбрать Да (Yes). После установки этого свойства поле доступно только для чтения. СПоле:НЙИМ_ПОК НАМИ ПОК Макет
Данные
jСобытия
Данные Маска ввода Значение по умолчанию Условие на значение Сообщение об ошибке Доступ Блокировка Применение автофильтра Смарт-теги
Другие | .
Все
НАИМ ПОК
Да Да Параметр базы данны
Рис. 5.47. Установка блокировки в свойствах поля
Замечание По умолчанию для всех элементов управления, кроме свободной рамки объекта, в строке Блокировка (Locked) устанавливается значение Нет (No).
Установка ограничений на корректировку записей через форму Для того чтобы при работе через форму записи были доступны только для чтения, следует в свойствах всей формы на вкладке Данные (Data) (рис. 5.48) в строках Разрешить добавление (Allow Additions), Разрешить удаление (Allow Deletions) и Разрешить изменение (Allow Edits) задать значения
Часть I. Основы технологии Microsoft Access
260
Нет (No). Сделать записи доступными только для чтения можно также, выбрав для свойства Тип набора записей (Recordset Type) значение Статический набор (Snapshot). Указанные свойства могут устанавливаться независимо друг от друга. Например, при запрете на изменение записей может быть разрешено добавление и удаление записей.
Форма Макет
Данные (События
Другие ]
Источник записей , Фильтр Порядок сортировки Применение фильтров Разрешить изменение Разрешить удаление Разрешить добавление Ввод данных , , Тип набора записей Блокировка записей Загрузить значения по умолчанию .
Все
ТОВАР
Да Нет Нет Нет Нет Динамический набор Отсутствует Да
Рис. 5.48. Установка ограничений на корректировку записей
Замечание Свойство формы Блокировка записей (Record Locks) определяет способы блокировки записей (всех записей или изменяемой записи) при обновлении содержимого сетевой базы данных. Это необходимо для защиты данных при попытке двух пользователей одновременно изменить одну и ту же запись. Когда один пользователь изменяет запись, запись автоматически блокируется. При этом другие пользователи не могут изменять эту запись до завершения работы с ней первого пользователя.
Свойство Ввод данных (Data Entry) при значении Да определяет режим открытия формы, в котором разрешен только ввод новых данных, просмотр существующих записей не доступен. При открытии формы будет выводиться только пустая запись, которую можно заполнять.
Защита данных подчиненной формы от изменений В качестве подчиненной, как ранее отмечалось, может использоваться форма, встроенная конструктором на основе главной таблицы, содержащей справочные данные, необходимые только для расшифровки вводимых ключевых полей в таблицу-источи и к основной части формы. В этом случае технология загрузки данных в БД предполагает запретить обновление таких справочных данных через подчиненную форму. Защитить содержимое всех
Глава 5. Формы
261
полей подчиненной формы, сделав его доступным только для чтения, позволяет свойство Блокировка (Locked), установленное для подчиненной формы. Ранее (см. рис. 5.35) был приведен пример такой формы (ДОГОВОР) с подчиненной формой для отображения справочных данных о покупателе. Чтобы защитить данные подчиненной формы от изменений, надо выделить рамку подчиненной формы и вызвать по контекстному меню ее свойства. В окне свойств необходимо выбрать вкладку Данные (Data). В строке Блокировка (Locked) выбрать Да (Yes) (рис. 5.49). При этом элемент управления — подчиненная форма— будет функционировать нормально, но изменение, добавление и удаление данных в его полях не допускаются. ИГ Подчиненная форма/отчет: Внедренными vj
ВнедренныйЗ Макет
Данные ] События
Подчиненные поля
Блокировка ,
|X,
Другие j Все . , ПОКУПАТЕЛЬ
. . код_пок . . . код_пок . . . Да ., Да
„J
Рис. 5.49. Установка параметров защиты данных подчиненной формы Контрольные вопросы
1. Может ли форма, созданная мастером, содержать данные из нескольких таблиц? 2. Какой режим позволяет создавать форму на основе только одной таблицы? 3. Какая панель инструментов активизируется при открытии формы? 4. Откуда выбирается текст при автоматическом формировании подписи поля в форме? 5. Какие панели инструментов используются при конструировании формы? 6. Сохраняет ли в форме элемент управления Поле свойства Поле со списком (List Box) и Список (Combo Box), заданные при конструировании таблицы?
262
Часть I. Основы технологии Microsoft Access
7. Для чего предназначена панель элементов конструктора форм? 8. Как в режиме конструктора вызвать список доступных в форме полей? 9. Где содержится указание на источник записей формы? 10. Где размещена кнопка, по которой создается элемент управления Надпись (Label)? 1 1 . По какой команде меню просматриваются свойства элемента управления? 12. Какая кнопка позволяет переключаться из режима конструктора в режим формы и обратно? 13. Можно ли в форме с помощью кнопок перехода по записям сделать текущей новую запись? 14. Может ли мастер построить форму на основе несвязанных таблиц? 15. Может ли многотабличная форма не иметь подчиненных форм? 16. Может ли форма включать несколько подчиненных форм? 17. Должны ли таблицы, используемые при создании формы мастером, иметь непосредственную связь? 18. Какие варианты формы предлагает построить мастер по умолчанию, если выбраны поля одной главной и одной подчиненной таблицы? 19. Какие записи подчиненной таблицы отображаются в подчиненной части формы? 20. Какой внешний вид подчиненной формы нужно выбрать, чтобы в ней выводились подписи полей, определенные в свойствах таблиц? 21. Какую форму строит мастер при выборе внешнего вида одиночной формы В один столбец (Columnar)? 22. Что указывает мастер в качестве источника записей в форме, содержащей поля нескольких взаимосвязанных таблиц? 23. Как просмотреть соответствующий многотабличной форме запрос в режиме конструктора? 24. Можно ли, изменив инструкцию SQL или запрос в режиме конструктора. Повлиять на состав доступных в форме полей? 25. Может ли мастер построить форму на основе ранее созданного запроса? 26. В каком случае при создании кнопки не подключается мастер? 27. Можно ли изменить вид кнопки после завершения работы мастера? 28. Какой элемент управления позволяет создать вычисляемое поле в форме? 29. С какого знака начинается выражение, записываемое в вычисляемое поле?
Глава 5. Формы
263
30. Как вызвать построитель для формирования выражения в вычисляемом поле? 31. В какой части формы размещается вычисляемое поле для расчета итогового значения для подчиненной формы? 32. Можно ли использовать имя другого вычисляемого элемента управления в аргументе функции sum при расчете итогового значения? 33. Как отобразить итоговое значение, рассчитанное в подчиненной форме, в главной? 34. Какой формат имеет ссылка на вычисляемое поле в подчиненной форме? 35. Сохраняется ли значение вычисляемого поля в таблице? 36. Что может служить источником записей формы? 37. Как создается многотабличный источник записей? 38. Как сформировать в качестве источника записей формы инструкцию SQL с помощью конструктора запросов? 39. Где сохраняется инструкция SQL, используемая в качестве источника записей формы? 40. Какие поля входят в список доступных в форме полей? 41. В каком элементе управления размещается подчиненная форма? 42. В каких свойствах указываются поля связи основной и подчиненной форм? 43. В каком режиме должна быть открыта форма, в которую путем перетаскивания включается подчиненная форма? 44. На основе каких объектов мастер может создать подчиненную форму? 45. Может ли главная таблица использоваться для создания подчиненной формы? 46. Какая кнопка обусловливает подключение мастера к созданию подчиненной формы? 47. Что нужно сделать, если не работает связь основной и подчиненной форм? 48. Должны ли поля, по которым устанавливается связь между основной и подчиненной формами, иметь одинаковые имена? 49. Может ли связь между основной и подчиненной формами устанавливаться по нескольким полям? 50. Можно ли путем перетаскивания таблицы из окна базы данных в форму создать и ней подчиненную форму?
264
Часть I. Основы технологии Microsoft Access
Ответы
1. Да. 2. Автоформа (AutoForm).
3. Режим формы (Form View). 4. Из соответствующего свойства поля, заданного при определении структуры таблицы. 5. Конструктор форм (Form Design), Панель элементов (Toolbox) и панель форматирования Формат (форма/отчет) (Formatting (Form/Report)). 6. Да.
7. Для создания в форме полей таблиц и других элементов управления. 8. По кнопке Список полей (Field List) на панели инструментов конструктора форм (Form Design). 9. В свойствах формы на вкладке Данные (Data) в строке Источник записей. 10. На панели элементов (Toolbox). 11. Вид|Свойства (ViewjProperties). 12. Кнопка Вид (View) на панели конструктора форм (Form Design). 13. Да. 14. Нет. 15. Да. 16. Да.
17. Нет. 18. С явным включением подчиненной формы или с кнопкой для вызова подчиненной формы. 19. Связанные с записью главной таблицы, отображаемой в основной части формы. 20. Ленточный (Tabular). 21. Однозаписевую. 22. Инструкцию SQL. 23. Вызвав построитель запросов, нажав кнопку в конце строки Источник записей в окне свойств формы.
24. Да. 25. Да. 26. Если предварительно на панели элементов (Toolbox) не нажата кнопка Мастер элементов (Control Wizards).
27. Да.
Глава 5 Формы
265
28. Элемент управления Поле (Text Box), создаваемый по соответствующей кнопке на панели элементов. 29. Со знака равенства (=). 30. Открыть свойства поля и на вкладке Данные кнопкой Данные вызвать построитель выражений. 31. В области примечания подчиненной формы.
32. Нет. 33. Создать новое вычисляемое поле в главной части формы и разместить в нем ссылку на вычисляемое поле в подчиненной форме. 34. =[Имя подчиненной формы].[Form]![Имя вычисляемого поля в подчиненной форме].
35. Нет. 36. Ранее созданная таблица, запрос или инструкция SQL, формируемая в строке Источник записей. 37. С помощью запроса или инструкции SELECT на языке SQL. 38. Вызвать построитель в строке Источник записей в свойствах формы. 39. Сохраняется в форме и, в отличие от базового запроса, не отображается в окне базы данных. 40. Все поля таблицы или запроса или инструкции SQL, выбранной в качестве источника записей формы. 41. Подчиненная форма/отчет (Subform/ Subreport). 42. В свойствах элемента управления Подчиненная форма/отчет (Subform/ Subreport): Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields). 43. В режиме конструктора. 44. Форма, таблица, запрос. 45. Да.
46. Кнопка Мастера (Control Wizards) на панели элементов. 47. Установить правильные значения в свойствах элемента управления Подчиненная форма/отчет (Subform/ Subreport): Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields).
48. Нет. 49. Да. 50. Да, если установлен мастер подчиненных форм.
Глава 6
Разработка интерфейса для ввода, просмотра и корректировки данных документов Формы являются удобным средством создания интерфейса для ввода и корректировки данных документов. Инструментами конструирования могут быть созданы электронные аналоги документов, обеспечен просмотр и выборка документов, данные которых введены в базу. Формы используются в процессе оформления документов на компьютере, например, договоров, накладных на получение и отпуск товара, счетов на оплату, платежных поручений и т. д. Такой процесс подготовки и ввода документов, как правило, сопровождается последующей распечаткой документа с помощью отчетов. Конструирование форм предоставляет широкие возможности по созданию любого графического диалогового интерфейса пользователя для работы с базой данных. Такой интерфейс является основой работы с базой данных практического приложения пользователя. Как правило, после окончательного создания приложения пользователь не работает непосредственно с таблицами базы данных. Разработчик приложения нередко полностью или частично ограничивает непосредственный доступ пользователя к таблицам. При конструировании интерфейса пользователя необходима обработка событий, инициируемых пользователем или происходящих в процессе работы с формой. Типовые процедуры обработки событий формируются автоматически при создании элементов формы. Такими элементами, например, являются, графические кнопки, с которыми могут связываться события таких категорий, как: О переходы по записям источника формы, обработка записей (добавление, удаление, печать, восстановление); О работа с формой (закрытие, открытие, изменение фильтра, обновление данных, печать формы);
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
267
П работа с отчетом (печать, просмотр, отправка, вывод в файл); П работа с приложением (запуск приложения, выход из приложения, запуск Word, Excel, Блокнота и т. п.); П запуск запроса, макроса, печать таблицы, набор телефонного номера; П переходы по гиперссылке к разным объектам Access, к сайтам в Интернете. Пользователь может сам программировать макросы и процедуры VBA для обработки различных событий, происходящих при работе в форме. Для формы и ее элементов управления определен набор типовых событий, для которых могут быть разработаны процедуры обработки события.
Технология загрузки базы данных из документов При работе с базой данных, которая состоит из нормализованных таблиц, связанных одно-многозначными отношениями с заданными параметрами поддержания целостности, создаются экранные формы, которые обеспечивают корректный ввод взаимосвязанных данных. Макет таких форм целесообразно делать адекватным формам первичных документов-источников данных для загрузки справочных, плановых и оперативных учетных данных. При этом работа пользователя становится более комфортной и обеспечивается важнейший аспект технологии работы с базой данных — однократный ввод данных. Такие формы позволят в любой момент просмотреть содержимое уже введенных документов. Ранее в книге (см. главу 3) рассматривался первый этап процесса создания базы данных, в результате которого были выполнены следующие действия: определена структура таблиц, созданы пустые таблицы и показаны возможности, ввода данных непосредственно в таблицы. Технология создания целостной базы, в которой между таблицами установлены связи и определены параметры поддержания целостности, предполагает упорядочение загрузки взаимосвязанных таблиц для обеспечения пользователя удобным интерфейсом. Такая технология может строиться на использовании соответствующих экранных форм ввода/вывода. Прежде чем отображать, вводить или корректировать данные таблиц через экранную форму, необходимо спроектировать и сконструировать ее. Далее рассматриваются основы проектирования форм для построения удобного интерфейса пользователя, подробно описана технология разработки формм, обеспечивающей первоначальную загрузку и обновление базы данных. Основные этапы работ от разработки технологии загрузки целостной базы данных до создания интерфейса и ввода данных в базу через формы иллюстрирует схема на рис. 6.1.
Часть I. Основы технологии Microsoft Access
268
Документыисточники Схема I данных I
Определение этапов загрузки БД, подсхем данных и макетов форм
Подсхемы данных для этапов загрузки
Экранные формы ввода/вывода
Взаимосвязанные заполненные таблицы БД
Рис. 6.1. Основные этапы разработки форм и загрузки базы данных
Перед конструированием таких форм в Access необходимо на этапе проектирования выполнить подготовительную работу по определению последовательности загрузки таблиц базы данных, в которой поддерживается связная целостность. Это позволяет получить интерфейс, обеспечивающий корректный ввод взаимосвязанных и непротиворечивых данных при создании и корректировке базы.
Последовательность загрузки данных При разработке форм, обеспечивающих загрузку взаимосвязанных таблиц базы данных, следует иметь в виду требования к последовательности загрузки записей в таблицы в соответствии со схемой данных, в которой установлены параметры поддержания целостности. Эти требования можно сформулировать следующим образом: П независимо могут создаваться записи таблиц, которые не подчинены каким-либо другим таблицам в схеме данных; П запись таблицы, подчиненной каким-либо другим таблицам, может создаваться при наличии связанных с ней записей в главных таблицах; записи главной таблицы должны быть либо загружены ранее (таблицы справочных данных), либо созданы в одной форме вместе с подчиненной записью.
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки.
269
В соответствии с этими требованиями можно рекомендовать в практических приложениях предусматривать сначала загрузку в базу данных справочных данных, а затем данных плановых и оперативно учетных документов. Это связано с тем, что таблицы с плановыми и оперативно-учетными данными в схеме данных являются подчиненными по отношению к таблицам справочных данных, которые, как правило, находятся на верхнем уровне. Таким образом, перед конструированием форм для загрузки базы данных необходимо определить этапы загрузки базы данных.
Разработка технологии загрузки базы данных В процессе разработки технологии загрузки базы данных и проектирования форм целесообразно выполнить приведенную ниже последовательность действий: 1. Определение перечня документов-источников, содержащих необходимые данные для загрузки таблиц базы данных. 2. Определение таблиц — источника.
объектов загрузки для
каждого документа-
3. Определение содержания и последовательности этапов загрузки. 4. Определение подсхемы данных формы (фрагмент схемы данных), состоящей из таблиц, необходимых для построения формы. При этом, как правило, выполняются следующие условия: • для многотабличной (составной) формы выбирается таблица, которая будет базовым источником записей основной части этой формы, и таблицы для отображения справочных данных в этой части формы; • выбираются таблицы, которые будут источником записей подчиненной формы, включаемой в составную форму, и таблицы для отображения справочных данных в подчиненной форме. 5. Определение макета формы, т, е. ее общей структуры, в соответствии со структурой документа-источника и полученной подсхемой данных. При этом пространство формы распределяется для размещения включаемых подчиненных форм. Змечание Если подчиненная форма, в свою очередь, имеет включаемую (подчиненную 2-го уровня) форму, для нее выполняется такая же работа, как для любой составной формы.
270
Часть I. Основы технологии Microsoft Access
6. Определение состава и размещение элементов, связанных с полями таблиц и надписей для каждой из частей составной формы. При этом: • ключевые поля таблицы-источника основной части составной формы нужно вводить в основную часть формы (например, идентификатор документа, идентификатор предприятия, дату и т. п.); • нужно предусмотреть в подчиненной форме только те ключевые поля таблицы— базового источника подчиненной формы, которых нет в таблице-источнике основной части (например, код товара из спецификации документа "Договор"). После выполнения перечисленных пунктов и получения проекта формы можно приступить к конструированию формы средствами Access. Рассмотрим технологию загрузки на примере базы данных "Поставка товаров", в которой связи между таблицами соответствуют схеме данных, приведенной на рис. 2.19 (см. главу 2). Документы — источники загрузки этой базы данных названы при описании предметной области в главе 2, Пример заполненных документов-источников приведен в Приложении 2. Определим объекты загрузки- полмножества взаимосвязанных таблиц, подлежащих загрузке из каждого документа: 3 таблица ТОВАР. Загрузка этой таблицы производится из документа "Справочник товаров", содержащею перечень товаров, поставляемых фирмой; О таблица СКЛАД. Загрузка этой таблицы производится из документа "Справочник складов фирмы", содержащего перечень складов фирмы; П таблица ПОКУПАТЕЛЬ. Загрузка этой таблицы производится из документа "Справочник покупателей фирмы", содержащего перечень покупателей; G таблицы ДОГОВОР и ПОСТАВкд_плАН. Загрузка записей этих таблиц будет производиться одновременно из документа "Договор", что обеспечит формирование взаимосвязей записей обеих таблиц в процессе загрузки. При этом будет обеспечен однократный ввод общих реквизитов договора и однократный ввод значений идентификатора договора — ном_дог для всех товаров документа; О таблицы НАКЛАДНАЯ и ОТГРУЗКА. Загрузка записей этих таблиц будет производиться одновременно из документа "Накладная", что обеспечит формирование взаимосвязей записей обеих таблиц в процессе загрузки. При этом будет обеспечен однократный ввод общих реквизитов накладной и значений идентификаторов накладной — НОМ_НАКЛ + код_ск для всех товаров документа.
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
271
Загрузка первых трех объектов со справочной информацией: ПОКУПАТЕЛЬ, ТОВАР, склад — может производиться в любой последовательности, т. к. эти таблицы в схеме данных находятся на верхнем уровне и между ними нет подчиненных отношений. Загрузка таблицы ДОГОВОР должна производиться после загрузки таблицы ПОКУПАТЕЛЬ, т. к. таблица ДОГОВОР в схеме данных подчинена таблице ПОКУПАТЕЛЬ.
Загрузка таблицы НАКЛАДНАЯ может производиться только после загрузки таблиц ДОГОВОР и СКЛАД, т. к. таблица НАКЛАДНАЯ в схеме данных подчинена этим таблицам. Аналогично осуществляется загрузка таблицы ПОСТАВКА_ПЛАН, которая подчинена таблицам ДОГОВОР и ТОВАР, и таблицы ОТГРУЗКА, которая подчинена таблицам НАКЛАДНАЯ и ТОВАР. Заметим, что загрузка таблицы склад может быть осуществлена и после загрузки данных по договорам, поскольку не по каким путям в схеме данных таблицы ДОГОВОР и ПОСТАВКА_ПЛАН не подчинены таблице СКЛАД. Технология зафузки базы данных "Поставка товаров" может быть представлена в виде таблицы (табл. 6.1). Таким образом, в результате определена последовательность этапов зафузки базы данных "Поставка товаров", а также объекты зафузки на отдельных этапах и соответствующие документыисточники данных. Таблица 6.1. Технология загрузки базы данных "Поставка товаров" Таблицы БД — объекты загрузки
Документыисточники
Вид информации
Этап загрузки
ПОКУПАТЕЛЬ
Справочник покупателей
Справочная
I
ТОВАР
Справочник товаров
Справочная
!
СКЛАД
Справочник складов
Справочная
I или II
ДОГОВОР ПОСТАВ.КА_ПЛАН
Данные по договорам
Плановая
I!
НАКЛАДНАЯ ОТГРУЗКА
Данные по накладным
Оперативноучетная
Примечание
Независи мые этапы
I,;
После определения этапов зафузки базы данных можно приступить к определению подсхемы данных для каждого этапа загрузки, проектированию макета форм и их созданию средствами Access.
272
Часть I. Основы технологии Microsoft Access
Проектирование интерфейса пользователя для загрузки и редактирования данных документа Для ввода и редактирования данных справочных документов (см. Приложение 2) можно осуществить ввод непосредственно в таблицы ПОКУПАТЕЛЬ, ТОВАР, СКЛАД или воспользоваться Мастером для создания простых однотабличных форм (см. главу 5) и осуществить ввод этих данных через полученные формы. Для ввода и редактирования данных плановых и оперативно-учетных документов пользователю нужно разработать удобный экранный интерфейс, который позволит минимизировать операции по вводу данных и контролировать их достоверность и корректность. При этом необходимо ограничиваться вводом только идентификаторов и количественных показателей. Справочные данные (наименования, нормативы, цены, тарифных ставок и т. п.) должны не вводиться с этих документов, а только отображаться в форме из ранее созданных таблиц справочной информации. Отображение справочных данных позволяет осуществлять визуальный контроль правильности вводимых данных в соответствии с документом-источником плановой или оперативно-учетной информации, в котором справочные данные обычно присутствуют. Рассмотрим технологию разработки интерфейса пользователя для загрузки и корректировки данных о договорах. В соответствии с этапами загрузки базы данных "Поставка товаров", определенными ранее (см. табл. 6.1), загрузка данных по договорам должна производиться в таблицы ДОГОВОР и ПОСТАВКА_ПЛАН после загрузки таблиц со справочными данными ПОКУПАТЕЛЬ и ТОВАР, что обеспечит установление связей загружаемых записей с соответствующими записями этих таблиц. На этапе проектирования определяются все необходимые требования к создаваемой форме и ее макет. Процесс конструирования многотабличной формы средствами Access далее осуществляется в соответствии с результатами этой работы. При определении требований к интерфейсу рассмотрим особенности назначения и работы с формой, составим подсхему данных для создания формы. определим общую структуру формы — проект макета — и размещение реквизитов в соответствии со структурой документа "Договор" и подсхемой данных.
Проектирование формы Произведем проектирование формы, обеспечивающей загрузку данных документа "Договор" в таблицы ДОГОВОР и ПОСТАВКА_ПЛАН, и определим требовании к форме, в соответствии с которыми будем осуществлять ее создание. Форма документа-источника "Договор" была .приведена в главе 2 (см. рис. 2.7).
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
273
В таблицу ДОГОВОР в соответствии со схемой данных (см. рис. 2.19 главы 2) и подсхемой, полученной ниже для формы (см. рис. 6.2), а также структурой этой таблицы необходимо вводить обязательные реквизиты: номер договора (нсм_дог), идентификатор и код покупателя (код_пок), по которому устанавливается связь с таблицей ПОКУПАТЕЛЬ. Кроме того, вводится дата заключения договора. Сумма по договору может быть рассчитана автоматически. В общей части документа "Договор" (см. рис. 2.7 главы 2) наряду с идентификатором покупателя (код_пок) указаны его реквизиты: ИНН, наименование, адрес и другие, которые относятся к справочным данным. Для того чтобы при загрузке правильно вводить идентификатор покупателя, предусмотрим отображение в форме перечисленных справочных данных из ранее загруженной таблицы ПОКУПАТЕЛЬ. Эта таблица является главной в схеме данных базы по отношению к таблице ДОГОВОР. В таблицу ПОСТАВКА_ПЛАН в соответствии со схемой данных базы и структурой этой таблицы необходимо вводить обязательные ключевые реквизиты: номер договора, код товара, срок поставки (образующие уникальный идентификатор), а также описательные реквизиты: минимальная поставка и количество. Сумма поставки может быть рассчитана автоматически. В табличной части документа "Договор" (см. рис. 2.7 главы 2) наряду с идентификатором товара (ксд_тов) содержатся его справочные реквизиты: наименование, единица измерения, цена. Для того чтобы при загрузке правильно вводить идентификатор товара, предусмотрим отображение в форме справочных данных из ранее загруженной таблицы ТОВАР. Эта таблица является главной в схеме данных базы по отношению к загружаемой таблице ПОСТАВКА_ПЛАН.
Определение подсхемы данных для формы В результате загрузки данных по договорам должны формироваться только записи таблиц ДОГОВОР и ПОСТАВКА_ПЛАН — объекты загрузки, которые надо включить в подсхему данных для формы (рис. 6.2). В подсхему (см. рис. 6.2) надо включить также таблицы ПОКУПАТЕЛЬ и ТОВАР. т. к. в форме было решено предусмотреть отображение справочных данных по покупателям и товарам.
Определение проекта макета формы На основе полученной подсхемы (см. рис. 6.2) разработаем проект макета (рис. 6.3), определяющий общую структуру формы. Форму назовем ДОГОВОРЫ С ПОКУПАТЕЛЯМИ. Многотабличная форма ДОГОВОРЫ С ПОКУПАТЕЛЯМИ будет содержать основную часть таблицы ДОГОВОР в качестве базового источника записей и таблицы ПОКУПАТЕЛЬ для отображения справочной информации.
274
Часть I. Основы технологии Microsoft Access
Таблица - источник данных для отображения справочных данных по покупалелям Б основной части формы
Таблица-источник данных для отображения справочных данным по товарам Е подчиненной форме
KOAJIOK ИНН
НАИМ_ПОК
Базовый источник записей основной части формы
АДРЕС_ПСЖ ТЕЛ НОМ_РСЧ БАНК
Базовый источник записей подчиненной формы
Таблицы - объекты загрузки Рис. 6.2. Подсхема для формы ввода/вывода данных по договорам
ПОГОВОР № 1 номлоггдоговор) | ОТ
[ДАТА ЛОГ (ДОГОВСФ)|
Покупатель коп
[KOAJIOK (до ГОВОР jj
наименование ИНН
адрес
HAMMJIO <СПОКУПАТЕЛЬ)| |инн(покупдтЕль) |
телед
|АДРЕС ПОК(ПОКУПАТЕЛЬ)]
он
|ТЕЛ (ПОКУПАТЕЛЬ) ]
расчетный счет |НОМ РСЧ (ПОКУПАТЕЛЬ) | банк
Код ювара
^Д-^П "ЮСТАВКА_ПЛАН
Найме кование
PMOSBI
И1М
-
(месяц)
|ЕИ | |UEHA| |СРОК_П|
TOBi kp
|БАНК (ПОКУПАТЕЛЬ)!
Мин. партия поставки
| >
Коли«с.во
<
>"
«а
] |KOnj1OCT| |СУММА_Г ОСТ \
ПОСТАВКА_ПЛАН
Сумма всего
|СУШД лог сд о ГОВОРЯ
Рис. 6.3. Проект макета формы ДОГОВОРЫ С ПОКУПАТЕЛЯМИ
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
275
Для ввода данных о плановых поставках по договорам в таблицу ПОСТАВКА_ПЛАН предусмотрим непосредственное включение в основную форму подчиненной формы, базовым источником записей которой будет таблица ПОСТАВКА_ПЛАН, а таблица ТОВАР будет использована в этой форме для отображения справочной информации, Размещение реквизитов формы В основной части составной формы ДОГОВОРЫ С ПОКУШТЕЛЯМИ вверху будем размещать: О загружаемые поля таблицы ДОГОВОР (обведены на рис. 6.3 утолщенной рамкой): • ном_дог — номер договора (уникальный ключ); • ДАТА_ДОГ — дата заключения договора; • код_пок — код покупателя (поле связи); • СУМКА_ДСГ — сумма всего по договору; d поля из таблицы ПОКУПАТЕЛЬ, позволяющие отобразить справочную информацию о покупателе, с которым заключен договор: • НАИМ_ПОК — наименование покупателя; • инн;
•
АДРЕС и другие справочные реквизиты покупателя.
Доступ к полям справочных данных должен быть офаничен только чтением, т. к. значения этих полей не должны вводиться и корректироваться из документа "Договор". В подчиненной форме ПЛАН_ПОСТАВОК разместим: О загружаемые поля таблицы ПОСТАВКА_ПЛАН: • код_тов — код товара (часть уникального ключа); • СРОК_ПОСТ — срок поставки (часть уникального ключа); • кин_пост — минимальная партия поставки; • кол_пост — плановое количество поставки товара; • СУММ_ПОСТ — сумма поставки товара;
Замечание 'ч Номер договора не включен в подчиненную часть формы, так он вводится в основную часть формы. Это обеспечивает однократное отображение номера при просмотре договора. Тем не менее, его значение будет введено автоматически при формировании записи таблиц ПССТАВКА_ПЛАН. 10 Зах. 835
Часть I. Основы технологии Microsoft Access
276
О поля из таблицы ТОВАР, позволяющие отобразить справочную информацию о товарах, поставляемых по договору: •
ндим__тов — наименование товара;
• ЕЙ — единица измерения; • ЦЕНА — цена товара.
Создание интерфейса для загрузки и редактирования данных документа Подготовка формы мастером Используя мастер форм, создадим в соответствии с результатами проектирования заготовку формы ДОГОВОРЫ С ПОКУПАТЕЛЯМИ, включающую подчиненную форму ПЛАН_ПОСТАВОК. В результате должна быть получена форма, которая после редактирования в конструкторе будет удобна для загрузки записей в таблицу ДОГОВОР и в подчиненную таблицу ПОСТАВКА_ ПЛАН с отображением уже имеющихся в базе справочных данных из главных таблиц о покупателе и товарах. Основы создания многотабличной формы с помощью мастера рассмотрены в главе 5. В окне базы данных выберем вкладку Формы (Forms) и нажмем кнопку Создать (New). В окне Новая форма (New Form) выберем пункт Мастер форм (FormWizard); в качестве таблицы, которая будет базовым источником записей основной части сложной формы, выберем таблицу ДОГОВОР. В соответствии с проектной структурой (макетом) формы (см. рис. 6.3) в диалоговом окне мастера Создание форм (Form Wizard) включим в форму поля таблиц ДОГОВОР, ПОКУПАТЕЛЬ, ПОСТАВКА_ПЛАН, ТОВАР в соответствии с ранее указанным перечнем. В следующем диалоговом окне мастера (рис. 6.4) уже будет выделена таблица ДОГОВОР., которая выбрана в качестве базового источника для создания основной части формы. Поскольку эта таблица является главной в схеме данных относительно таблицы ПОСТАВКА_ПЛАН. представляется возможность выбрать вариант Подчиненные формы (Form with subform(s)) с явным включением формы. Для получения многозаписевой подчиненной формы выберем в следующем окне мастера вид формы Ленточный (Tabular) и стиль оформления Стандартный (Standard). В последнем окне Создание форм (Form Wizard) зададим имя составной формы: "ДОГОВОРЫ С ПОКУПАТЕЛЯМИ", а также имя подчиненной формы: "ПЛАН_ПОСТАВОК". Выберем также дальнейшие действия мастера: Открыть форму для просмотра и ввода данных (Open the form to view or enter information).
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
277
После завершения работы мастера выводится форма с теми данными по договорам, которые могли быть ранее загружены в базу. В подчиненной форме для каждой текущей записи договора выводятся только записи плапоставок товаров данного договора (рис. 6.5). Создание форм Выберите вид представления данных; - ПОКУПАТЕЛЬ
НОИ_АОГ, ДДТА_ДОГ, K04JTOK, 'СУЙМА„ДОГ, ИНН, НАИМ ПОК, . AflPECJIOK, Т£Д НОМ_РСЧ, БАНК
- ПОСТАВКА^ПЛАН - ТОВАР
НАИМ ТОВ, ЦЕНА, ЕЙ, КОД ТОВ,
СРОК пост; MHHJIGCT, кол пост, СУММА ПОСТ
(•" Подчиненные формы
Отмена
< Назад
С' Связанные формы
Далее >
Готово
Рис. 6.4. Окно мастера форм при выборе типа включения подчиненной формы № ДОГОВОРЫ С ГШКУПД! ЫШИ
>•
Н»к0 ач-ов«м Дата
|ишГ ^ПШГгЖ
Адрес
Код |»»^чте о
|ГШ
Номе ые- счете
Тв(и»оя
Снимала сазяхч [ пни [773967ИП11
ЕДН1;
^=
IKwrBrnwr-^n
Нм«н«««,и«гс«г» Ц«м 'JMa«e«!l?Hi | (,ts;,'¥ jMw.n«1?LG
j
d »?.•<*
jM<»-«js 1 a.ii
|
bSSJ^k-
i^WW1
p==
j
ptDTS"
*r— Затчь
|— Н
_j|
и™ и 1 - 1
{8S2i34533
ЕАниыигмюи*» Хздтгым Ср« посгяч, м,~ г»™* >«*?«*< ^«««и nwrwu uw. шшг«м. yam 1 j 10 mo j t,w;oo№
p^m
K^ ]Ч1Г]*Л
rwi
:|
• ил
jГ
^ 1П
-','>.!
[^SoSa
•Щ;
1 Г™"
зь-з^се.
|м)рн5м
i5E
'Г~~~"
г >
Г » In
г~
Щ>* и> 5
Г~ ч'
Г~
Г"
г» |
isr ?>s ШР
jo i
welder
so |
18 isejsop
10 1
i6»^0n
-
I
__^_i >T
»*|KS 5
Рис. 6.5. Форма с подчиненной формой, созданная мастером
278
Часть I. Основы технологии Microsoft Access
Мастер форм, проанализировав схему данных, сам формирует подчиненную форму так, что каждая запись в подчиненной форме образуется на основе одной из записей базового источника таблицы EOCTABKAJUIAH, в которую добавляются поля из таблицы ТОВАР со справочными данными.
Доработка интерфейса средствами конструктора форм На основе полученной мастером формы может быть подготовлен более удобный интерфейс для работы с документом "Договор". Для этого следует отредактировать форму средствами конструктора. Структура формы (размещение элементов) может быть перекомпонована, дополнена новыми элементами управления: кнопками, заголовками, примечаниями, средствами выборки данных документа по заданным условиям. В полях со справочными данными необходимо установить блокировку ввода. Откроем полученную мастером форму в режиме конструктора. Для этого в окне База данных (Database) в области Объекты (Objects) выделим строку Формы (Forms). Выберем для редактирования созданную ранее многотабличную форму ДОГОВОРЫ С ПОКУПАТЕЛЯМИ и нажмем кнопку Конструктор (Design). Если форма была открыта ранее в режиме просмотра, то для перехода в режим конструктора достаточно нажать кнопку Вид (View) на панели конструктора форм (см. рис. 5.7 главы 5). Для внесения изменений в форму используется техника редактирования, рассмотренная в главе 5. В основной части формы переместим и отредактируем поля, как это показано на рис. 6.7. Уточним текст подписей полей, шрифт и размеры полей и подписей, введем название формы "ДОГОВОР" в заголовок формы. Удалим элемент с подписью подчиненной формы.
Создание кнопок для перехода к другой записи и закрытия формы Создадим в области заголовка основной части формы две кнопки для перехода к следующей и предыдущей записям источника формы -- таблицы ДОГОВОР (т. е. переход к другому договору), а также кнопку для закрытия формы. Нажмем на панели элементов (ToolBox) Access кнопку Мастера (Control Wizards), а затем используем элемент панели Кнопка (Command Button). После переноса нажатой кнопки курсором мыши в нужное место и вычерчивания ее рамки запустится Мастер создания кнопок (Command Button Wizard) (рис. 6.6).
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки.
279
Создание кнопок Выберите действие, которое будет выполняться при нажатии кнопки, Каждая категория содержит собственный набор действий, Категории:
Действия:
Переходы по записям Обработка записей Работа с формой Работа с отчетом Приложение Разное
Найти далее Найти запись Первая запись Последняя запись
m
Следующая запись
Отмена
Далее >
Готово
Рис. 6.6. Окно мастера кнопок » ДОГОВОРЫ с ПШУПАТШМИ
ДОГОВОР
N
ПРГД
|ДП1
ЛЛГПЯПР
СЛЕД. ДОГОВОР
ПОКЫПАТЕЛ Ь
Наименование
[Компьютер маркет [Витебская. 12 1(012)345-2345
Адрес Талафон Номер расч.
Код | infill |77вЭ57651111
[7635В5097бЖ«ЗБ58
БАНК Ноииинованиа товара
Код товара
Цена Единица иэнерения
Месяц поставки
Мин. партия
* ITOGI
|MoHMTQp17LG
[ЬШ.ООр. штчкв
|
1
TOOI
[Монитор 17LG
|6 587.00р. штчк»
|
г
JIUU1
[Монитор 1/Ш
[К bHMJUp. штчкв
|
|1002
M ' i > ; '.
| звэ.оор. коробка
1
|тоог
IFDD3.5
| 363.00р. коробка
[
3 |
Затесы
И
•-
|
|
Количество Супип поставки поставки
10
100
ББВ700.00р
Б
го
131 ?«о.аор.
а
ь
ju
i s / ыи.иир
1
10
50
18150.ВОр.
5
111
3630.00р.
Г » |.и 1**| « i
\
Сумма по договору
Рис. 6.7. Отредактированная форма документа "Договор" в режиме просмотра
В окне мастера кнопок выберем действие, которое должно выполняться при нажатии кнопки. В группе Категории (Categories) выберем строку Переходы по записям (Record Navigation), в группе Действия (Actions) выберем строку Предыдущая запись (Goto Previous Record). В следующем диалоговом окне
Часть I. Основы технологии Microsoft Access
280
мастера можно выбрать вид кнопки с текстом на кнопке: Текст (Text) — или с рисунком: Рисунок (Picture) — и выбрать рисунок из списка. После завершения работы мастера кнопка с выбранным текстом или рисунком встраивается в форму. Аналогичные действия производятся для встраивания кнопки перехода к последующей записи, при выборе соответственно в области Действия (Actions) пункта Следующая запись (Goto Next Record). Размер и надписи кнопок можно изменять аналогично редактированию обычных элементов. Для создания кнопки закрытия формы в группе Категории (Categories) нужно выбрать пункт Работа с формой (Form Operations), а в области Действия (Actions) выбрать пункт Закрыть форму (Close Form). После формирования кнопки закрытия ее название и шрифт можно изменить. Отредактированная форма в режиме просмотра приведена на рис. 6.7.
Ограничение доступа к данным таблиц базы Поля таблиц справочной информации ПОКУПАТЕЛЬ и ТОВАР должны использоваться только для отображения. Поэтому необходимо защитить их от непроизвольных изменений при работе с формой. В общей части формы такая защита нужна для полей данных таблицы ПОКУПАТЕЛЬ (НАИМ_ПОК, инн, АДРЕС_ПОК и др.), в подчиненной части формы для полей данных таблицы ТОВАР (НАИМ_ТОВ, ЦЕНА, ЕК).
Для защиты поля надо выделить рамку поля и с помощью контекстного меню вызвать свойства поля. В окне свойств (рис. 6.8) на вкладке Данные (Data) в строке Блокировка (Locked) выберем значение Да (Yes). После установки этого свойства поле станет доступным только для чтения.
НАИМЛОК Макет
Данные | События I Другие ]
Данные Маска ввода Значение по умолчанию Условие на значение Сообщение об ошибке Доступ : Блокировка Применение автофильтра Смарт-теги
Все
НАИМ_ПОК
Да
I Нет
Рис. 6.8. Установка свойства Блокировка для поля справочных данных
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
281
Замечание При необходимости отредактированный вариант формы до ее закрытия можно сохранить под новым именем с помощью команды меню Сохранить как (Save As).
Создание полей со списком При загрузке плановых и оперативно-учетных данных для удобства ввода идентификаторов объектов информации, уже представленных в таблицах справочных данных (код пользователя, код товара, код склада и т. п.), целесообразно создавать соответствующие поля как Поле со списком (Combo Box). Создание поля со списком дает возможность отобразить в этом поле любую необходимую информацию из справочной таблицы обо всех представленных в ней объектах и выбрать уже имеющиеся значения идентификаторов в базе. Тем самым повышается достоверность вводимой информации и снижается вероятность ошибок при вводе. Отображение данных из справочных таблиц при вводе идентификатора свидетельствует о наличии в базе данных главных записей для загружаемой подчиненной записи, что необходимо для успешного завершения ввода при установленном параметре целостности в схеме данных. Поле со списком объединяет поле формы, в которое нужно ввести сведения, и список отображаемых записей из связанной главной таблицы. В списке можно выбрать из соответствующего поля нужное значение и ввести его в поле формы (рис. 6.9). ПРЕД. ДОГОВОР
Закрыть
ДОГОВОР
1
N
.
ПОКЫПАТЕ Л Ь | Код покупателя^lnliliM П001 пои? ИНН / ПООЗ / П004 покупателя П005 г'
ПООВ
„„И,,,, [Г
(Ш111
ш
г
•
1М^^^^'
от
HaHMeHOBaHk е "2JI Адрес Компьютер маркет Перспектива Инфацвнтр Монитор Компьтер лэнд Компьютерная техника
08 01 2003
СЛЕЛ
" Д°говор 1
(Перспектива (Ладожский, 38 1(995)3-15-6789
|Кредит ^ список записей из таблицы
Рис. 6.9. Поле со списком записей справочной таблицы ПОКУПАТЕЛЬ для ввода кода в запись таблицы ДОГОВОР
Создание поля со списком может быть выполнено с помощью мастера или без него.
Часть I. Основы технологии Microsoft Access
282
Создание поля со списком с помощью мастера
Рассмотрим процесс создания мастером поля со списком записей таблицы ПОКУПАТЕЛЬ для ввода значений кода покупателя (код_пок) в таблицу ДОГОВОР. Это позволит просматривать и вводить значения кода, выбирая их из записей в главной таблице ПОКУПАТЕЛЬ, а также проверять соответствие кода и наименования предмета, имеющихся в документе-источнике "Договор". Нажмем на панели элементов кнопку Мастера элементов (Control Wizards). Затем выберем кнопку Поле со списком (Combo Box), установим курсор м ы ш и в нужное место, нажмем кнопку мыши и, не отпуская ее, вычертим рамку элемента. После отпускания кнопки мыши запустится мастер и откроет диалоговое окно Создание полей со списком (Combo Box Wizard). В этом окне определим способ, которым список поля получает свои значения. Для формирования списка из связанной таблицы выберем вариант Объект "поле со списком" будет использовать значения из таблицы или запроса. (1 want the combo box to look up the values in a table or query) (рис. 6.10). Создание полей со списком Мастер создает попе со списке^ в котором отображается список значений для выбора. Каким способен попе со епископ будет получать эти значения? (•" ^Объект "поле со списком" будет использовать значения из |таблицы или запроса. f Будет введен фиксированный набор значений.
Отмена
Далее >
Рис. 6.10. Выбор способа формирования списка
В следующем окне выберем таблицу ПОКУПАТЕЛЬ, которая будет поставлять значения в список поля (рис. 6.П). Затем выберем ключевое поле ксд_пок, а также поле НАИМ_ПОК для отображения кода и наименования в записях списка (рис. 6.12).
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки.
283
Создание полей со списком Выберите таблицу или запрос со значениями, которые будет содержать поле со списком. Таблица: ДОГОВОР Таблица: ЗАПАС Таблица: НАКЛАДНАЯ Таблица; ОТГРУЗКА ТаЬлииа: ПОКУПАТЕЛЬ Таблица: ПОСТАВКА_ПЛАН Таблица; СКЛАД Таблица; ТОВАР • Показать Я" Таблицы
Отмена
Г" Запросы
Г Таблицы и запросы
< Назад
Далее >
Рис. 6.11. Выбор источника данных для формирования списка •не полей со списком Какие поля содержат значения, которые следует включить Б попе со списком? Отобранные поля станут столбцами в объекте "поле со списком".
Доступные поля:
Выбранные поля;
[ИНН АДРЕС ПОК ТЕЛ НОМ_РСЧ БАНК
Отмена
< Назад
Далее >
Рис. 6.12. Выбор полей для формирования записи списка
В следующем окне мастера создания поля выберем вариант с отображением ключевого столбца (рис. 6.13). Далее выберем поле списка код_пок, являющееся ключом связанной таблицы ПОКУПАТЕЛЬ. Этим полем будет определяться значение для ввода в поле формы (рис. 6.14).
Часть I. Основы технологии Microsoft Access
284
Создание полей со списком Задайте ширину столбцов, которые содержит поле со списком, Перетащите правую границу заголовка столбца на нужную ширину или дважды щелкните ее для автоматического подбора ширины. Г~ Скрыть ключевой столбец (рекомендуется) Код покупателя
и П002
ПООЗ
Наименование Компьютер маркет Перспектива Инфоцентр_
ПСЮ7
Отмена
< Назад
•|
Далее >
Рис. 6.13. Окно для оформления столбцов списка Создание полей со списком При выборе строки в объекте "поле со списком" можно сохранить значение из этой строки в базе данных или использовать это значение в дальнейшем для выполнения действия. Выберите поле, однозначно определяющее строку. Какой столбец объекта "поле со списком" содержит 6j которое следует сохранить в базе данных? Доступные поля:
НАМИ ПОК
Отмена
< Назад
Далее >
Готово
Рис. 6.14. Окно для выбора поля источника значений для поля формы В следующем окне (рис. 6.15) отметим переключатель Сохранить в поле (Store that value in this field) и выберем поле формы код_пок (поле таблицы ДОГОВОР), в которое будут вводиться значения из списка.
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
285
Создание полей со списком
XXX
XXX
m
хт
Microsoft Office Access позволяет сохранить выбранное из объекта "попе со списком" значение в базе данных или использовать это значение в дальнейшем для выполнения действия. Какое действие будет выполняться при выборе значения из объекта "поле со списком"? Запомнить значение. Сохранить в поле:
Отмена
|КОД_ПОК
< Назад
Далее >
..-.I
Готово
Рис. 6.15. Выбор поля формы, в которое вводится значение из списка
Далее введем подпись поля со списком Код покупателя (рис. 6.16). Создание полей со спискам Задайте подпись, которую содержит поле со списком, ]Код покупателя Указаны все сведения, необходимые мастеру, чтобы создать поле со списком,
Г" Вывести справку, после того как мастер создаст поле со |списком.
Отмена
< Назад
Готово
Рис. 6.16. Определение подписи поля со списком
Часть I. Основы технологии Microsoft Access
286
Нажмем кнопку Готово (Finish). В результате получим поле со списком код_пок, которое содержится в отредактированной форме, представленной на рис. 6.22. Использование поля со списком покупателей в режиме формы иллюстрирует рис. 6.9. Для настройки ширины столбцов списка в окне свойств поля со списком в строках Ширина списка (List Width) и Ширина столбцов (Column Width) зададим подходящие значения. Поле со списком можно получить преобразованием обычного поля. Для этого нужно в контекстном меню поля выбрать пункт Преобразовать элемент в (Change To) и далее выбрать строку Поле со списком (Combo Box). Затем необходимо установить свойства этого поля аналогично настройкам свойств в случае, когда мастер не используется. При создании поля со списком без использования мастера нужно приме : нить кнопку Поле со списком (Combo Box), когда кнопка Мастера элементов (Control Wizards) не активна. Рассмотрим, например, создание поля со списком для кода товара в подчиненной форме. В свойствах создаваемого элемента (рис. 6.17) на вкладке Данные (Data) выбирается поле КОД_ТОБ, которое необходимо заполнять в форме. В строке Тип источника строк (Row Source Type) выбирается пункт Таблица или запрос (Table/Query), в строке Источник строк (Row Source) выбирается таблица ТОВАР, записи которой надо отобразить. Поля код_тов и НАИМ_ТОВ, включаемые в список, и их порядок определяются в построителе запроса, вызываемом в строке источника строк. вГПоле со списком: КОД_ТОВ
Макет
Данные | События
Данные Маска ввода Тип источника строк . . , Источник строк Присоединенный столбец Ограничиться списком , . Автоподстановка Значение по умолчанию Условие на значение Сообщение об ошибке Доступ Блокировка Смарт-теги
Другие |
Все
. КОД_ТОБ . , Таблица или запрос , ТОВАР . 1 , Нет Да
Да Нет
Рис. 6.17. Определение свойств создаваемого поля со списком без использования мастера
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
287
Использование календаря для ввода дат Для автоматизации ввода даты в рассматриваемом примере разместим в форме элемент управления Календарь, который представляет помесячный календарь. Выбранная в календаре дата может быть передана в поле формы ДАТА_ДСГ с типом данных дата/время. Для добавления календаря в форму откроем список на кнопке панели элементов Другие элементы. В конце списка выберем Элемент управления Календарь П.О и курсором мыши растянем рамку создаваемого элемента в области данных формы. В рамке созданного элемента разместится календарь (рис. 6.18) Этот элемент можно также создать, воспользовавшись командой меню Вставка]Элемент ActiveX
до
и в <Э Р
1
N
I
I
L..
I
HOMJIC )Г
_..!
I !Ст
мар 2004 Пи
в!
Ср
1 |ДАТА_ЛОГ 1
I
|н.ц>
jj |эов4 _iJ
m
41
Сб
Вс
Г Е
.'
10
11
12
13
14
15
а is
17
18
19 . 20
21
22
23
24
25
26
29
30
31
3
27
"
Рис. 6.18. Размещение календаря в форме
Откроем свойства созданного элемента на вкладке Данные. В строке свойства Данные введем имя поля "ДАТА_ДОГ" (рис. 6.19). ||Г Элемент ActiveX: Calendar? Calendar2 Макет
Данные j События ( Другие ]
Данные Класс OLE Класс Доступ Блокировка
Бее
ДАТА_ДОГ Календарь M5CAL,Calendar.7 Да Нет
Рис. 6.19. Свойства элемента Календарь
При работе с формой для ввода или корректировки даты достаточно выбрать нужную дату в календаре и щелкнуть в поле ДДТА_ДОГ.
Часть I. Основы технологии Microsoft Access
288
Для ввода даты календарь можно не размещать постоянно в форме, а предусмотреть его вызов. При этом календарь необходимо разместить в отдельной форме и подготовить процедуры, написанные на VBA, которые должны открывать форму с календарем и заносить в поле выбранную дату по наступлению выбранного события. Разработка таких процедур показана в агаве 15.
Установка режима работы с записями подчиненной таблицы Для ввода новых записей в подчиненную таблицу должен быть обеспечен переход в режим добавления новой записи в подчиненной форме. Для этого может быть использована стандартная кнопка |j^j в поле установки текущей записи в нижней части подчиненной формы. Для удобства пользователя может быть создана специальная кнопка перехода к пустой записи. Для формирования такой кнопки используется мастер кнопок, в диалоговом окне которого Создание кнопок (Command Button Wizard) (рис. 6.20) нужно выбрать соответствующую категорию Обработка записей (Record Operations) и действие Добавить запись (Add New Record), которое обеспечит формирование нужной процедуры обработки события при нажатии кнопки в режиме формы.
Создание кнопок Выберите действие, которое будет выполняться при нажатии кнопки. Каждая категория содержит собственный набор действий. Категории:
Действия:
[Переходы по записям Работа с формой Работа с отчетом Приложение Разное
Отмена
'"• Ц-1-3-*
Восстановить за пи с ь г УтИЧ.ШлВпшНЧНИ Дублировать запись Печать записи Сохранить запись Удалить запись
Далее >
Готово
Рис. 6.20. Выбор параметров при создании кнопки для добавления записи
Для обеспечения возможности добавления, удаления и изменения записей при загрузке и корректировке записей таблицы ПОСТАВКА_ПЛАН (источника
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки..
289
записей подчиненной формы) в окне свойств подчиненной формы (рис. 6.21) должны быть установлены параметры Разрешить добавление (Allow Additions), Разрешить удаление (Allow Deletions), Разрешить изменение (Allow Edits).
Форма Макет
Данные | События ] Другие |
Все
Источник записей 5ELECT [ТОВАР], [НАИМ_ТОВ], [ТО Фильтр Порядок сортировки Применение фильтров Да Разрешить изменение Да Разрешить удаление , ." Да Разрешить добавление Да „г I Ввод данных . , Нет Тип набора записей Динамический набор Блокировка записей Отсутствует Загрузить значения по умолчанию .• Да
Рис. 6.21. Окно свойств подчиненной формы
Внимание Если в окне свойств подчиненной формы установить значение Да в строке Ввод данных, в форму можно будет только вводить новые записи, другие записи будут недоступны.
Загрузка, просмотр и редактирование данных документа После рассмотренного редактирования форма ДОГОВОРЫ С ПОКУПАТЕЛЯМИ в соответствии с требованиями к интерфейсу для удобного ввода данных по договорам, инструкцией пользователя по вводу данных и отображением справочных сведений из таблиц ПОКУПАТЕЛЬ и ТОВАР представлена на рис. 6.22. Для загрузки, просмотра и редактирования данных необходимо открыть форму. Для этого в окне базы данных надо выбрать объект Формы (Forms), выделить имя формы и нажать кнопку Открыть (Open). Для перехода из режима конструктора в режим формы (Form View) на панели инструментов выбирается пункт Режим формы (Form View) или выполняется команда меню Вид1Режим формы (ViewjForm View).
Часть I. Основы технологии Microsoft Access
290 .
.' 11 ':•"'•• •:.
!№ ' i ' •
за-ф'"- |
ЮШШЗ]
ДОГОВОР
N
|дт СПЕЛ. ДОГОВОР
ПОКУПАТЕЛЬ
{
Наименование
Адрес
(Витебская. 12
Телефон
|770Э57651П1
|(01 2)145-2345
Номер расч. счета БАНК
J K o a ^ j Наиивноввние
Цена Единица
Месяц
Гв]585аЭ7Б32Б453656 (Mnci
Мин.
Количество
Сумма поставки! ."J
ITODI _ll (Монитор 17LG
|6 587.00р. (итнка
1
|
10 ]
1QQ |
Б5В ?OO.OQp.
|Т001 _lJ [Монитор 17LG
6507.00р. штука
:•
i
5 |
201
131 740.00р.
6 587. ООр
|Т001 _lJ [Монитор 17LG (ТОО? ^J FDD 3.5 • jlillltJ -d FDD 3.5
<игч«я
з
|
5
зо 1
ТэтТГйшр.
| 383. 00р. |коиобка
1
|
10
50!
IB 1SO.OOP.
| ЗБЗ.ООр |короВка
3
|
5 I
10 |
ЭбЭОСо-
1
1
]
1 За
новый договор
(Компьютер маркет
П покупателе |П001 ИНН
1
' СумМс по договору
ПООЗ П004
Ичфоцпнтр Монитор
ПРОБ П007
Компыотнрнав техника
.г"
Иш:п)укимр ПРИРОДУ " Вносить только номер догоиора. дату, коп покупателя. кол товара, месяц, мин партиюн. количество и сумму поставки
э™.^
Рис. 6.22. Форма-интерфейс для ввода и редактирования данных документа "Договор"
Для загрузки записи нового договора в таблицу ДОГОВОР через приведенную на рис. 6.22 форму ДОГОВОРЫ С ПОКУПАТЕЛЯМИ необходимо в открытой форме нажать созданную кнопку Добавить новый договор размещенную в заголовке обшей части формы (или стандартную кнопку |^jjj| в нижней линейке кнопок перехода по записям). Тогда текущей становится пустая запись источника основной части формы — таблицы ДОГОВОР. В ней можно заполнять обязательные поля: номер договора (ключ таблицы ДОГОВОР) и код покупателя (поле связи с таблицей ПОКУПАТЕЛЬ), а также поле даты, тоже загружаемой в таблицу ДОГОВОР. Справочные поля из таблицы ПОКУПАТЕЛЬ автоматически отобразятся после ввода кода покупателя. Поле суммы по договору может быть рассчитано и введено в таблицу ДОГОВОР после ввода данных в подчиненную форму.
Замечание После ввода полей в общей части формы можно ввести новую запись в таблицу ДОГОВОР, если выполнить команду Записи|Сохранить запись или щелкнуть мышкой на области выделения записи общей части формы.
После ввода полей в общей части формы можно перейти к формированию и сохранению записей в подчиненной форме. В каждой новой записи вводят-
Глава 6, Разработка интерфейса для ввода, просмотра м корректировки...
'
291
ся значения обязательных полей: код товара (ключевое), месяц поставки (ключевое) и других загружаемых полей: минимальная партия поставки и количество. После ввода кода товара справочные данные: наименование, единица измерения и цена — автоматически отобразятся из таблицы ТОВАР. Для сохранения записи можно выполнить команду Записи|Сохраннть запись или щелкнуть мышкой на области выделения формируемой (редактируемой) записи подчиненной формы, На этом этапе может быть автоматически вычислено поле стоимости поставки по каждому товару, если сделать это поле вычисляемым на основе данных в строке подчиненной формы. На основе стоимости поставки по каждому товару в договоре может быть вычислена общая сумма по договору. Для этого, как показано в главе 5 на рис. 5.46, может быть создано вычисляемое поле для суммирования в примечании подчиненной формы. Результаты вычислений отображаются в форме. Для расчета стоимостей с сохранением результата в соответствующих полях таблиц ПОСТАВКА_ПЛАН и ДОГОВОР должны быть подготовлены процедуры, написанные на VBA, рассмотренные в главе 15.
Установка текущей записи в форме При просмотре и корректировке данных конкретного документа через форму необходимо выполнить установку нужной текущей записи основной формы. Для этих целей можно воспользоваться созданными в форме кнопками (например, кнопки ПРЕД. ДОГОВОР и СЛЕД. ДОГОВОР на рис. 6.22). Это можно сделать, используя стандартные кнопки перехода (первая, предыдущая, следующая, последняя), по записям в основной форме в нижнем левом углу формы в строке Запись (Record). При большом числе записей источника формы можно использовать функцию поиска нужной записи. При работе с базой данных через форму для удобства поиска записи с нужным значением поля можно воспользоваться операциями поиска и сортировки. Для этого необходимо, установив курсор в поле, использовать кнопки Найти (Find), Сортировка по возрастанию (Sort Ascending), Сортировка по убыванию (Sort Descending) или соответствующие команды меню Правка|Найти (Edit|Find), и Записи [Сортировка (Records|Sort). После открытия диалогового окна Поиск и замена задается значение поля. В рассматриваемом примере, чтобы сделать текущей запись нужного договора, установим курсор в поле номера договора, нажмем на панели инструментов кнопку Найти (Find) и в открывшемся окне Поиск и замена (F'.nd and Replace) (рис. 6.23) зададим в качестве образца поиска номер нужного договора. После нажатия в этом окне кнопки Найти далее (Find Next) в форме отобразятся данные о заданном договоре.
Часть I. Основы технологии Microsoft Access
292
Поиск н замена Поиск
Замена
Образец:
Найти далее Отмена
ПОИСКЕ: Совпадение: Просмотр:
; гЮМ_ДОГ Поля целиком Все
v.
v|
Г" С учетом регистра
W С учетом формата попей
Рис. 6.23. Диалоговое окно поиска договора по идентификатору
Внимание Грубой ошибкой является попытка перейти к нужной записи путем ввода нового значения в поле идентификации текущей записи, например, нового значения номера договора в форму ДОГОВОР. Такие действия могут привести лишь к изменению значения идентификатора в текущей записи со всеми вытекающими последствиями.
Выборка документов Рассмотренные выше способы перехода по записям формы не обеспечивают пользователя достаточно удобным интерфейсом для выборки нужных документов. При работе с формами, используемыми для просмотра, корректировки и ввода данных из документов, возникает необходимость быстрого поиска документа, соответствующего задаваемым условиям. Для пользователя нужно организовать удобный диалог, в котором, работая с базой данных через форму, он сможет задавать условия отбора. Такие условия, например, могут задаваться для выборки документа по его номеру или по заданному временному диапазону дат документов. В общем случае может предусматриваться выборка данных по заданному идентификатору того или иного объекта (товара, покупателя, склада и т. п.) или по диапазону количественных показателей. Выборка документа по его идентификатору Рассмотрим организацию выборки нужных договоров по заданному номеру. Предусмотрим возможность ввода номера договора в интерфейсе пользователя.
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
293
Для этого в источнике записей основной части формы ДОГОВОРЫ С ПОКУПАТЕЛЯМИ в поле номера договора ком_дог определим параметр запроса [номер договора] (рис. 6.24).
И!* Инструкция SQL : построитель запросов
код_пок
А
ИНН НАИМ_ПОК АДРЕС _ПОК V,
ft. ][1Э](||]
|ном_дог
VjflATAJCr
^"i код_пок
||СУММА_ДОГ
^
•<
> г—
Поле; НОМ ЛОГ - ДАТА_ДОГ Имя таблицы: ДОГОВОР ДОГОВОР Сортировка: Вывод на экран: 0 0 Условие отбора; [Номер договора]
1
НДИМ ПОК ПОКУПАТЕЛЬ
1
р—
НОМ РСЧ ПОКУПАТЕЛЬ
АДРЕС ПОК ПОКУПАТЕЛЬ
0
Е
1 Ч
°
0
или;
<
>
Рис. 6.24. Источник записей основной части формы ДОГОВОРЫ С ПОКУПАТЕЛЯМИ
В этом случае при открытии формы будет выводиться диалоговое окно (рис. 6.25) для ввода значения параметра запроса (номер договора).
Введите значение параметра Номер договора
Рис. 6.25. Диалоговое окно ввода значения параметра запроса
После ввода нужного номера договора в форме будут доступны данные соответствующего договора. Однако для перехода к просмотру другого договора потребуется заново открыть форму. Для удобства пользователя желательно создание такого интерфейса, который обеспечит возможность выбора документа при постоянно открытой форме.
Часть I. Основы технологии Microsoft Access
294
Для этих целей может быть подготовлена форма интерфейса, в которую встраивается форма документа. Форма интерфейса должна включать элемент управления, который обеспечивает ввод значения параметра запроса. Создадим в режиме конструктора пустую форму (без источника записей) и присвоим ей имя "Выборка договоров". Создадим в ней несвязанный элемент управления: поле со списком. Список построим на таблице ДОГОВОР, из которой для формирования списка выберем поле номера договора. Полю со списком в его свойствах необходимо дать имя, совпадающее с названием параметра запроса: "Номер договора" (см. рис. 6.25). В надписи поля запишем обращение к пользователю: "Введите номер договора". Перетащим из окна базы данных форму ДОГОВОРЫ С ПОКУПАТЕЛЯМИ в область данных формы Выборка договоров. Полученный интерфейс в режиме конструктора приведен на рис. 6.26.
"^^ЗСВЗТЕТЯЯЯ^^ШЯЯЯШШЯЯввМ^^Щ 1
г
. i .
. i . z • 1 • 3 • i • 4 • 1 • 5 • 1 ' Б < i • 7 • i • 8 • i • 9 • 1 • 10 • i • 11 • i • 12 • 1 '13 • i > 14 • i • 19 • i • К " • 17 • _^jl
* Об пасть данных
'Ввеитеном^рлпговоо; ! j
1
1
—
J
1
—
1ГппгЪпмый -1 ^__
—
I
i
_—
.
!—,
• . , . , . , . 2 • 1 • 3 • i • 4 • i • 5 • i ' S • i • 7 • i • 8 • i ' Э • i • Ш • i ' 1! ' i ' 12 > i ' 13 • i • 14 • i • 15 ' ' • № JM
* Заголовок формы
3
* Область данных 4
5
!Ном = р дог ворЦНОМЛОГ 1
Наи
i
T-i'Ei?
3
8
э
1 •"
i
Цата
!|ДЛ,ТАЛОГ
/дрес
i|AQPEC ПОК
\ ПЛАН полимерная
, , . | .
7
i
. ,, , ние'|НАИМ ПОК . 2 •
.
• 3 • 1 • * • i • 5 • i • S •
• 1 •
• в • i • Э • i •Ю •
!
.. „
• 11 • i • 12 •
j • 13 • ' • 1* •
•_*
•f Заголовок фодмы КОДДС варф Срок поставки 1 -* Область данных КОД_ТОВ |СРОК ПОСТ i i i i i 1 •* Примечание формы
\ моличаство поставки Наименование тоЫ Цена
i
|КОЛ ПОСТ i i
i
i
|НАИМ ТОВ Т i i
1
i
|ЦЕНА —
*.
-, |
Ч >!
Рис. 6.26. Интерфейс для выборки договоров по задаваемому а диалоговом окне номеру договора
В режиме формы при выборе из списка номера нужного договора он отобразится во встроенной форме ДОГОВОРЫ С ПОКУПАТЕЛЯМИ (рис. 6.27).
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки Ш Выборка договоров .
РП^^С]
-31 Введите номер договора
>
-iep договор |Д222
• ! i
I-
упатель
Дата
[Компьютер мер
Адрес
Код товара Срок поставки > [ТОО!
Количество
1 |
J
Ш.±±
1
П^НВШ ]ВИТЕ дззз иi• Наименее
100 |Монитор1 2
Д222
Д555 Дббб
а
— s
12 JMoHMT 0 p17LG
j
87 00 3
S - ''
|Т001
|
6587,00р.
|TD03
j
г
\
10 jHOOMaxtorSQGB
|
2590,00р.
|TOQ4
1
3
1
30 jKopriHcMimTower
\
\ 916,00р.—
i • .тисы И | -• S | Запись:
\4 | .| ||
jj
Г > | И |Mfr| из 4 '
f f. \ м |>.*| из i
i! jj J
____]
, |
i
<
i
d Ч
Рис. 6.27. Интерфейс, обеспечивающий выборку нужного договора при использовании поля со списком Выборка документа по диапазону дат
Для фор\ты ДОГОВОРЫ С ПОКУПАТЕЛЯМИ предусмотрим возможность ввода пользователем диапазона дат заключения договоров и выборки соответствующих договоров. Для этого подготовим интерфейс, обеспечивающий выборку документов по диапазону дат, по аналогии с подготовкой интерфейса, рассмотренной в предыдущем примере. В запросе-источнике записей основной части формы (см. рис. 6.24) зададим в поле даты заключения договора ДАТА_ДОГ два параметра запроса. Параметры определим В выражении Between [ДатаНачальная] and [ДатаКонечная.], записанном в условии отбора. В режиме конструктора создадим форму без источника записей, в которой разместим два поля типа Свободный (Unbound). Одному полю присвоим ИМЯ параметра Д а т а Н а ч а л ь н а я , второму— ДатаКонечная. НаЯПИСИ полей
изменим на: Дата начала и Дата окончания соответственно. Перетащим из окна базы данных форму ДОГОВОРЫ С ПОКУПАТЕЛЯМИ в область данных формы. В режиме формы при вводе дат начала и конца диапазона во встроенной форме отобразятся выбранные договоры (рис. 6.28). Чтобы для ввода двух дат использовать календарь, необходимо подготовить процедуры на VBA. Разработка таких процедур показана в главе 15.
296
Часть I. Основы технологии Microsoft Access Ш Выборка договоров по диапазону дат
•'• '-
-
ПРОСМОТР ДОГОВОРОВ Задайте период для выборки договоров loi.oi.2003
Дата начала
|
Дата окончания
\
|oi.oi.20Q4
Номер договор Д111
Дата
j
Покупатель
Апрес
[Ладожский, 33
Перспектива
Код товара Срок поставки
|
|Т001
|
Е
|
ITOOI
!
з
[
1
|
3
|
|Т002 Запись: J 1 1 ( J J Запись; 11 | •
3
Количество Наименование товара Цена
(ТО 01
|Т002
1
08.01.2003
|
100 |Монитор 17LG
6587,00р.
20 (Монитор 17LG
зо
6 567.00р.
(Монитор 17LG
j
6537,00р.
50 (FDD 3.5
|
363,00р.
10 (FDD 3.5
|
363,00р.
Г К (И |>#]из 5 Г > | И |»*j из 2
J
21
,
Рис. 6.28. Интерфейс, обеспечивающий выборку документов по диапазону дат
ЗАДАНИЕ 1 Создайте интерфейс для ввода в базу данных накладных на отгрузку товаров. Основные элементы интерфейса показаны в форме на рис. 6.29. При создании формы произведите действия, аналогичные рассмотренным для формы по договорам. В результате загрузки в БД данных по накладным должны создаваться только записи таблиц НАКЛАДНАЯ и ОТГРУЗКА. В форме необходимо предусмотреть только отображение справочных данных по договорам, покупателям и товара?,!, без возможности ввода или изменения данных. Осуществите проектирование интерфейса для загрузки данных документа "Накладная" (см. рис. 2.6 главы 2) в соответствии с технологией загрузки базы данных: П определите общую структуру составной формы в соответствии с подсхемой данных для формы, приведенной на рис. 6.30; П разместите реквизиты в проекте формы так, чтобы обеспечить удобный ввод данных из документа и отображение справочной информации. Выполните конструирование экранной формы, через которую будут осуществляться ввод, добавление и изменение записей таблиц НАКЛАДНАЯ и ОТГРУЗКА.
Глава 6. Разработка интерфейса для ввода, просмотра и корректировки...
297
& НАКЛАДНАЯ
НАКЛАДНАЯ N
0001
Склап грузоотправитель
Грузополучатель Коя
Наименование
[Главный
Адрес скл. (Мичцринская, 1 5
ИНН наименование Адрес
jnCOl
1778957651 1Компьютео маокет |Еитебскея. 1 2
Телефон
|(В1 2)3^5-2345
НОМ JO" !ЗПГ Дата
Рис. 6.29. Форма, содержащая основные элементы интерфейса работы с документом "Накладная"
Загрузите данные из документа "Накладная" с помощью построенной формы.
htCW_HAKJI
код_ск
ДДТД_ОТГ 1-ЮМ_ДОГ СУММА НАКЛ
Таблицы объекты загрузки Рис. 6.30. Подсхема для составной формы по работе с накладными
298
Часть I, Основы технологии Microsoft Access
Контрольные вопросы
1. В какой последовательности загружаются таблицы базы данных? 2. Какой объект нужно использовать для первоначальной загрузки и корректировки взаимосвязанных таблиц базы данных? 3. В каких отношениях, как правило, находятся записеобразующие таблицы (таблицы-источники) основной и подчиненной частей формы? 4. Может ли подчиненная форма в свою очередь включать подчиненную форму? 5. Какие поля записеобразующей таблицы должны быть обязательно включены в подчиненную форму, чтобы через нее можно было вводить новые записи? 6. Можно ли через многотабличную форму осуществить ввод данных сразу в несколько таблиц? 7. Каким требованиям должен отвечать интерфейс пользователя для работы с базой данных? 8. Что требуется определить при проектировании интерфейса для работы с данными базы? 9. Какими средствами целесообразно создавать интерфейс для подготовки и ввода данных документа? 10. Какие элементы используются при создании удобного интерфейса для работы с данными? 11. Можно ли через форму НАКЛАДНАЯ ввести запись об отгрузке товара, отсутствующего в таблице ТОВАР? 12. Какие таблицы можно дополнить данными при работе в форме ДОГОВОР? 13. Как обеспечить защиту полей справочных данных в форме от непреднамеренных изменений? 14. Как заблокировать в форме поле от изменения данных? 15. Какие значения содержит поле со списком Код товара, определенное в форме НАКЛАДНАЯ? 16. В запись какой таблицы вводится значение, выбранное в поле со списком Код товара в форме НАКЛАДНАЯ? 17. Откуда может получать значения поле со списком? 18. Где хранится информация об источнике данных для поля со списком? 19. Где хранится имя поля, в которое должно вводиться значение, выбранное в списке? 20. Какое свойство приводит к открытию формы в режиме добавления записей, при котором невозможен просмотр ранее введенных записей?
Глава 6. Разработка интерфейса для ввода просмотра и корректировки...
299
21. Как обеспечить выборку нужного документа из базы по его идентификатору? 22. Можно ли создать интерфейс, обеспечивающий выбор нужных документов при постоянно открытой форме документа? Ответы
1. Сначала главные, затем подчиненные таблицы. 2. Многотабличную форму. 3. Один-ко-многим.
4. Да. 5. Все поля, составляющие ключ и не представленные в основной части формы. 6. Да.
7. Интерфейс должен быть построен на основе форм, в которых, на ряду с данными, подлежащими загрузке, отображаются ранее загруженные справочные данные. 8. Спроектировать подсхему данных формы с указанием роли таблиц и макет формы с указанием связи элементов формы с полями таблиц. 9. Мастером форм с последующей доработкой конструктором. 10. Кнопки управления, поля со списком, вычисляемые поля, календарь.
11. Нет. 12. ДОГОВОР И ПОСТАВКА_ПЛАН.
13. Заблокировать поле от изменения данных. 14. В свойствах поля на вкладке Данные (Data) в строке Блокировка (Locked) выбрать значение Да (Yes). 15. Значения из поля Код товара таблицы ТОВАР. 16. В поле код товара текущей записи таблицы ОТГРУЗКА. 17. Из таблицы, запроса, фиксированного набора значений. 18. В свойствах поля со списком на вкладке Данные (Data) в строке Источник строк (Row Source). 19. В свойствах поля со списком на вкладке Данные (Data) в строке Данные (Control Source). 20. Свойство формы Ввод данных на вкладке Данные. 21. В запросе — источнике записей формы документа предусмотреть параметр запроса. 22. Да, путем включения формы документа в несвязанную форму с полем для ввода значения условия отбора.
Глава 7
Сводные таблицы и диаграммы. Анализ данных Сводные таблицы и диаграммы предназначены для интерактивного анализа данных различной сложности и объема. Они позволяют провести глубокий и всесторонний анализ данных простыми удобными средствами, практически несколькими щелчками мыши. Результатом решения различных задач, как правило, являются двумерные таблицы с многократно повторяющимися данными. ^
Замечание
\
Даже нормализованные таблицы содержат повторяющиеся данные, такие как ключи связи. Например, в рассматриваемом примере базы данных подчиненная таблица ОТГРУЗКА содержит ключи связи с таблицами ТОВАР и НАКЛАДНАЯ, которые многократно повторяются. Объединение таблицы ОТГРУЗКА с таблицами ТОВАР и НАКЛАДНАЯ дает таблицу с более полными сведениями, необходимыми при решении задач, и с большим числом повторяющихся описательных данных.
Просматривать и анализировать такие таблицы очень сложно. Сводные таблицы являются многомерными, и это позволяет представлять данные, сгруппированные по различным координатам. Например, на рис. 1.3 в главе I была представлена сводная таблица, в которой можно подсчитать суммарное количество отгруженного по любому из товаров по различным покупателям и договорам по всем или некоторым месяцам, кварталам, годам. Благодаря интерактивности сводных таблиц и диаграмм можно изменять представление данных для просмотра дополнительных подробностей или вычисления различных итогов, таких как количество или среднее значение. Источником данных для сводной таблицы и сводной диаграммы может быть не только таблица или запрос, но и базовый источник данных формы, в проекте Access — представление, сохраненная процедура или пользователь-
Глава 7. Сводные таблицы и диаграммы. Анализ данных
301
екая функция. Сводная таблица только использует данные источника. Изменять данные источника через сводную таблицу невозможно. Сохранив сводную таблицу на странице доступа к данным, вы предоставите возможность просмотреть ее любому пользователю, на компьютере которого установлен Microsoft Internet Explorer. Процедура сохранения сводной таблицы на странице доступа к данным сводится к выполнению команды Файл|Сохраннть как и выбору места расположения страницы. Команда выполняется при отображении на экране сводной таблицы. Существует возможность создания интерактивной сводной таблицы на странице доступа к данным.
Режим сводной таблицы В Access таблица может быть представлена не только в режиме конструктора или таблицы, но и в режиме сводной таблицы или сводной диаграммы. Для представления и управления данными в сводной таблице пользователь имеет возможность создавать и быстро модифицировать ее макет, выбирая и перемещая поля из раскрывающегося списка полей таблицы-источника в рабочую область. Макет сводной таблицы позволяет отображать различные подмножества данных, рассчитывать и сравнивать итоговые значения для выбранных элементов данных, Режим сводной диаграммы предназначен для графического анализа данных таблицы. В режимах сводной таблицы и сводной диаграммы могут открываться также запросы и формы. В базах данных SQL Server в режимах сводной таблицы и сводной диаграммы могут открываться представления, сохраненные процедуры и функции.
Разработка сводной таблицы для таблицы базы данных Рассмотрим таблицу ОТГРУЗКА в режиме сводной таблицы. Чтобы открыть таблицу ОТГРУЗКА в этом режиме, выберите ее в окне базы данных, щелкните на кнопке Открыть и затем для перехода из режима таблицы в режим сводной таблицы выберите его в списке кнопки Вид. При первом открытии таблицы в режиме сводной таблицы в ее рабочую область не включено ни одного поля таблицы. На рис. 7.1 показана таблица ОТГРУЗКА, первый раз открытая в режиме сводной таблицы.
Часть I. Основы технологии Microsoft Access
302
Ш ОТГРУЗКА : таблица
Список полей сводной таблицы
+ |-j| Код накладной + Д] Код склада + Д] Код товара V Д Количество отгружено т [J] Сумма отгружено
Рис. 7.1. Пустой макет сводной таблицы ОТГРУЗКА и список полей источника записей
Размещение полей в макете сводной таблицы Для создания макета следует переместить поля в рабочую область сводной таблицы. Рассмотрим возможности режима сводных таблиц, последовательно создавая различные макеты для анализа итоговых данных в различных измерениях. Допустим, необходимо подсчитать общее количество каждого из товаров. Перетащим из списка полей сводной таблицы поле код товара в область строк. Если список полей не открыт, нажмите кнопку Список полей (Field List) на панели инструментов Сводные таблицы (Pivot Table View). Уникальные значения кодов товара составят заголовки строк сводной таблицы. Для размещения в сводной таблице строк со значениями количества отгружаемого товара следует переместить соответствующее поле в область деталей. В области деталей размещаются поля, по данным которых будут подводиться итоги. Как правило, это числовые данные. После таких изменений макет примет вид, представленный на рис. 7.2. В этом макете в первой колонке только один раз отображен код товара, а значения количества отгруженного сохранены в том же виде, что и в исходной таблице. Таблица ОТГРУЗКА в режиме таблицы представлена на рис. 7.3. Добавлять поля в области сводной таблицы можно также с помощью кнопки Добавить в (Add to), размещенной в нижней части окна списка полей (см. рис. 7.2).
Глава 7. Сводные таблицы и диаграммы. Анализ данных
303
IГЗ -IX I-1 Список попей сродной таблицы Перетащите в таблицу ОТГРУЗКА Код товарл *• :+
TDQ1
Количество отгружено
Y
[Д Код накладной [Д Код склада [J] Код товара Д| Количество отгружено [Л Сумма отгружено
Т002
тооз Т005
Рис. 7.2. Сводная таблица с кодами товаров в заголовках строк и перечнем всех строк с количествами в области данных
• ОТГРУЗКА :. таблица Код накладной
— —
BBS
Код склада
Код товара
Количество отгружено
] *i
* Н002
С01
Т001
5
+ HD02
;СОЗ
Т001
2
* НООЗ
CD1
Т001
* НООЗ
.CQ3
Т001
2 '
TOQ1" "
2 "2
* Н004'
CQ1
* Н002
CQ2
Т002
5
* НООЗ
С02
Т002
10
* Н004
С02
Т002
10 -
* Н002
СОЗ
ТООЗ
+ Н002
' С02
тооз
* Н004
С02
ТООЗ
1
+ HQ01
С01
Т005
20
+.Н001
С02
Т005
4
X * HOD2
С02
TOQ5
В "10!"
—
* НООЗ
;
С02
TQQ5
- Н001
СОЗ
Т006
* Н002
СОЗ
За пись: И Н 1 1
15
3
а
5
тоое
Н И |
^*J ю 22
1.
jiL ™J
Рис. 7.3. Данные записей таблицы ОТГРУЗКА
v
jJ~
304
Часть I. Основы технологии Microsoft Access
Выделите добавляемое поле. Выберите одно из значений поля из раскрывающегося списка справа от кнопки Добавить в (Add to): П для добавления поля в область строк — Строки (Row Area); О для добавления поля в область столбцов — Столбцы (Column Area); П для добавления поля в область фильтра — Фильтр (Filter Area); П для добавления поля в область деталей — Детали (Detail Data); П для включения только сводных значений поля — Данные (Data Area). Нажмите кнопку Добавить в. Если кнопка Добавить в становится недоступной при выборе какой-либо области, то выделенное поле не подходит для использования в ней. Удалить поле из любой области сводной таблицы можно, выделив его и выполнив команду Удалить в контекстном меню или просто нажав на клавиатуре Delete. Поля, уже размешенные в сводной таблице, в списке полей выделяются жирным шрифтом.
Вычисление итоговых значений Для подсчета итоговых значений щелкните на заголовке поля Количество отгружено, выделив таким образом это поле. На панели инструментов Сводные таблицы (Pivot Table View) нажмите кнопку Автовычисления (AutoCalc) и в открывшемся списке выберите статистическую функцию Сумма (Sum). Выполнение команды приводит к отображению как промежуточных, так и общих итогов. Для отображения только итогов нажмите на панели инструментов кнопку Скрыть подробности (Hide Details) (LMJ). Сводная таблица с ВЫПОЛНеННОЙ ГРУППИРОВКОЙ ПО ОДНОМУ ПОЛЮ Код товара И ВЫВОДОМ ТОЛЬКО
итоговых суммарных количеств для каждого из товаров представлена на рис. 7.4. Список полей сводной таблицы после выполнения автовычисления дополняется группой Итоги, в которой представляются любые внесенные в сводную таблицу итоговые поля. В примере группа содержит поле Сумма "Количество отгружено" (рис. 7.4). Для удаления итогового поля достаточно щелкнуть на нем и выполнить в контекстном меню команду Удалить. Итоговое поле удаляется и из списка полей, и из сводной таблицы. Список функций, которые могут использоваться при автовычислении, представлен на рис. 7.5. Суммирование количества различных товаров не имеет смысла, поэтому скроем значение общего итога. Для этого сначала выделим столбец код товара, щелкнув на его заголовке. Затем щелкнем на панели инструментов по доступной теперь кнопке Итоги (1_Ы).
Глава 7. Сводные таблицы и диаграммы. Анализ данных
305
ОТГРУЗКА : таблица ^Перетащите в eger>.,'-?• •' r> s :-;••.-; ajjjvayo Код товара •*• Сумма "Количество отгружено"!
тот _
:
"~2э
Т002
" *
25
ТООЗ
• Е!
12 40 6
ТШ5 TUQ6'*
тое '
! ™й
и
ОТГРУЗКА
TiJ Итоги
^ Сумма "Количество отгружена Д] Код накладной [J] Код склада Ц Код товара Щ Количество отгружено Д] Сумма отгружено
13 Общие итогн|г|
130
Рис. 7.4. Выполнение группировки по одному полю и вывод только итогов в сводной таблице
Сумма Число Минимум Максимум Среднее Стандартное отклонение Дисперсия Смещенное стандартное отклонение Совокупность дисперсии Рис. 7.5. Список функций кнопки Автовычисления
Для отображения данных только о нужных товарах щелкните на стрелке, расположенной в правой части поля код товара, снимите флажок Все (АИ) и установите флажок у нужных товаров. Для отображения подробностей по одному из товаров щелкните по знаку плюс "+" в области значения с кодом товара. Знак минус "--" скроет эти подробности. Допустим, далее необходимо подсчитать общее количество каждого товара, отгруженного с каждого склада и со всех складов в целом. Изменим макет сводной таблицы, перетащив в область столбцов поле код склада. Выполнив эту единственную операцию, получим сводную таблицу с суммарными
Часть I. Основы технологии Microsoft Access
306
итоговыми значениями количества отгруженных товаров по каждому из складов и по всем складам в целом. Значение общего итога по каждому из складов не имеет смысла, поэтому целесообразно скрыть его в данной сводной таблице. Здесь также можно отображать или скрывать подробности произведенных расчетов. По сути, в таком макете сводной таблицы будут Отображены результаты ГРУППИРОВКИ ПО Двум ПОЛЯМ Код товара И Код склада (рис. 7.6).
Код склада
'"со Г'' . . . .
-Т
.
CD2 .
.
г
.
i . -
.
СОЗ .
.
.
..
[^..
I . . .
Общие итоги .
___
_
Т..Т . . . . .
....
Код товара т [Сумма "Количество: Сумма "Количество'Сумиа "Количество Сумма "Количество TGQ1 :
; 02 той"
а
Т005
ТЮБ" TQQ8
1
тшэ"
!
• г . -. . •
.•• э 20
о
Рис. 7.6. Выполнение группировки по двум полям в сводной таблице
Разработка сводной таблицы для запроса Рассмотрим создание сводной таблицы для запроса Отгрузка товаров, представленного на рис. 7.7. В этом запросе записи таблицы ОТГРУЗКА дополняются данными из главных по отношению к ней таблиц ТОВАР и НАКЛАДНАЯ, а также из таблиц ДОГОВОР и ПОКУПАТЕЛЬ. В результате образуется виртуальная таблица запроса с полными сведениями об отгрузках. Сводная таблица для запроса создается так же, как для таблицы базы данных. После перехода в режим сводной таблицы так же открываются пустой макет и список полей, доступных для использования. Перетащим в макет поле Наименование
товара
ДЛЯ образования строк, поле Номер
договора
для образования столбцов. В Область фиЛЬТра перетащим ПОЛе Д а т а отгрузки по месяцам.
Поле количество отгружено перетащим в область деталей для подсчета промежуточных и общих итогов для выбранных в строках, столбцах и фильтрах значений.
Глава 7. Сводные таблицы и диаграммы. Анализ данных
307
Отгрузка товаров : запрос на выборку
код_тов НАИМ_ТОВ ЦЕНД
номлог ДАТА^ЦОГ код_пок СУММА ДОГ
ЕЙ
СТАВКА _Н; .V
ном_НАкл код_ос ДАТА_ОТГР ном_дог гумМй НАКГ
ИОМ_НАКЛ
код_ск код_тое
КОЛ_ОТГР СУММА ОТГР
Попе: НАИМ ПОК Имя таблицы; ПОКУПАТЕЛЬ Сортировка: Вывод на экран: Условие отбора; или;
ном_дог ДОГОВОР
а
ДАТА ОТГР НАКЛАДНАЯ
в
НАИМ тое ТОВАР
0
0
КОЛ ОТГР ОТГРУЗКА
*
СУММА ОТГР ОТГРУЗКА
0
0
1
* '
>,
Рис. 7.7. Запрос на выборку для включения подробных сведений об отгрузках • • • • » riiiiii ana и* Отгрузка товаров ; запрос на выборку Дата отгрузки по месяцам -
Все
нон jior - 1 Д111
Д222 ДЗЗЗ Общие итс Г Н '. 1 Сумма "Количество Сумма "Количество Сумма "Количество Сумма "Кс .пичествс. Наименование товара CD-ROM Panasonic IDE
!
DIMM64MPC10Q
+_
FDD 3,5 ' HDD Maxtor 20GB Зв. Карта Genius LJv Монитор 17LG СканерАсег
"-* ! * 1
"24 5
"
16 15
1 10
'
Значение; 15 Итог : Сумма "Количество отгружено" Компонент строки: FDD 3,5 Компонент столбца: 0.222 Фильтр: Дата отгружи по месяцам = Все
40' 6 25 12 13 23 11
Рис. 7.8. Сводная таблица, источником данных которой является запрос Отгрузка товаров
Для вывода итогов в сводную таблицу выполним команду Автовычисления (AutoCalc) и функцию Сумма (Sum). В созданной сводной таблице (рис. 7.8) 11 Зак. 835
Часть I. Основы технологии Microsoft Access
308
можно проанализировать количество каждого из товаров, отгруженных по каждому из договоров, и по всем договорам в целом в разрезе дат отгрузки. Можно произвести анализ отгрузок по заданному товару, по заданному договору, за заданный период. В больших сводных таблицах удобно пользоваться подсказкой, высвечиваемой при подводе курсора к значению (см. рис. 7.8).
Работа с датами в сводных таблицах Поле Дата отгрузки имеет тип дата и поэтому в списке полей сводной таблицы Представлено Тремя строками: Дата отгрузки, Дата отгрузки по неделям И Дата отгрузки по месяцам (рИС. 7.9).
Список попей (.водной таблицы tj Отгрузка товаров + Д) HAMMJ10K ;+ Д] НОМ_ДОГ
Дата отгрузки по месяцам•*•
Щ2004 t.-figKBl -
h/ЯНБ
Н Д] Дата отгрузки 2 Дата отгрузки •~- Я Д ата отгрузки по неделям [||] Годы [U Недели Ш Дни [3 Часы [EJ Минуты [D Секунды
L+>[_12005
Отмена
-ШШШВЯСШЗЗ [3 Годы •[=] Кварталы ГЗ Месяцы
Щ Дн^ [3 Часы [JJ Минуты Щ Секунды +< []] Наименование товара £ Л Количество отгружено
Рис. 7.9. Отображение поля с датой в сводной таблице
В списке полей сводной таблицы предлагается выбор любых единиц измерения даты. Такое представление даты позволяет провести детальный анализ
Глава 7. Сводные таблицы и диаграммы. Анализ данных
309
в любом временном измерении и не требует от пользователя никаких действий по преобразованию даты в тот или иной формат. Поскольку в сводной таблице отгрузка товаров в качестве фильтра использовано поле Дата отгрузки по месяцам, для анализа данных не сложно выбрать любой период времени. На рис. 7.9 для анализа выбраны два месяца: январь и февраль 2004 года.
Использование нескольких полей в областях сводной таблицы В режиме сводной таблицы допускается использование нескольких полей в строках, столбцах, фильтре и области итогов. При этом поля, ближайшие к области итогов, называют внутренними полями. Остальные поля называют внешними. Пользователь имеет возможность менять местами внутренние и внешние поля. Перетащим поле с наименованием покупателя в область столбцов. Теперь в сводной таблице рассчитаны, помимо общих итогов по договорам, итоги по покупателям, которые могут иметь несколько договоров (рис. 7.10).
8Ё* Отгрузка товаров : запрос на выборну
OfellS
1лт.1 отгрузки по месяцам т 2004 |НДИМ_ПОК-* ;НОМ_ДОГ : В Компьютер ыаркет Д111
;Д322
.Итоги
|в Перспектива 'ДЗЗЗ
I Общие итоги
i Итоги
Наименование товар л ' Сумма "Кол^Сумма 'Кол Сумма 'Кол Сумма "Кол Сумма 'Кол Сумма "Код 24 1G" 40 40 CD-ROM Panasonic IDE -! •• 1 1 6 DIMM 64M PCIOd 5 15 15 FbD'35"" '_ "4 8 i . 11 HDD Maxtor 20GB Й 10 ' i ! 3 13 Зв. Карта Genius Liv 7 19 4 4 23 Монитор 17LG2^ 12 10 11 11 СканерАсег 1
Рис. 7.10. Сводная таблица с двумя полями в области столбцов
Для вычисления стоимости отгруженного по договорам покупателям и фирме в целом добавьте поле сумма отгружено в область деталей сводной таблицы, поставив его после поля количество отгружено и выполните команду Автовычисления (AutoCalc).
Часть I. Основы технологии Microsoft Access
310
Добавление полей в источник записей сводной таблицы Чтобы добавить новые поля в источник записей сводной таблицы, откройте запрос в режиме конструктора и перетащите их из схемы данных запроса в бланк. Если необходимо, добавьте новые таблицы в схему запроса. Открыв после этого запрос в режиме сводной таблицы, убедитесь, что ранее созданная сводная таблица сохранила прежний вид, а в списке полей отображены новые поля.
Форматирование элементов сводной таблицы Используя свойства элементов сводной таблицы (рис. 7.11), можно изменить ее формат, переименовать поля и выбрать шрифт, формат текста, числовых значений итоговых полей. Свойства
Формат Заголовки Отчет | Настройка Заголовки Область: 3_аголовок: | Сумма "Количество отгружено"! Формат:
Ж К Ч ^т Ш Щ р__
& - Ф ~ __j j_ __j
Дополнительные сведения Свойство Уникальное имя итога Имя итога Поле источника итога Тип итога
[Measures], [Итог 1 ] Итог! Количество отгружено Вычисляемый
Рис. 7.11. Свойства элемента сводной таблицы
Вычисляемые итоги и поля в сводной таблице Допустим, в сводной таблице необходимо сравнить стоимость отгруженного в рублях и в евро. Удалим из сводной таблицы запроса Отгрузка товаров (см. рис. 7.10) поле Количество отгружено, размещенное в области деталей. Для этого выде-
Глава 7. Сводные таблицы и диаграммы. Анализ данных
311
лим поле, щелкнув на его заголовке, и в контекстном меню выполним команду Удалить. Если детали скрыты, поле количество отгружено не отображается в сводной таблице. Выполните команду Подробности, чтобы отобразить поле. Для удаления итоговых значений количества отгруженного выберем в списке полей соответствующую строку и в контекстном меню выполним команду Удалить. Переместим из списка полей в область деталей сводной таблицы поле суюла отгружено. Выполним для этого поля команду Автовычисления (AutoCalc). Для расчета стоимости отгруженных товаров в евро добавим вычисляемое поле. На панели инструментов Сводные таблицы щелкнем на кнопке Вычисляемые итоги и поля (Calculated Totals and Fields) (Ll!il) и на строке Создание вычисляемого поля сведений. В открывшемся окне свойств (рис. 7.12) на вкладке Вычисление в поле Имя (Name) заменим выводимое по умолчанию значение Вычисляемое поле на итого в евро. Для формирования выражения [сумма отгружено]/35 используем кнопку Добавить ссылку на. Щелкнем на кнопке Изменить (Change), и результат отобразится в списке полей сводной таблицы и в самой сводной таблице. Дополним сводную таблицу рассчитанными по вычисляемому полю итоговыми значениями, выполнив команду Автовычисления (AutoCalc). Можно, не добавляя вычисляемого поля, дополнить сводную таблицу вычисляемыми итоговыми значениями. Выполним команду Вычисляемые итоги и поля (Calculated Totals and Fields) и выберем строку Создание вычисляемого итога. В открывшемся окне свойств на вкладке Вычисление сформируем выражение на основе ранее вычисленных итогов для поля сумма отгружено (СМ. рис. 7.12).
Изменим формат отображения вычисляемого итога. Для этого в свойствах поля на вкладке Формат выберем значение Денежный (евро) (рис. 7.13). Изменить выражение вычисляемого поля или параметры можно в любое время, открыв окно свойств соответствующей командой в его контекстном меню. Предположим, что в таблице ОТГРУЗКА не заполнено или отсутствует поле Сумма отгружено. Вычислим в сводной таблице стоимость отгруженного товара и итоговые значения стоимости. Удалим из области деталей и данных рассматриваемой сводной таблицы все поля. Выполним команду Вычисляемые итоги и поля (Calculated Totals and Fields) и выберем строку Создание вычисляемого поля сведений. В открывшемся окне свойств на вкладке Вычисление дадим вычисляемому полю имя "Стоимость в евро".
Часть I. Основы технологии Microsoft Access
312 Свойства Формат | Заголовки Вычисление
Отчет ] Настройка
Вычисление Имя: !итого в евро [Measures] . [Итог1]/35
Добавить ссылку на
[Сумма "Сумма отгружено" (Итог) Изменить
Рис. 7.12. Окно создания вычисляемого поля итогов •HHBHOi
Свойства
Формат | Заголовки | Вычисление \ Отчет ] Настройка | иощиб комзнды
X ' ftl 21
^____^
Элемент; |Итого в евро (Итог) Формат текста
Ж К Ч
s=- j | ^
Д
т
Шрифт; ]Arid Cyr
"jj jlCi
Число:
j Денежный (евро) Средний формат времени Формат яче Краткий формат времени Денежный Цвет фон денежмь,й (евро) Ширина с~
дофцф^р^ффф.-^^^^^^^^^^^^^^^^^^^^^^^цц^ Стандартный
л
^
Рис. 7.13. Окно определения формата вычисляемого итога
-
Используя кнопку Добавить ссылку на, сформируем выражение [ЦЕНА]* [кол отгр]/35. Щелкнем на кнопке Изменить (Change). В сводной
Глава 7. Сводные таблицы и диаграммы. Анализ данных
313
таблице отобразится созданное вычисляемое поле, а список полей дополнится новым именем. Выберем формат Денежный (евро), и значения вычисляемого поля отобразятся с ограниченным числом знаков после запятой и символом евро (€) после значения. Команда Автовычисления (AutoCalc) позволит получить промежуточные и общие итоговые значения стоимости отгруженных товаров. Чтобы команда стала доступной, выделите поле стоимость в евро. Для вывода данных о стоимости товаров, отгруженных в заданном месяце, пометим в списке фильтра дата отгрузки по месяцам, например, март. Для отображения данных только по покупателям, без разнесения сумм по договорам, щелкнем на знаке минус (—) у названий покупателей. При этом подсчет итоговых значений по-прежнему будет вестись с учетом всех договоров. Сводная таблица после выполнения всех перечисленных действий со скрытыми подробностями представлена на рис. 7.14. r
g11 Отгруэка_тоааров : запрос на выборку
Р-ЛЩ]!'*]
Дата отгрузки по месяцам т мар НАИМ_ПОК' HOMJЮГ-! В Компьютер маркет Ш Перспектива
:ОБщие итоги J
т
•Наименование това >а |Сумма ОУММ64М PC1QQ HDtf Maxtor 2QGB~"~ ~~ш Зв. Карта Genius Liv Монитор 17LG . -, '_ ~rj СканерАсег Общие итоги
t -;
1
..:+'•: ..
Стоимость тов Сумма "Стоимость тов|Сумма 'Стоимость тов """5Г,43€ 10,29 € 61 ,71 € 109,71 € 109,71 € Б7,63€ 67,63€ 376, 40 € 376, 40 € 752, 80 € 668, 00 € 6Б8.00 € 1 095, 83 € 564, 03 € 1 659, 86 €
Рис. 7.14. Сводная таблица с расчетом итоговых сумм за заданный месяц для покупателей
Пусть необходимо подсчитать, какой процент составляет стоимость товара, отгруженного покупателю, от общей стоимости отгруженного товара. Для решения этой задачи достаточно на сводной таблице отгрузка товаров (СМ. рИС. 7.14) щелкнуть На ЗаГОЛОВКе столбца Сумма "Стоимость товара",
затем на кнопке панели инструментов Отобразить как (Г^.) и в списке, открываемом по нажатию кнопки, выбрать значение Процент итогов по строке. Сводная таблица с итоговыми значениями в процентах от общих итоговых значений строки представлена на рис. 7.15.
Часть I. Основы технологии Microsoft Access
314
6^ Отгрузка_товаров
[НИшИш
запрос на выборку ж
J.IT.I отгрузки по месяцам мар НАИМ ПОК- НОМЛОГ' И Компьютер маркет 'И Перспекгива + -
'+ -
-
—— ;0бщие итоги .
+
: Г.'
^именование товара *• .Сумма "Стоимость то в] Сумм а "Стоимость тов[Сумиа "Стоимость TOBj ЫММ 64М PC1QO " Г~ ~"ВЗ,33% 16,67%~ ^ 100.00% HDD"Maxtor20GB" '*\ 100.00% 100.00% m Зв. Карта Genius Liv 100,00% 100.00% Монитор 17LG 50,00% 100,00% ""•:• 50,00% СканерАсег '"•:• 100,00% 100,00% Т 66,02% Общие итоги 33,96% 100,00%
Рис. 7.15. Сводная таблица с итоговыми суммами в процентах от общих итогов
Режим сводной диаграммы Если вы построили сводную таблицу, то переход к диаграмме потребует от вас только выбора соответствующего режима. Пусть запрос Отгрузка товаров в режиме сводной таблицы содержит в области строк Поле Наименование товара, В области столбцов ПОЛЯ Наименование покупателя И Номер договора, В области фильтра Дата отгрузки по месяцам, в области данных сумма отгружено. Выберите в списках элементов полей строк, столбцов и фильтра значение Все (АН). Для перехода из режима сводной таблицы в режим сводной диаграммы выберите его в списке кнопки Вид (View). В рассматриваемом примере наименования товаров размещаются вдоль горизонтальной оси. Покупатели и договоры, по которым отгружался товар, представляются на диаграмме рядами. Каждый ряд имеет свой цвет. Категорию составляют элементы полей Наименование покупателя И Номер договора (ряды), отобранные для одного товара. По вертикальной оси указывается, на какую сумму отгружен товар покупателю по договору. Щелчком мыши на кнопке Добавить легенду (Show Legend) отобразим на диаграмме название каждого из рядов. В рассматриваемом примере в качестве названий ИСПОЛЬЗОВаны Наименование покупателя И Номер договора. Для изменения названия оси щелкнем правой кнопкой мыши на ней и на кнопке Свойства. В открывшемся окне выберем вютадку Формат (Format) и
Глава 7. Сводные таблицы и диаграммы. Анализ данных
315
введем заголовок для оси значений "Стоимость товара", для оси категорий -• "Наименование товара". Выберем другие параметры форматирования Изменим масштаб оси значений. Выделим ось значений и откроем окно свойств. Перейдем на вкладку Масштаб. В разделе Диапазон изменим значение максимума, установив соответствующий флажок и новое значение. В примере 100 000 заменим на 80000, поскольку самое большое значение оси не превышает этой величины. Аналогично можно изменить масштаб оси категорий, задав максимальное число выводимых наименований товара и шаг подписей. Сводная диаграмма Отгрузка_товаров после внесенных изменений примет вид, показанный на рис. 7.16.
|!Р Оттрузиа_тоааров : запрос на выборку
Qfo |[Х]
Дата отгрузки по месяцам т i Псе Сумм.1 "Сумма отгружено" О
Ряд Компьютер паркет • Д1 1 1 - Монитор 17LG Сумма "Сумма отгружено": 79 04^00р,
а:
1 1 о г3
НДИМ ПОК - !
ном jor * i
N
• Компьютер маркет - Д1 1 1
1 ... fri Г Г, О LLJ
О
'Я S ° ° <-> Я
i
0.
о.
s
5 о °F Q
1 5 1 Q
ч-
i/J
" о
и-
Q
[D
£ R \_
>
э ^
5 ^
-5
а
0)
-1 Ц
о te О
S
„ оP. о Л з: = о
е£
5
D Перспектива - ДЗЗЗ
«ъ:
и
Е
Наименование то« арД Наименование товара Рис. 7.16. Запрос Отгрузка_тоааров в режиме сводной диаграммы
Подсказка содержит значения столбца (наименование покупателя и номер договора), строки (наименование товара) и суммарное значение стоимости товара для выбранного ряда.
Часть I. Основы технологии Microsoft Access
316
Сводную диаграмму можно представлять в различных видах. Например, если необходимо, чтобы на диаграмме была видна суммарная стоимость отгруженного товара, в окне сводной диаграммы щелкните на кнопке панели инструментов Тип диаграммы (Chart Type) и выберите тип Гистограмма (Column), которая с накоплением отражает вклад каждой категории в общую сумму (рис. 7.17). Если кнопка не отображена на панели, предварительно выделите область диаграммы, щелкнув в любом месте окна сводной диаграммы, не занятом каким-либо элементом. Свойства Общие Тип
Границы и заливка Группы рядов
Данные Отображение
| | j Гистограмма ^Г Линейчатая [L>- График [С* Гладкий график ф Круговая \££_ Точечная ?; Пузырьковая |Д С областями Q Кольцевая ^ Лепестковая IjjJJIL Биржевая (§) Полярная
Гистограмма с накоплением отражает вклад каждой категории в общую сумму.
Рис. 7.17. Окно выбора типа диаграммы
Диаграмма примет вид, представленный на рис. 7.18. На этой диаграмме все ряды категории размещены в одном столбце, что позволяет видеть общую стоимость отгруженного товара. Масштаб оси значений при этом пришлось увеличить до величины, равной 160 000. Как и в сводной таблице, в диаграмме можно выбирать из списков полей строк, столбцов и фильтра значения, для которых нужно отобразить итоги на диаграмме. Макет сводной диаграммы также легко настраивается в интерактивном режиме. Сводная диафамма и сводная таблица изменяются син-
Глава 7. Сводные таблицы и диаграммы. Анализ данных
317
хронно, т. е. все изменения, сделанные в сводной таблице, автоматически отображаются в сводной диаграмме, и наоборот.
lUP
й? Отгружаете варов : запрос на выборку ! Дата отгрузки по месяцам
w
Все
Сумма "Сумма отгружено"
о to I зс
&
8
• 4
8 : 1
о |
25000,00р.-
HAHMJTOK_jJ
HOMjior ' ! D Перспектива -ДЗЗЗ
в 1 • • Компьютер маркет - Д222 •gg'l ' £ ' g W ~
<J
С,
Я
5
3
S
«
^
t
'И
П Компьютер маркет - Д1 1 1
1 1 i1!1 fi Q-
S
s
Q
§ i Q
Q
™
s
|
P
g I
&
ё
s
I
.n
Наименование товара Наименование товара ' Рис. 7.18. Сводная диаграмма типа Гистограмма с накоплением сумм по товарам
Поменяем местами поля в области столбцов и поле в области строк. Диаграмма примет вид, представленный на рис. 7.19. На этой диаграмме рядами категорий являются все виды отгружаемых по договору товаров. Размещение рядов категории в одном столбце позволяет видеть общую стоимость товара, отгруженного по договору. Диаграмма дополнена заголовком. Откройте свойства области диаграммы и в разделе Добавление щелкните на значке Добавить заголовок. По умолчанию в режиме сводной диаграммы отображаются итоговые значения по данным из источника. Для отображения на диаграмме значений отдельных записей вместо итоговых значений по группам записей нужно в свойствах диаграммы на вкладке Данные (Data) установить флажок Отображать детали (Show Details). При этом на вкладке Общие (Common) в поле со
Часть I. Основы технологии Microsoft Access
318
списком Элемент (Element) должен быть выбран элемент Область диаграммы (Cart Area). Установка и снятие флажка Отображать детали (Show Details) приводит к очистке элементов форматирования и частичной или полной очистке макета диаграммы и соответственно сводной таблицы.
'"'
ЁГ Отгруэка_то паров : запрос на выборку
<J
Стоимость отгруженного по договора/и [Дата отгрузки по месяцам " Шее Сумма "Сумма отгружено" О
|
гн '
И
Наименование товара т ; • Сканер Асе г Ш Монитор 17LG
о
D HDD Maxtor 20GB ;я
*J
§
• 3 в . Карта Genius Liv
HHI
0,00р.-
pf
t-r
Компьютер Компьютер „ ' Перспектива марке т маркет Д1 1 1
Д222
D FDD 3.5
• DIMM64MPC100 Ш CD-ROM Panasonic IDE
ДЗЗЗ
НОЬЩОГ ' :НАИН ПОК "
Рис. 7.19. Сводная диаграмма типа Гистограмма с накоплением сумм по договорам
Сводная таблица и сводная диаграмма могут распечатываться как отчет с заголовком, датой выдачи и номерами страниц. Перед распечаткой они могут быть предварительно просмотрены на экране. Средства форматирования сводных таблиц и диаграмм позволяют придать отчету вид, соответствующий требованиям пользователя. Контрольные вопросы
1. Можно ли, используя сводную таблицу, изменять данные ее источника объекты базы? 2. Какие объекты базы данных Access могут быть представлены в режиме сводной таблицы и диаграммы?
Глава 7 Сводные таблицы и диаграммы. Анализ данных
319
3. Выполнение какой команды позволяет перейти к созданию сводной таблицы? 4. Назовите области сводной таблицы, в которые могут быть размещены поля объекта? 5. Как открыть список полей, доступных для использования в сводной таблице? 6. Какая команда позволяет включить в сводную таблицу итоговые строки для поля деталей? 7. Возможно ли использование нескольких полей источника в одной области сводной таблицы? 8. Возможно ли размещение в области деталей вычисляемых полей? 9. Отразятся ли изменения в данных источника при открытии ранее созданной сводной таблицы или диаграммы? Ответы
1. Нет. 2. Таблицы, запросы, формы. 3. Вид|Сводная таблица (объект должен быть открыт в режиме просмотра или конструктора). 4. Область строк, столбцов, фильтра, итогов или деталей. 5. Кнопкой Список полей. 6. Автовычисления для выделенной области деталей и Итоги для выделенного столбца или строки.
7. Да. 8- Да. 9. Да.
Глава 8
Разработка отчетов Средства Access по разработке отчетов предназначены для конструирования макета отчета, в соответствии с которым может быть осуществлен вывод данных в виде выходного печатного документа. Эти средства позволяют создавать отчет сложной структуры, обеспечивающий вывод взаимосвязанных данных из многих таблиц, их группировку, вычисление итоговых значений. При этом могут быть выполнены самые высокие требования к оформлению документа. Перед началом конструирования отчета пользователь должен спроектировать макет отчета. При этом определяются состав и содержание разделов отчета, размещение в нем значений, выводимых из полей таблиц (запросов) базы данных, и вычисляемых реквизитов, определяются поля, по которым нужно группировать данные. Для каждого уровня группировки определяются заголовки и примечания, вычисляемые итоговые значения. Кроме того, оформляются заголовки и подписи реквизитов отчета. Определяется также порядок вывода данных в отчете. Отчет может создаваться с помощью мастера или в режиме конструктора отчетов. Во многих случаях удобно использовать мастера отчетов. Созданный мастером отчет можно доработать в режиме конструктора. При необходимости вывода в отчете результатов решения задачи в качестве основы для отчета может быть использован многотабличный запрос. На запрос могут быть возложены наиболее сложные виды выборки и предварительной обработки данных. Разнообразные возможности конструктора отчетов позволяют легко структурировать и оформить полученные в запросе данные.
Основы конструирования отчетов В данном разделе рассматривается типовая структура отчета в окне конструктора и назначение кнопок панели инструментов конструктора отчетов. Режим конструктора отчетов во многом похож на режим конструктора форм. Панель элементов, которая активно используется при конструирова-
Глава 8. Разработка отчетов
321
нии отчета, аналогична панели элементов, используемой при разработке форм. Эта панель элементов приведена в главе 5 на рис. 5.5.
Окно конструктора отчетов Создание и изменение макета отчета осуществляется в окне конструктора отчетов.
Разделы отчета При создании отчета в режиме конструктора в окне первоначально отображаются пустые разделы отчета, как показано на рис. 8.1.
Р j j
W Отчет1 : отчет
•
^Г][
Is
• i • 1 • i • 2 • i • 3 • i • * • i • 3 • i_l
•f Заголовок отчета выводится только в начале отчета <Вер сний ко понтнт /л ^^^^
*06г асть дг иных
1:
J
2
J
*Ни» НИЙ1
содержит данные из таблиц и запросов
OHTMTV л
J *При чечани > отчет 4|
выводится в верхней части каждой страницы
1
выводится в нижней части каждой страницы В
7
1
выводится только в конце отчета
Рис. 8.1. Разделы отчета в режиме конструктора отчетов
Наличие этих разделов, а также их удаление или включение определяются командами меню Вид| Колонтитулы (View Page Header/Footer) и Вид) Заголовок/примечание отчета (View|Report Header/Footer). Для этих же целей можно использовать соответствующие кнопки панели инструментов конструктора отчетов (рис. 8.2). При создании отчета его разделы нужно заполнить элементами в соответствии с разработанным пользователем проектом отчета. В заголовок помещается текст из шапки макета отчета. В верхний и нижний колонтитулы обыч-
322
_
Часть
I.
Основы
технологии
Microsoft
Access
но помещают надписи с поясняющим текстом, в том числе заголовки столбцов отчета, номера страниц и даты. При определении содержания этих разделов следует исходить из требований к оформлению отдельных страниц отчета. В области данных размещаются поля таблиц базы данных или запросов. При необходимости группировки записей по полю в окно конструктора отчетов могут быть добавлены разделы Заголовок группы (Report Header) и Примечание группы (Footer). В заголовке группы, как правило, размещаются поля, по которым производится группировка. В примечании группы могут быть размещены выражения для подведения итогов по группе. Допускается до 10 уровней группировки выводимых записей.
Элементы разделов отчета В процессе конструирования разделы отчета заполняются элементами в соответствии с планируемым макетом отчета с помощью команд меню или кнопок панели инструментов конструктора отчетов и панели элементов. Поля с неповторяющимися значениями размещают в Области данных (Detail), которой можно придать вид табличной части отчета. Поля с повторяющимися значениями, по которым производится группировка записей, целесообразно размещать в заголовке группы. Элементами разделов отчета, кроме полей таблиц или запросов, на которых строится отчет, являются также тексты подписей, кнопки управления, внедряемые объекты, линии, прямоугольники и т. п. Для каждого из элементов имеются соответствующие кнопки на панели элементов. Назначение кнопок панели элементов было показано на рис. 5.5 в главе 5. Для каждого элемента, раздела и отчета в целом могут быть уточнены свойства. Технология размещения элементов и определения их свойств аналогична используемой в конструкторе форм.
Панель инструментов конструктора отчетов В процессе конструирования отчета используются команды меню, панель инструментов Конструктор отчетов (см. рис. 8.2) и панель элементов. Панель инструментов конструктора отчетов появляется, когда осуществляется переход в режим конструирования отчета при первоначальном создании или при внесении изменений в макет отчета.
v
Замечание
^
Кнопка Параметры панелей инструментов позволяет перейти к окну настройки или списку кнопок панели инструментов (см. рис. 8.2). Снимая или устанавливая флажки в этом списке, можно добавлять или удалять кнопки с панели инструментов.
Глава 8. Разработка отчетов
323
баеить или удалить кнопки- Канет о VKTOD отчетов конструктор отчетов
•4..Л
Настройка..,
Сохранить
Ctrl+5
Поиск файлов... Печать Параметры панелей инструментов
Предварительный просмотр Вьрезать
Ctrl+X
Колировать
Ctrl+C
Вставить
CW+V
Формат по образцу Отменить Вернуть Гипврссылка.,.
СЫ+К
С_писок попей Панель элементов Соцтировка и группировка Авто£ормат.,, Программа Свойства
Alt-t-ENTE!^
Построить,.. QKHoSajbi данных
F'.l
Создать объект Справка: Microsoft Office Access
1=1
Сброс панели
Рис. 8.2. Назначение кнопок панели инструментов конструктора отчетов
Однотабличные отчеты Рассмотрим технологию создания однотабличного отчета на примере получения списков покупателей по городам. Пусть в результате проектирования макета отчета Список покупателей определены перечисленные ниже требования к отчету. П Макет формируемого отчета должен иметь вид в соответствии с рис. 8.3. На макете показано оформление списка покупателей для одного города. В отчете должны последовательно выводиться со своими заголовками списки покупателей для каждого города. Список покупателей каждого города должен начинаться с новой страницы. Записи о покупателях должны выводиться в алфавитном порядке. П При формировании отчета необходимо рассчитать число покупателей для каждого города и отобразить его в отчете. О Вывод названия отчета должен производиться на каждой странице отчета.
Часть I. Основы технологии Microsoft Access
324
Список покупателей г. Название города Фирма
Код
Банк
Номер счета
Всего покупателей Покупателей
Рис. 8.3. Проект макета для создания однотабличного отчета со списками покупателей по городам
Создание однотабличного отчета с помощью мастера Для создания отчета выберем в окне База данных (Database) вкладку Отчеты (Reports). Чтобы сразу перейти к созданию нового отчета, выберем на вкладке пункт Создание отчета с помощью мастера (Create report). В последовательно открывающихся окнах мастера Создание отчетов выберем: G таблицу ПОКУПАТЕЛЬ и поля код_пок, ндим_пок, БАНК, НОМ_РСЧ, АДРЕС_ПОК, на основе которых будет формироваться отчет; П поле АДРЕС_ПОК, в котором хранится название города, и добавим его в уровень группировки; 1
Г] порядок сортировки записей по полю ндим_пок в порядке возрастания; П макет отчета Ступенчатый (Stepped) и, учитывая небольшое число полей в отчете, книжную (Portrait) ориентацию; П стиль оформления отчета Строгий; П отметим пункт Настроить ширину полей для размещения на одной странице (Adjust the field width so ail fields fit on a page); П зададим имя отчета "Список покупателей". Завершается работа мастера открытием отчета, который представлен на рис. 8.4. Такой отчет будет получен только в случае, если поле с адресом содержит только название города.
325
Глава 8. Разработка отчетов
Предположим, что в поле АД?ЕС_ПОК хранится не только название города, но и название улицы, номер дома. В этом случае группировка по полю не даст нужного результата. Мастер позволяет выполнить группировку по нескольким первым буквам строкового значения поля. Нажав кнопку Группировка во втором окне мастера выбора поля фуппировки, откроем окно Интервалы группировки (рис. 8.5), в котором выберем интервал по 4 первым буквам
Список покупателей
Список покупателей АДРЕ С_ПОК
Н АИМ _ПОК
К О Д_ПОК
БАНК
НОМ _Р СЧ
Москва Компьютер тар к*т
ГЮ01
Мест
763585С&7632645Э55
Каигаютарнадтедш
П005
Ноет
763585097632645353
Перспектива
ГО02
Кредит
293847898239429334
Кей
П007
Инвест
654327890345675678
Кэмпътер лэнд
П005
ИНЕЙСТ
S97969Q8790S79S425
Монитор
Ш04
Надаида
585687897685746478
Санкт-Петербург
23 февраля 2CD4 т. Страница:
г
I'.! 1
>
Рис. 8.4. Отчет, созданный с помощью мастера Интервалы группировки Задайте необходимые интервалы группировки попей.
ОК
По ля г р у п пировки :
Интервалы группировки:
|АДРЕС_ПОК
по 4 первым буквам! * 1 — —— обычный по 1-ой букве по 2 первым буквам по 3 первым буквам по 4 перьым буквам по 5 первым буквам
мена
ИИИН^И^^^ИИ |
Рис. 8.5. Выбор интервала группировки в строковом значении поля АДРЕС ПОК
326
Часть I. Основы технологии Microsoft Access
Если в вашем списке адресов нет городов, в наименованиях которых первые 4 буквы совпадают и с длиной менее 4 букв, группировка в отчете будет выполнена правильно. На основе сделанного выбора в заголовок группы мастер поместит выражение =Left { [АДРЕС_ПОК] ; 4 ) , которое возвратит первые 4 буквы из значения адреса. При этом в область данных отчета мастер дополнительно включит полное значение поля группировки — весь адрес.
Доработка однотабличного отчета в режиме конструктора Привести отчет в соответствие с заданными требованиями можно, воспользовавшись инструментарием конструктора отчетов. Созданный мастером отчет без определения интервала группировки в режиме конструктора имеет вид, представленный на рис. 8.6.
1 • i • 2 • i • 3 • I • 4 • i • 5 • 1 • 6 • I • 7 • I • 8 • i • 9 • i • 10 • i • 11 • i • 12 > I • 13 • i • И
* Заголовок отчета
Список покупателей! v
1
*Вер <ний ко понтитул
<
АДРЕ С ПО
mmjiQK
|[<од_г юк
JEAHE
|1СОД_ПС1)К
|БАНК|
IIOIV [ РСЧ
•f Заголовок группы 'АДРЕС ПОК' АДРЕСПОЬ
L. . .
..I---I
* Область д= иных |НАИМ)_ПОК 1
IjjHOMl РСЧ
*Ни* НИИ KOI онтит> л :
1
1
1
1
* Примечание отчет J
1 „„1
1
I
!.._..,
= "с4ратща|" & [Рф] & " JQ " & [Piges]
I
Рис. 8.6. Отчет, созданный с помощью мастера, в режиме конструктора
Группировка и сортировка данных отчета Для выполнения требований к группировке и сортировке данных, отображаемых в отчете, откроем диалоговое окно Сортировка и группировка (Sorting and Grouping), воспользовавшись соответствующей кнопкой на панели инструментов конструктора. Для рассматриваемого примера в этом окне отобразятся параметры, установленные мастером (рис. 8.7). Группи-
Глава 8. Разработка отчетов
327
ровка записей задана по полю АДРЕС_ПОК, содержащему только название города, сортировка производится по полю НАИМ пок.
:
Сортировка и группировка Попе/ выражение
| > АДРЕС J1OK НАИМ_ПОК
(С — 1
Порядок сортировки • 1 По возрастанию По возрастанию •
^'
|л |
!
V
Свойства группы
• ЭГОЛОБОК группы рииечание группы )уппировка чтервал н з разрывать
Да И67 По полному значен 1 Нет
Выбор поля или ввод ; выражения для сортировки или группировки
Рис. 8.7. Окно определения группировки записей по полю АДРЕС ПОК и сортировки по полю НАИМ ПОК
Поле группировки задается путем выбора в свойствах группы значения Да (Yes) в строках Заголовок группы АДРЕС_ПОК (АДРЕС_ПОК Header) и Примечание группы АДРЕС_ПОК (АЯРЕС_ПОК Footer) и помечается значком ЩЕ. В свойствах группы задается и интервал группировки. Если выбрать в свойстве Группировка значение По первым знакам и интервал, например, 6, в рассматриваемом примере будет правильно произведена группировка и при записи в поле АДРЕС_ПОК полного адреса, начинающегося с названия города (Москва и Санкт-Петербург). При этом в отчете будет выводиться полный адрес первого покупателя в группе. Для поля сортировки в области Свойства группы в строках Заголовок группы АДРЕС_ПОК (АДРЕС_ПОК Header) и Примечание группы АДРЕС_ПОК (АДРЕС_ пок Footer) по умолчанию установлены значения Нет (No), что и определяет по этому полю только сортировку. Группировка по заданному выражению Группировка может быть выполнена не только по значениям одного или нескольких полей, но и по заданным выражениям. Для правильной группировки покупателей из городов с любыми названиями и полным адресом используем для группировки выражение, приведенное на рис. 8.8. Исходим из условия, что в начале адреса записывается город и через запятую остальные составляющие адреса. Функция instrB возвращает позицию первого знака строки, входящей в другую строку. В рассматриваемом примере функция instr позволяет определить место, где в строковом значении поля АДРЕС_ПОК в первый раз ветре-
Часть I. Основы технологии Microsoft Access
328
чается указанный вторым операндом символ запятой (,). Функция mstr возвращает номер позиции запятой. Длина части строки до запятой на един и ц у меньше. Функция L e f t использует полученное значение длины для выделения в поле АДРЕС_ПОК левой части строкового значения, стоящей до запятой. Таким образом из адреса выделяется нужная для группировки часть: название города. В отчете в режиме конструктора выражение, по которому выполняется группировка, отображается в названии раздела Заголовок Группы выражение. Сортировка и группировка
Чi
Поле/выражение 1 Порядок сортировки (Si> =1еД([АДРЕС_ПОК];(1п51:г([АДРЕС_ПОК];',')-1)) jj По возрастанию HAHMJIOK По возрастанию
л
ч
Свойства группы Заголовок группы Примечание группы Группировка Интервал Не разрывать
Да Нет По полному значен 1 Нет
Выбор поля или веод выражения для сортировки или группировки
Рис. 8.8. Окно определения группировки записей по выражению и сортировки по полю НАИМ_ПОК
Это же выражение запишем в заголовок группы вместо имени поля АДРЕС_ПОК, иначе в отчете в заголовке группы вместо названия города будет отражен полный адрес первого покупателя (см. рис. 8.10). Внимание
;
В строке заголовка и примечания группы указывается имя поля или выражение, по которому производится группировка.
Размещение данных в разделах отчета В отчете значение поля группировки должно быть представлено один раз в разделе Заголовок группы (Header). В примере здесь размешается название города, выделяемое из адреса с помошью функций instr и Left. Если необходимо включить в отчет полный адрес покупателя, добавьте поле АДРЕС_ПОК в область данных, где отображаются записи о покупателях. Для этого откройте список доступных полей источника записей отчета (рис. 8.9), нажав кнопку Список полей (Field List) на панели инструментов конструктора отчетов, и перетащите поле АДРЕС пок из списка полей в область данных.
329
Глава 8. Разработка отчетов
ПОКУПАТЕЛЬ КОД ПрК •1НН НАИМ_ПОК АДРЕС_ПОК ТЕЛ НОМ_РСЧ БАНК ОПИСАНИЕ УУЕВ^АДРЕС
Рис. 8.9. Список полей, доступных в отчете
Как видно из рисунка, источником записей отчета является таблица ПОКУПАТЕЛЬ.
Данные в отчете разместим в соответствии с проектом макета отчета.
W Списки покупателей : отчет
э;
•'•
• '•
. , , з . , .
4
. , ,
5
[L ]jfclfXj • , • 6 • i • 7 • i • е • i •
• i • 10 • i • 11 • i • 12 • i • 13 • i ' Н • i • 1L±.
•* Заголовок отчета
L [ПС ки по<хУф1телер! цо г (Ш•да!VI Cr i Пок/плтепеи в > всея |=Nowj)
ГО|)О, ;
L
1
Гим г
"=Co'i
__._
* Верхний колонтитул
^ Список покупателей г. h! ,eft ([А TP1
ПС)K|
^ Заголовок группы =1еРК[АДРЕС_ПОК];(1п5Сг([АДРЕС_ TOKiv) -1))'
Фн{ ма
j -I j
*0бг асть дс иных ||НАИ1>[1 ПОК[
А
Банк
код пок IEAHK!
L
a мер сч ста
__
PHOI _РСЧ|
*Примеча ни t групп э|'=1еР1:([АДРЕС_ПОК];ап51:г([АДРЕС_ПОК];' >!))' JBcero покупателей в rojiifle: 1_J |=C[ojint<[pAHM _ПОК]
г——— -|____]
* Нижний колонтитул ="cfej^" & [Pake] | & " b "&"[
-.~
"Т1
-- - • •
j
^Примечани j отчет
I Рис. 8.10. Отчет после доработки в режиме конструктора
Поскольку требуется начинать с новой страницы вывод отчета для каждого города, выберем для заголовка группы свойство макета Коней страницы зна-
330
Часть I. Основы технологии Microsoft Access
чение До раздела. Для того чтобы на каждой странице отображался город, для которого выводится список покупателей, переместим поле с выражением из заголовка группы в верхний колонтитул и изменим надпись на Список покупателей. Для перемещения поля из одного раздела отчета в другой выделите поле, выполните для него команду Вырезать и потом, сделав текущим другой раздел, Вставить. Заметим, что подписи можно создать заново, воспользовавшись кнопкой панели элементов Надпись (Label). Если переместить надписи из верхнего колонтитула страницы в заголовок группы, названия столбцов будут отображаться только в начале списка покупателей каждого города. Поля для табличной части отчета уже размещены в области данных. Они составят строки таблицы. В заголовок отчета, воспользовавшись кнопкой на панели элементов, включим надпись Списки покупателей по городам. С помощью панели инструментов и пункта меню Формат откорректируем надписи полей, установим нужный шрифт, цвет, размер элементов, как показано на рис. 8.10. В соответствии с проектом отчета создадим линии, используя кнопку панели элементов Линия (Line).
Включение вычисляемого поля для расчета итоговых значений Для создания вычисляемого поля с итоговым значением по сгруппированным строкам отчета его надо разместить в разделе Примечание группы АДРЕС_ПОК (АД?ЕС_ПОК Footer) (см. рис. 8.10). Кнопка Поле (Text Box) на панели элементов позволит сформировать элемент Свободный (Unbound), в который может быть записано выражение для выполнения групповой операции (суммирование, расчет среднего арифметического, подсчет числа записей в группе и др.). Это выражение может быть внесено в свойства создаваемого элемента на вкладку Данные (Data) в строку Данные (Control Source). Для создания выражения может использоваться построитель выражений. В свойствах на вкладке Макет (Format) в строке Число десятичных знаков может быть задана нужная точность расчета, в строке Формат поля (Format) — формат отображения значения поля. В примере отчета для подсчета числа покупателей в каждом городе в элементе Свободный (Unbound) в раздел примечания группы АДРЕС_ПОК запишем статистическую функцию count для любого из полей табличной части отчета (рис. 8.11). Отредактируем подпись вычисляемого поля. Для этого выделим подпись и вызовем ее свойства. В свойствах на вкладке Макет (Format) в строке Подпись (Caption) запишем — Всего покупателей в городе. Такие действия, как
331
Глава 8. Разработка отчетов
изменение подписи или ввод выражения в поле, можно выполнить, не обращаясь к свойствам элементов непосредственно внутри рамки элемента.
ИГ Поле: Поле 13 v- '
I Поле 19 Макет
Данные j События | Другие j
Все
j
т 1 ...| Маска ввода Сумма с накоплением Смарт-теги
, . ,
Отсутствует
Рис. 8.11. Окно свойств поля для вычисления
Для расчета общего числа покупателей во всех городах скопируем вычисляемое поле Всего покупателей в городе в примечание или заголовок отчета, а в свойствах на вкладке Макет (Format) в строке Сумма с накоплением выберем значение Для всего. Изменим подпись поля на Покупателей во всех городах.
Добавление текущей даты и номера страницы Мастер отчетов всегда включает в нижний колонтитул отчета текущую дату и номер страницы. Для добаатения в отчет текущей даты используется встроенная функция NOW{) из категории Дата/время, которая, как и любое другое вычисляемое выражение, может быть создана с помощью кнопки Поле (Text Box) и записи в свободный элемент функции -NOW ( ; , относящейся к категории Дата/время. В свойствах этого элемента на вкладке Макет (Format) в строке Формат поля (Format) можно выбрать формат отображения даты. Подпись этого поля можно удалить. В примере дата перемешена в область заголовка отчета и будет выводиться один раз в его начале. Для добаштения номера страницы в область нижнего колонтитула мастер в свободном элементе сформировал выражение ="Страница"&[Page]&"из"&[Pages]
Это выражение может быть записано в свободный элемент отчета с помощью построителя выражений, который вызывается в окне свойств на вкладке Данные (Data) в строке Данные (Control Source). В левой колонке нижней части окна построителя выберем папку Общие выражения. В средней колонке — тип элемента выражения Страница N из М В правой колонке отобразится выражение, которое и следует вставить в свободный элемент отчета. Существуют и другие способы формирования поля даты и номера страницы. Добавить в заголовок отчета поле текущей даты и времени можно, выпал-
Часть I. Основы технологии Microsoft Access
332
нив в режиме конструктора команду Вставка|Дата и время (Insert|Date and Time). Установка в диалоговом окне Дата и время (Date and Time) флажков Формат даты (Include Date) и/или Формат времени (Include Time) позволяет вставить текущую дату и/или текущее время и выбрать нужный вариант форматов (рис. 8.12). Дата и время - -Iv'
}f+,
*•*•
[?j!^l ^
f\V
27 февраля 2004 г. 27-фев-2004
__^!!!!!^__„
27.02.2004
'. Г
г Об 1
27 февраля 2004 г.
Рис. 8.12. Окно выбора формата даты и/или времени Номера страниц Формат •
ОК
^* Страница N г
Отмена
Страница N из М
'1
Расположение ерхнии колонтитул|
1
г нижний колонтитул 1
_
..
Выравнивание: По центру
v ,
1
р Отображать номер на первой странице
Рис. 8.13. Окно выбора параметров номеров страниц
В результате в 'отчете будет создано поле, в свойствах которого на вкладке Данные (Data) в строке Данные (Control Source) будет записано выражение = D a t e { ) . В случае отсутствия в отчете раздела заголовка поле текущей даты и времени вносится в раздел данных.
Глава 8. Разработка отчетов
333
Добавить в отчет поле нумерации страниц можно, выполнив в режиме конструктора команду Вставка]Номера страниц (Insert|Page Number). В диалоговом окне Номера страниц (Page Numbers) выбираются параметры, определяющие формат, расположение и выравнивание номеров страниц (рис. 8.13). Для печати номера страницы на первой странице устанавливается флажок Отображать номер на первой странице (Show Number on First Page).
Просмотр и печать отчета Просмотр отчета Переход из режима конструктора отчетов в режим предварительного просмотра осуществляется с помощью кнопки Вид (View) на панели конструктора. При этом панель инструментов Конструктор отчетов и Панель элементов автоматически заменяются на панель Предварительный просмотр (рис. 8.14). предварительный просмотр » Настройка...
Печать £ Масштаб jp Одна страница •j^' Две страницы Л Несколько страниц " Масштаб: Закрыть ; Установка [ Связи с Office I Окно базы данных | Создать объект "• | iff}-- Справка: Microsoft Office Access Fl
Рис. 8.14. Панель инструментов предварительного просмотра отчета
Для просмотра ранее созданного отчета выберите в окне базы данных на вкладке Отчеты (Reports) нужный отчет и нажмите кнопку Просмотр (Preview). Отчет при просмотре отобразится на экране таким, каким он будет напечатан (см. рис. 8.16). Для перехода от одной страницы отчета к другой можно использовать стандартное поле номера страницы в нижнем левом углу окна отчета.
Печать отчета Прежде чем переходить к печати отчета, необходимо задать параметры его страниц. Команда Файл [Параметры страницы (FilejPage Setup) или кнопка
Часть I. Основы технологии Microsoft Access
334
Установка, доступная в режиме предварительного просмотра отчета, открывают диалоговое окно Параметры страницы (рис. 8.15), в котором можно выбрать принтер, задать формат и ориентацию (книжная, альбомная) бумаги, размер полей, а также число, размер и макет столбцов. Параметры страницы Страница
Столбцы
альбомная
Л Бумага размер:
Д5
подача; Принтер для объекта Список покупа... ("•" текущий принтер г
другой принтер
Прин-н
Рис. 8.15. Выбор параметров страницы для печати отчета
В примере выбрана бумага формата А5 и альбомная ориентация страниц отчета. Microsoft Access сохраняет заданные параметры страницы вместе с отчетом. Размещение разделов отчета на страницах регулируется их свойствами. Для вывода отчета по каждой группе с новой страницы в свойствах заголовка группы на вкладке Макет в строке Конец страницы выбирается значение До раздела. Сведения, которые необходимо отображать на каждой странице, размещаются в верхнем и нижнем колонтитулах. Для вывода заголовка отчета на отдельной странице в его свойстве Конец страницы выбирается значение После раздела. Кнопка Печать (Print) панели инструментов режима предварительного просмотра (см. рис. 8.14) позволяет вывести отчет на печать. Отчет печатается с использованием стандартных настроек, заданных в диалоговом окне Печать. Диалоговое окно Печать открывается командой Файл[Печать (File|Print), доступной в любом режиме. В том окне можно выбрать принтер, на который будет отправлен отчет, настроить его свойства, изменить параметры
Глава 8. Разработка отчетов
335
страницы, выбрать для печати отдельные страницы отчета, распечатать заданное число копий, вывести отчет в файл, который должен распечатываться в другое время. Установив нужные для печати параметры, отчет можно отправить в очередь печати выбранного принтера. На рис. 8.16 приведена первая страница примера отчета Списки покупателей по городам в режиме предварительного просмотра.
Список покупателей
Списки покупателей по городим 27 февраля 2004г.
Покупателей во всех городлх:
6
Список покупателей г. Москва Фирма
Код
Компьютер маркет Компьютерная техника Перспектива Всего покупателей в городе:
ПЮ1 ПООб П002
Банк
Кошер счета 7635В509763364536
Кредит
76358509763364536 29384789823942931:
3
Страница 1 из 2 Страница:
Рис. 8.16. Первая страница отчета со списками покупателей в режиме предварительного просмотра
Многотабличные отчеты Наряду с однотабличными отчетами Access позволяет создавать более сложные отчеты, обеспечивающие вывод данных из нескольких взаимосвязанных таблиц базы данных. Многотабличные отчеты могут состоять из главного отчета и включаемого в него подчиненного отчета. Для каждого из этих отчетов в качестве источника данных выбирается своя таблица или несколько таблиц. Чтобы обеспечить соответствие записей, выводящихся в подчиненном отчете, за-
Часть /. Основы технологии Microsoft Access
356
писям в главном отчете, необходимо установить связь подчиненного отчета с главным. Многотабличные отчеты могут быть построены также на основе многотабличных запросов. При этом отчет за счет группировки, выполненной в нем, может приобретать такой же вид, как отчет, состоящий из главной и подчиненной табличной частей. Многотабличные запросы могут быть построены как до создания отчета, так и в ходе его создания. В последнем случае запрос может быть создан мастером на основе выбранных таблиц и полей. При создании запроса в режиме конструктора запрос может быть записан в качестве источника записей отчета вручную в виде инструкции SQL или создан построителем запросов.
Разработка отчета с помощью мастера Допустим, необходимо подготовить отчет с информацией о договорах и их спецификациях, содержащих сведения о заказанных в договорах товарах, сроках поставки, количестве. Предположим, что проект макета отчета должен иметь вид, представленный на рис. 8.17. В соответствии с проектом макета в отчет предполагается выводить данные по каждому договору, включая сведения о покупателе, заключившем договор. Эти данные содержатся в таблицах ДОГОВОР и ПОКУПАТЕЛЬ. В табличной части по каждому договору необходимо вывести построчно данные о заказанных товарах, которые содержатся в таблицах ПОСТАВКА_ПЛАН и ТОВАР. Договор № . Покапатель
от Адрес
Телефон
ИНН Расчетный счет Наименование Срок товара поставки
Мин. партия
Количество
Цена
Единица измерения
Ставка НДС
Стоимость
Общая сумма Рис. 8.17. Проект макета отчета для вывода данных по договору фирмы
Глава 8. Разработка отчетов
337
Выбор таблиц для отчета Для создания отчета мастером выберем в окне базы данных объект Отчеты (Reports), а затем щедкнем на строке Создание отчета с помощью мастера в поле, где формируется список создаваемых отчетов. Если создание отчета начать нажатием кнопки Создать (New), в открывающемся окне Новый отчет (New Report) необходимо выбрать строку Мастер отчетов (Report Wizard). Уже в этом окне можно выбрать одну из таблиц, необходимых для формирования источника записей отчета, например, ДОГОВОР. После выбора в качестве инструмента создания отчета мастера открывается окно Создание отчетов (Report Wizard), в котором требуется выбрать таблицы и поля, включаемые в отчет. В примере в соответствии с проектом отчета (см. рис, 8.17) выберем таблицы: П ДОГОВОР, из нее поля: •
номер договора — ном__дог;
• дата заключения договора — ДАТА^ДОГ; О ПОСТАВКА_ПЛАН, из нее поля: • срок поставки — СРОК_ПОСТ; • минимальная партия поставки — мин_пост; • количество товара — кол_пост; G ТОВАР, из нее поля: • наименование товара — ндим_тов; • цена — ЦЕНА; • единица измерения — ЕЙ; •
ставка НДС — СТАВКА_НДС;
П ПОКУПАТЕЛЬ, из нее поля: • идентификационный номер налогоплательщика — инн; • наименование покупателя — НАИМ_ПОК; • адрес покупателя — АДРКС_ПОК; • телефон — ТЕЛ; • банк, который обслуживает счет покупателя — БАНК; • номер расчетного счета покупателя — НОМ_РСЧ. Первая выбранная таблица определит имя и заголовок отчета по умолчанию, а также вид представления данных в отчете. При выборе взаимосвязанных таблиц мастер отчетов в соответствии со схемой базы данных "Поставка товаров" (см. рис. 3.30 главы 3} автоматически
Часть I. Основы технологии Microsoft Access
338
установит связи между ними и построит запрос, объединяющий записи этих таблиц и включающий в таблицу запроса указанные поля. Объединение записей таблиц будет производиться способом, указанным параметрами объединения для каждой из связей в схеме базы данных. Подсхема данных базы, включающая таблицы, на которых будет строиться отчет, приведена на рис. 8.18.
НОЩрГ ДАТА_ДОГ КОД_ПОК СУММА_ДОГ
ном_дог КОД_Т06 GPOK_nOCf MMHJTOCT
кол_пост
СУММА ПОСТ
Рис. 8.18. Подсхема данных отчета договора
В окне мастера (рис. 8.19) выберем вид представления данных в отчете. Если необходимо получить отчет, заданный в рассматриваемом примере, выберем таблицу ДОГОВОР в качестве основы главной части отчета и увидим, что мастером на основе полей этой таблицы будет осуществлена группировка. Причем к полям группировки будут отнесены и поля таблицы ПОКУПАТЕЛЬ, поскольку эта таблица является главной по отношению к таблице ДОГОВОР, что позволяет дополнить записи подчиненной таблицы ДОГОВОР сведениями о покупателе, заключившем договор. Если, выбирая вид представления данных, остановиться, на таблице ПОКУПАТЕЛЬ, мастер создаст два уровня группировки: на первом будут собраны данные о покупателе, на втором о его договорах. Поля таблицы ПОСТАВКА_ПЛАН составят основу записей для построения табличной части отчета. Причем записи о товарах, перечисленных в этой таблице, будут дополнены реквизитами из таблицы ТОВАР.
Глава 8. Разработка отчетов
339
Создание отчетов Выберите вид представления данных:
НОМ _АОГ, ДАТА_ДОГ, ИНН, НАИМ ПОК, АДРЕС ПОК, ТЕЛ.
|: ПОКУПДТЕПЬ '" - ПОС - ТОВАР
СРОК ПОСТ, МИН ПОСТ, КОЛ ПОСТ, НАИМ_ТОВ, ЦЕНА, ЕЙ, СТАВКА_НДС
_ПЛАН
J*J Вывести дополнительные сведения
Отмена
• < Назад
Далее >
Готово
Рис. 8.19. Окно мастера отчетов при выборе вида представления данных
ДОГОВОР : отчет I > 1 . I • J > i • 3 ' I • 4 • I • 5 • i ' 6 ' I • 7 • I • 8 • I • 9 • I • 10 • I - It • i • 12™'"Т~13 • i • 1* > ' • 15 • i • 16
* Заголовок отчета
| * Верхний колонтитул
юмТд^д^Ьг ййн~"'||Аим!]пог А)ЦРЕС^ОК
U
"ТЕЛ|
" |CI.IBM|
* Заголовок группы НОМ_ДОГ — 1 rr-'-"t п—I
ТА|]ЙНН
J * Облаете данных * Нижний колонтитул E
;.!
Npw()
L ._!.: L.M .:.). L...I
-.Г
J ....i:.-. «"Строница " 8. [Page] A " и
J •* Примечание отчета (
Рис. 8.20. Отчет, созданный мастером на основе нескольких взаимосвязанных таблиц
12 Зак. S35
340
Часть I. Основы технологии Microsoft Access
Внимание Группировка в отчете, в отличие от группировки в запросе, не приводит к образованию для группы одной записи. В отчете только поля группировки выводятся один раз в заголовке группы, а все остальные поля составляют записи группы, размещаемые в области данных в табличной части отчета.
В диалоговом окне мастера выберем альбомную ориентацию страниц отчета и зададим настройку ширины полей для размещения на одной странице. Результат работы мастера представлен на рис. 8.20.
Источник записей отчета Мастер на основе выбранных таблиц создает запрос. Просмотрим его, открыв свойства отчета. Для этого щелкнем на пересечении линеек окна отчета в режиме конструктора и из контекстного меню выберем строку Свойства. На вкладке окна свойств отчета Данные в строке Источник записей содержится инструкция SQL: SELECT ДОГОВОР. НОМ_ДОГ, ДОГОВОР. ДАТА_ДОГ, nOCTABKAJUlAH . CPOKJIOCT , ПОСТАВКА_ПЛАН . МИН_ПОСТ , ПОСТАВКА_ПЛАН.КОЛ_ПОСТ, ТОВАР. НАИМ_ТОВ, ТОВАР. ЦЕНА, ТОВАР . ЕЙ , ТОВАР . СТАВКА_НДС , ПОКУПАТЕЛЬ . ИНН , ПОКУПАТЕЛЬ. НАИМ_ПОКГ ПОКУПАТЕЛЬ. АДРЕС JIOK, ПОКУПАТЕЛЬ. ТЕЛ, ПОКУПАТЕЛЬ. НОМ_РСЧ, ПОКУПАТЕЛЬ . БАНК ТОВАР INNER JOIN ( (ПОКУПАТЕЛЬ INNER JOIN ДОГОВОР ON ПОКУПАТЕЛЬ. КОД_ПОК=ДОГаВО?.КОД_ПОК) INNER JOIN ПОСТАВКА_ПЛАН ON ДОГОВОР . НОМ__ДОГ=ПОСТАВКА_ТЛЛАН . НОМ_ДОГ ) ON ТОВАР . КОД_ТОВ=ПОСТАВКА_Ш1АН . КОД_ТОВ ;
Инструкция SELECT определяет список полей запроса на выборку, а ее предложение FROM — последовательность и способ объединения таблиц. Значком построителя, размещенным справа в строке Источник записей, можно открыть инструкцию SQL в режиме конструктора запросов. Запрос, являющийся источником записей отчета, можно изменить в любом из этих режимов: добавить или удалить поля, таблицы. Замечание Если отчет создается в режиме конструктора, прежде всего необходимо определить источник записей. Источник записей задается в свойствах отчета, как в рассмотренном примере, путем записи инструкции SQL или с помощью построителя запросов.
Источник записей отображается также в Списке полей (Field List), доступном при конструировании отчета. В заголовке этого окна записана инструкция SQL, а ниже список полей, доступных в отчете. Для однотабличного отчета в качестве источника записей указывается имя таблицы.
Глава 8. Разработка отчетов
341
Доработка отчета в режиме конструктора Для того чтобы отчет соответствовал разработанному проекту макета, его надо доработать в режиме конструктора. После создания отчета мастером надписи полей группировки оказались размещенными в верхнем колонтитуле, а значения полей в заголовке группы (см. рис. 8.20). Надписи столбцов табличной части также размещены в верхнем колонтитуле. Для того чтобы надписи реквизитов договора, как и их значения, а также надписи столбцов табличной части выводились олин раз в начале нового договора, выделим все надписи полей в верхнем колонтитуле и переместим их в область заголовка группы.
Замечание Для одновременного выделения всех надписей удобно установить курсор на вертикальной линейке колонтитула и протащить его по всей высоте колонтитула.
Используя средства конструктора отчетов, разместим надписи и поля в разделах отчета, как показано на рис. 8.21.
спкчесгео ,Ц«Г<т1""ВДйни||л СМекд ""ГтоийосТь И иш1оеш0| I НДС > :
|HA!M_ipB * Примечание группы ХОМ J ОТ
Рис. 8.21. Отчет о договорах фирмы, доработанный в режиме конструктора
342
Часть I. Основы технологии Microsoft^ Access^
Чтобы выводить каждый договор с новой страницы, в свойстве заголовка группы Конец страницы выберем значение До раздела. Если необходимо сформировать в отчете титульную страницу, установите в свойствах заголовка отчета на вкладке Макет в строке Конец страницы значение После раздела. Увеличив размер области заголовка отчета до размера страницы, можно-придать титульной странице необходимый вид. Вычисляемые поля в отчете Рассчитаем стоимость каждого из товаров, заказанных в договоре. Для этого нужно дополнить перечень полей области данных вычисляемым полем и записать в него выражение = [ЦЕНА]*[кол_пост]. Создадим вычисляемое поле, щелкнув на кнопке Поле (Text Box) панели элементов и перетащив его в область данных. В созданном таким образом элементе Свободный (Unbound) запишем нужное выражение. Переместим надпись этого поля в заголовок группы, заменив ее значение на Стоимость. Это выражение будет внесено в свойства элемента. Откроем свойства элемента на вкладке Данные (Data) и увидим выражение в строке Данные (Control Source). На вкладке Макет (Format) в строке Число десятичных знаков выберем точность расчета 2, в строке Формат поля (Format) — денежный формат отображения значения поля. Рассчитаем стоимость всех товаров, заказанных в договоре. Для создания вычисляемого поля с итоговым значением по группе записей его нужно разместить в разделе примечания группы. Чтобы отобразить примечание группы, откроем окно Сортировка и группировка и выберем значение Да для строки Примечание группы. В примечании группы создадим элемент Свободный (Unbound) и запишем в него выражение =sum( [кол_пост] - [ЦЕНА] ) . Так же как для вычисляемого поля Стоимость, установим точность расчета и формат отображения. Надпись изменим на Общая сумма. Пусть необходимо особо пометить договоры, общая сумма которых •'составляет более миллиона рублей. Создадим в примечании группы вычисляемое ПОЛе И Запишем В Него Выражение =IIf ( [Поле44]>1000000;' 'Особое внимание 1 ; ' ' ) , где Поле44 — это имя поля со значением общей суммы, созданного выше. В свойствах этого вычисляемого поля на вкладке Макет выберем новые значения для вида, размера шрифта, насыщенности и цвета текста. Надпись поля удалим. Для договора на сумму более миллиона рублей в отчете будут выводиться слова Особое внимание, оформленные в соответствии со сделанным выбором. Для остальных договоров никаких слов не выведется, т. к. третий операнд функции iif задает в качестве значения пустую строку.
Глава 8. Разработка отчетов
343
Первая страница отчета Договор в режиме предварительного просмотра приведена на рис, 8.22. В этом примере заголовок отчета ДОГОВОРЫ ФИРМЫ выводится не на отдельном титульном листе, а один раз в начале отчета.
Покупатель К»ипыотер маркег ИНН
77W*65MI1
EMIHK
Мост
Расчетным счег
Адр?*
76358509763264536567 Срок ПОС1ЛВКИ
Наименование HiR.li*.]
Мин. Количества партия
ценл
-
ЗбЗ.ООр
Монитор S7LG
tl
О 5S7,OOp.
Монитор 17LG
28
О 5S7,OOp
FDD 3,5
10
363,ООр
Монитор I7LG
10
FDD 3,5
Особое внимание 23 ф«В(ЫПя 2004 Г,
Единица Ставка измерения НЛО
Стоимость
коройса
коробка
! 009 830,00р.
Общая сумма
С1|*,ШИЦ.1 1 ИЗ 3
Страница^
Рис. 8.22. Первая страница отчета о договорах фирмы в режиме предварительного просмотра
Определение параметров в отчете Допустим, необходимо в отчете получать данные только о заданном договоре. Эта задача может быть решена с помощью ввода параметра в запрос, на котором основывается отчет. Откроем отчет Договор в режиме конструктора. В свойствах отчета на вкладке Данные в конце строки Источник записей щелкнем на кнопке построителя. В окне построителя запросов перейдем к полю с номером договора — ном_дог. В строке Условие отбора определим параметр, записав [Номер д о г о в о р а ] .
Часть I. Основы технологии Microsoft Access
344
Теперь при просмотре отчета будет выводиться диалоговое окно ввода значения параметра (рис. 8.23). Введите значение параметра Номер договора
(дш~~
Рис. 8.23. Диалоговое окно ввода значения параметра отчета
После ввода значения параметра отчет будет содержать данные только одного договора. ЗАДАНИЕ 1 Измените отчет таким образом, чтобы выводились только те договоры, в которых заказан заданный товар. ЗАДАНИЕ 2 Создайте отчет для вывода договоров, сгруппированных по заказчикампокупателям. В предметной области указано, что один покупатель может заключать с фирмой несколько договоров.
Составные отчеты Допустим, необходимо получить отчет об отгрузках товаров за весь учетный период. Отчет должен содержать все данные о товаре и список всех отгрузок товара, сгруппированных по месяцам (рис. 8.24). Для создания отчета, соответствующего заданию, потребуется использовать данные из следующих взаимосвязанных таблиц: П ТОВАР, поля: • код товара — код^тов; •
наименование товара — НАИК_ТОВ;
• цена — ЦЕНА; • единица измерения — ЕЙ; •
ставка НДС — СТЛВКА_НДС;
•
фотография товара — Фото;
Глава 8. Разработка отчетов
345
Отгрузка товаров Кпд товара Наименование товара Фото товара
Ценя FflnHtii(a n.iMfipp.Hiia Ставка НДС
Код склада
Число отгрузок:
Код товара
Количество
Дата
Количество отгруженного:
ИТОГО ОТГРУЖЕНО
Рис. 8.24. Проект макета для создания отчета ОТГРУЗКА ТОВАРОВ О ОТГРУЗКА, поля: •
код склада — код_ск;
• код товара — код_тов; • количество отгруженного товара — КОЛ_ОТГР; П НАКЛАДНАЯ, поля: •
дата отгрузки — ДАТА_ОТГР.
Связи перечисленных таблиц определены в подсхеме данных, представленной на рис. 8.25.
1НОМ_НАКЛ КОД^СК ДАТА^ОТГР НОМ_ДОГ СУММА НДКЛ
КОД_ТО6 НАИМ_ТОВ ЦЕНА ЕЙ СТАВКА_НДС ФОТО НОМ_НАКЛ
код_ск код_тов КОЛ_ОТГР СУММА OTTF
Рис. 8.25. Подсхема данных отчета ОТГРУЗКА ТОВАРОВ
Часть I. Основы технологии Microsoft Access
346
Очевидно, что главную часть отчета должны составить данные из таблицы ТОВАР, табличную часть отчета - данные из подчиненной таблицы ОТГРУЗКА. Причем записи таблицы ОТГРУЗКА необходимо дополнить датой, которая хранится в главной по отношению к ней таблице НАКЛАДНАЯ.
Создание главной части составного отчета Главная часть отчета должна содержать все сведения о товаре, которые хранятся в таблице базы данных ТОВАР, и может быть создана как обычный однотабличный отчет о товарах фирмы. Для автоматического создания отчета, включающего все поля одной таблицы, достаточно в окне Новый отчет (New Report) выбрать вариант Автоотчет: в столбец (AutoReport) и в качестве источника данных этого отчета указать таблицу ТОВАР.
a jq
Ж ТОВАР : отчет
(Е][ 111 Кд
. , . , • , . г . , . 3 . , • • • I - 5 - . . 8 . . . т - . - а - и!
J . ,"|
* Заголовок отчета
ТОВАР •* Верхний колонтитул
J * Область данных Код г повар 1
J
1 "Нот 1ги&в< 'мае г WffOf
код_т эв HUl'lhil
-—— —
г
\
Цене,
\
-
U£HA
[Един ица и mtepe ния \ •v\ з '
\Cmat ?ка ft,ЦС
J
СТАВК
^.ндс
<( •
_
5
6
J •f Нижний колонтитул J
* Примечани: отчета
Z
]
"&lf age/^fMj
" сUAz^t
л!
^
Рис. 8.26. Отчет о товарах фирмы в режиме конструктора
Выбор отчета в столбец позволит получить однозаписевый макет главной части отчета со всеми полями и подписями, которые были заданы в свойст-
Глава 8. Разработка отчетов
347
вах таблицы. Завершается создание автоотчета выводом в режиме просмотра отчета, в котором в качестве заголовка взято имя таблицы. Автоотчет с данными о товарах в режиме конструктора представлен на рис. 8.26. Для того чтобы сделать отчет более компактным, переместите поле с фотографией товара в верхнюю правую часть отчета, освободив место для подчиненного отчета. Надпись Фото товара удалите.
Создание подчиненного отчета Табличная часть отчета должна содержать все сведения об отгрузках, которые хранятся в таблицах ОТГРУЗКА и НАКЛАДНАЯ. На основе этих таблиц создадим с помощью мастера отчет, который будет включен в главную часть отчета в качестве подчиненного. В первом окне мастера выберем необходимые для отчета таблицы и поля. Определяя вид представления данных в следующем окне мастера, выберем в качестве записеобразующей таблицу ОТГРУЗКА. Далее добавим уровень, группировки по полю ДАТА_ОТГР. По умолчанию мастер предложит для поля группировки с типом Дата/время интервал группировки по месяцам. На рис. 8.27 показано окно выбора интервала группировки, которое вызывается при нажатии кнопки Группировка в окне определения уровней группировки.
Интервалы группировки Задайте необходимые интервалы группировки полей, Поля группировки:
Интервалы группировки:
ДАТА_ОТГР
по месяцам]
ОК
•;
Отмена
по годам по кварталам по месяцам по неделим по дням по часам по минутам
Рис. 8.27. Диалоговое окно выбора интервала при группировке по дате
Далее выберем сортировку по возрастанию значения кода склада и, на;кав кнопку Итоги (Summary Options), произведем подсчет итоговых сумм по единственному числовому полю КОЛ_ОТГР. Выбрав вид макета отчета Ступенчатый и стиль оформления Деловой, завершим диалог с мастером по созданию отчета. Отчету автоматически будет присвоено имя Отгрузка, т. к.
Часть I. Основы технологии Microsoft Access
348
соответствующая таблица была выбрана при определении вида представления данных в отчете. Созданный мастером отчет представлен на рис. 8.28.
ОТГРУЖА ДАГА_ОГГР-помгсщом
Код склад Код товара
Количества Дата
Январь 2004 С01
TOOS
10
25.01.2001
С01
Т008
I
25.01.2001
ю
25.01.200-1
2
20.01.200-1
С01
соз
1
• '
Итоги (Эля 'ДЧ 7Д_07ГР1 = W.Q1.2QQ4 (4 записей)
Sum
i
Февраль 2004
Январь 2005 С02 С02
ТООЗ Т002
1 IQ
21.01.2005 21.01.2005
Итоги для '£F\TA_OTfP' * 21.Q1.2QQ5 (2 записей)
Sum ИТОГО а 2004г.
Страница 1 из 2
Страница ; I
Рис. 8.28. Подчиненный отчет об отгрузке товаров в режиме предварительного просмотра
В отчете записи об отгрузке товара сгруппированы по месяцам, причем учтено, что сведения об отфузках могут сохраняться не один год.
Включение подчиненного отчета Для включения подчиненного отчета в основной можно использовать графический способ. При этом нужно открыть основной отчет в режиме конструктора. В окне базы данных нужно выделить имя подчиненного отчета и перетащить его курсором мыши в область данных основного отчета.
Глава 8. Разработка отчетов
349
Для рассматриваемого примера сделаем активным окно базы данных, разместим его рядом с окном отчета ТОВАР в режиме конструктора (см. рис. 8.26). Перетащим значок отчета ОТГРУЗКА из окна базы данных в область данных отчета ТОВАР. При этом подчиненный отчет встраивается в основной.
Г
Внимание
1
Access автоматически устанавливает связь между основным и подчиненным отчетом по полю связи главной и подчиненной таблиц, т. к. эта связь определена в схеме данных. При этом не имеет значения, включено ли поле связи в подчиненный отчет. Проверить имена полей связи можно в свойствах элемента Подчиненная форма/отчет (Subform/Subreport) на вкладке Данные (Data) в строках Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields) (рис. 8.29). Не путайте свойства подчиненного отчета и элемента Подчиненная форма/отчет (Subform/Subreport), содержащего подчиненный отчет,
ИГ Подчиненная форма/отчет: ОТГРУЗКА ОТГРУЗКА Макет
Данные | События | Другие |
Объект-источник Подчиненные поля Основные попя
Все
Отчет.ОТГРУЗКА КОД_ТОВ КОД_ТОВ
Рис. 8.29. Свойства подчиненного отчета, вкладка Данные
Установленная связь отчетов ТОВАР и ОТГРУЗКА позволяет для каждой записи в отчете ТОВАР отображать только связанные записи в подчиненном отчете ОТГРУЗКА Для включения подчиненного отчета можно также воспользоваться услугами мастера подчиненных отчетов. Инициировать работу мастера можно кнопкой панели элементов Подчиненная форма/отчет (Subform/Subreport). При этом должна быть выключена кнопка панели элементов Мастера элементов (Control Wizards). Мастер создает в области данных основного отчета элемент Свободный (Unbound) с надписью Внедренный^ Chi Id №.) и предлагает выбрать существующий подчиненный отчет или создать его на основе таблиц и запросов. Далее определяются поля- связи основного и подчиненного отчетов, имя подчиненного отчета, и на этом работа мастера завершается. Подчиненный отчет отображается внутри основного отчета, где он доступен для редактирования. Свободный элемент превращается в элемент, называемый Подчиненная форма/отчет, и в его свойствах на вкладке Данные (Data) в строке Объект-источник (Source Object) указывается имя встроенного отче-
Часть I. Основы технологии Microsoft Access
350
та, а в строках Подчиненные поля (Link Child Fields), Основные поля (Link Master Fields) указываются поля связи основного и подчиненного отчетов.
Доработка составного отчета В режиме конструктора в составном отчете доступны для редактирования, как основной, так и подчиненный отчеты.
ТОВАР ; отчет 2 • i > 3 • i • 4 • i • 5 • i • 6 • i • 7 • i • 8 • i • 9 • i • 10 • i • 11 • i • 12 • i • 13 • i • 14 • i
* Заголовок отчета
О ТГР 5 "ЗКА ТОВАРА }КОД]_ТОВ ;
L
i
frrjif
lUEhfe" Единица и vuepe шя
[ЕЙ
Ставка НДС i . I . i • 2 • i • 3 • i ' * ' i • 5 • i • 6 • i ' 7 ' i • 8 • i • Э • i • 10 ' i • 11 • i • 12 • i • 13 • i
J ^Заголовок отчета
I Код
JCco
Дшпа
* Заголовок группы 'ДАТА_ОТГР'
* Область данных Примечание группы 'ДАТА_ОТГР'
i1=фтн[КЮП i i otrP]> i •# Примечание отчета
ИТО&0 ОТ&УШйНО
"~
-] - - -
j --
Нижний колонтитул
Примечание отчета
- ^-
Шэ
Рис. 8.30. Отчет ТОВАР в режиме конструктора со встроенным подчиненным отчетом ОТГРУЗКА
Глава 8. Разработка отчетов
351
Доработаем отчет в соответствии с проектом макета, приведенным выше. Над рамкой подчиненного отчета размещен элемент с его именем (Отгрузка). Удалим этот элемент. Верхний колонтитул подчиненного отчета ОТГРУЗКА, в котором находятся надписи полей, не отображается при просмотре составного отчета. Поэтому для отображения заголовков столбцов перенесем названия столбцов из верхнего колонтитула в заголовок подчиненного отчета. Выделим все подписи полей в верхнем колонтитуле и перетащим их в область заголовка. После этого в подчиненном отчете удалим оба колонтитула, нажав кнопку Колонтитулы (Page Header/Footer) на панели конструктора. Если размер подчиненного отчета не соответствует установленной ширине страницы или не позволяет отобразить часть данных, измените его, щелкнув на элементе управления подчиненного отчета и перетащив маркеры размера в нужные позиции. Используя панель форматирования, панель элементов, команды меню Формат, а также обращаясь к свойствам элементов отчета, откорректируем надписи, изменим формат полей и надписей, проведем недостающие линии. Отчет ТОВАР в режиме конструктора после внедрения подчиненного отчета ОТГРУЗКА и доработки показан на рис. 8.30. Отбор записей для отчета Если в отчете необходимо выводить данные, отобранные в соответствии с заданными условиями, определите в условиях отбора в запросе-источнике записей отчета параметры. Для отчета ТОВАР, созданного на основе одной таблицы, надо в свойствах отчета на вкладке Данные в строке Источник записей заменить таблицу ТОВАР на запрос. Запрос можно создать с помощью построителя, который вызывается щелчком на соответствующем значке в конце строки. В запрос следует включить все поля таблицы и в строке Условия отбора нужного поля записать имя параметра в квадратных скобках. Например, для отбора сведений об отгрузках товаров с заданным интервалом цен запишите в поле код_тов в строке Условия отбора параметр Between [Минимальная цена] And [Максимальная цена].
Чтобы введенные значения параметров отображались в просматриваемом или напечатанном отчете, выполните следующие действия. Откройте отчет в режиме конструктора. Вставьте в отчет поле, нажав на панели элементов кнопку Поле и щелкнув в том месте, в которое нужно его поместить. Запишите в это новое поле выражение, содержащее только параметр. Параметр должен записываться точно так же, как он записан в условии отбора запроса. Для приведенного примера параметр запишется следующим образом:
352
Часть I. Основы технологии Microsoft Access
= [минимальная цена]. Аналогичным образом создайте и заполните поле второго параметра. Для просмотра условий отбора откройте его в режиме предварительного просмотра. Access отобразит значения параметров в точности так, как они введены в приглашении. Сортировка и группировка записей отчета Записи в отчете сгруппированы и отсортированы в порядке, определенном при создании отчета. Просмотреть и изменить поля и порядок группировки и сортировки записей отчета можно в окне Сортировка и группировка (Sorting and Grouping). Чтобы открыть окно, нужно в режиме конструктора щелкнуть в области выделения отчета (на пересечении линеек) и в контекстном меню выбрать строку Сортировка и группировка (Sorting and Grouping). При необходимости группировки и сортировки записей подчиненного отчета необходимо выполнить те же действия для подчиненного отчета. Просмотр отчета Перейдем от конструирования к просмотру отчета, содержащего подчиненный отчет, щелкнув на кнопке Предварительный просмотр (Report View) панели конструктора отчетов. Первая страница составного отчета об отгрузке товаров в режиме предварительного просмотра представлена на рис. 8.31. Вывод отчета на печать можно осуществить нажатием кнопки Печать (Print) на панели предварительного просмотра. В составном отчете реализуется режим, при котором запись главного отчета выводится и в том случае, когда для нее нет связанных записей в подчиненном отчете. В рассматриваемом примере отчет будет включать и те товары, для которых не было отгрузок. Если аналогичный рассмотренному отчет построить на предварительно созданном на основе трех таблиц запросе, можно несколькими способами исключить вывод записей о товарах, по которым не было отгрузки или, наоборот, включить в отчет только их. Можно оставить используемый по умолчанию первый способ объединения записей главной таблицы ТОВАР и подчиненной ОТГРУЗКА, что автоматически приведет к искомому результату. Если самостоятельно определить второй способ объединения записей таблиц, в отчет будут включены все товары, вне зависимости от наличия отгрузок по ним, но могут быть указаны параметры отбора только тех записей, у которых в полях, относящихся к таблице ОТГРУЗКА, стоят непустые значения (не Null). Создание запросов подробно рассмотрено в главе 4.
Глава 8. Разработка отчетов
353
^ товар
g][E
ОТГРУЗКА
ТОВАРА
щ
IT 001
Кай товара
Нашкенавсаше товара (монитор 17LG Цена
6 587,00р.
\
Единиц а измерения
|
-
штука g%
Ставка НДС
Код
Код
склада
товара
Дата.
Количество
Январь 2004
Число отгрузок : 2
|С01
JT001
10
25.01.2004
|СОЗ"
|Т001
2
20. 01 .2004
Количество отсуженного:
12
Март 2004 |С01
|СОЗ Число отгрузок . 2
JT001
2
25.03.2004
|Т001
2
26.03.2004
Количества отгруженного:
4
Апрель 2004
Число отгрузок : 2 ИТОГО
|С01
|Т001
2
28.04.2004
|С01
[ТО 01
5
29.04.2004
Количество отгруженного:
ОТГРУЖЕНО
23 .- pa i ыца 1 а з 1 0
29 февраля 2004 г Страница: JJJ
7
1 ^ J^J j
Jij
>
jd
Рис. 8.31. Первая страница составного отчета об отгрузке товаров в режиме предварительного просмотра
Вывод значений нарастающим итогом В отчетах можно вывести значения некоторого поля записи или итогового поля группировки нарастающим итогом. В рассматриваемом примере можно накапливать количество каждого отгруженного товара от месяца к месяцу. Так, если в первый месяц количество отгруженного равно 12, во второй — 4, в третий — 7, используя свойство поля Сумма с накоплением (RunningSum)
354
Часть I. Основы технологии Microsoft Access
= Для всего, можно получить значения суммы с накоплением: для первого месяца 12, для второго — 16, для третьего — 23. Это свойство размещено на вкладке Данные. ЗАДАНИЕ 3 Создайте отчет, в котором будет отображаться количество каждого из заказанных товаров и его стоимость нарастающим итогом (от месяца к месяцу). В отчет включите наименование товара, сроки его поставки, количество заказанного и стоимость нарастающим итогом. Разработайте отчет на основе запроса на выборку, в котором из таблицы ПОСТАВКА^ПЛАН выберите поля срок поставки И Количество, а ИЗ таблицы ТОВАР — Наименование товара. Для расчета стоимости заказанного товара включите в отчет вычисляемое поле. В отчете выполните группировку по наименованию товара и сроку поставки. Для накапливания сумм значений количества и стоимости используйте свойство соответствующих полей Сумма с накоплением (RunningSum). Контрольные вопросы 1. Из каких разделов состоит отчет? 2. Назовите основные панели, используемые при конструировании отчета. 3. Как просмотреть список доступных в конструкторе отчетов полей и вставить нужное поле в отчет? 4. Какое значение размещается в подписи поля при его перетаскивании в отчет? 5. Возможно ли выполнить в отчете группировку записей не отображая заголовка и (или) примечания группы? 6. В каком порядке сортируются группы по умолчанию? 7. Чем отличается группировка в запросе от группировки, выполненной в отчете? 8. Где целесообразно размещать значение поля, по которому производится группировка? 9. Где должно размещаться вычисляемое поле с итоговым значением, рассчитанным для группы? 10. Какая функция позволяет включить в отчет дату? 11. Какой элемент по какой кнопке создается для размещения в нем вычисляемого поля? 12. Какая команда позволяет выбрать размер страницы отчета, ее поля? 13. Можно ли с помощью перетаскивания включить в отчет подчиненный отчет?
Глава 8. Разработка отчетов
355
14. В каком режиме должен быть открыт отчет, чтобы в него можно было включить подчиненный? 15. Нужно ли устанавливать связь между главным и подчиненным отчетом, если она определена в схеме данных? 16. В свойствах какого элемента сохраняются поля связи отчетов? 17. Какое условие должно быть выполнено, чтобы при включении подчиненного отчета с помощью кнопки панели элементов Подчиненная форма/отчет (Subform/Subreport) заработал мастер? 18. В какой строке свойств подчиненного отчета указывается источник данных? 19. В какой строке свойств отчета указывается источник данных? 20. В каком месте отчета нужно щелкнуть мышью, чтобы открыть его свойства? 21. Какой элемент отчета должен быть выделен, чтобы просмотреть свойства подчиненного отчета? 22. На основе каких объектов мастер строит отчет? 23. Возможен ли выбор полей из различных таблиц и запросов при построении отчета мастером? 24. Сколько уровней группировки может определить мастер в отчете? 25. В каком случае мастер не выведет кнопки Итоги, которая позволяет указать, какие именно итоговые значения нужно вывести в отчете? 26. Какие функции позволяет использовать мастер для подведения итогов1' 27. Что будет использовано в качестве источника записей при построении отчета мастером на основе нескольких взаимосвязанных таблиц? 28. Как просмотреть созданную мастером инструкцию SQL в режиме конструктора запросов? 29. Чем определяется состав списка полей в многотабличном отчете, построенном мастером? 30. Какой кнопкой надо воспользоваться для того, чтобы каждая группа печаталась на отдельной странице? 31. Какое свойство поля записи или итогового поля нужно использовать, чтобы выводить его значения нарастающим итогом? 32. За счет чего повторяющиеся значения в таблице запроса могут быть отображены в отчете только один раз? 33. Будет ли при просмотре отчета выводиться диалоговое окно ввода параметра, если отчет создан на запросе с параметром? 34. В какой строке бланка запроса указывается наименование параметра? 35. Как просмотреть список полей, доступных в режиме конструктора отчета?
356
Часть I. Основы технологии Microsoft Access
36. Какие поля содержит этот список, если отчет построен на запросе? 37. Какое значение получит вычисляемое поле, если в него записана встроенная функция управления i i f - t [СУММА_ПОСТ]>ЮО 000; 'Особое внимание ' ; ' ' ] , а в записи поле сумма поставки имеет значение 70 ооо? Ответы 1. Из заголовка отчета, верхнего колонтитула, области данных, нижнего колонтитула и примечания отчета. 2. Конструктор отчетов и панель элементов. 3. Нажать на панели инструментов конструктора отчетов кнопку Список полей (Field List). Перетащить нужное поле в раздел отчета. 4. Подпись берется из свойства поля, заданного в таблице. 5. Нет. Только выбор одного из этих свойств приводит к выделению групп с одинаковыми значениями в выбранном поле. 6. По возрастанию. 7. В отчете записи группы не объединяются в одну запись. Один раз используются только поля, по которым осуществляется группировка. 8. В заголовке группы. 9. В примечании группы. 10. Встроенная функция N O W ( ) . И. Свободный элемент создается щелчком по кнопке Поле (Text Box). 12. Файл {Параметры страницы (File|Page Setup).
13. Да. 14. В режиме конструктора.
15. Нет. 16. В свойствах подчиненного отчета на вкладке Данные (Data). 17. На панели элементов должна быть включена кнопка Мастера элементов (Control Wizards). 18. Объект-источник (Source Object). 19. Источник записей (Source Records). 20. На пересечении линеек. 21. Подчиненная форма/отчет (Subform/Subreport) 22. Таблиц и запросов.
23. Да. 24. 4.
Глава 8. Разработка отчетов
357
25. Если в отчете не предусмотрена группировка или не включено ни одного числового поля. 26. Sum, Avg, Min, Max.
27. Инструкция SQL. 28. Открыть построитель щелчком мыши на соответствующей кнопке в строке Источник записей (Record Source) свойств отчета. 29. Перечисленными в инструкции SQL полями. 30. Кнопкой Разрыв страницы на панели конструктора отчетов. 31. Свойство Сумма с накоплением (RimningSum). 32. За счет группировки. 33. Да.
34. В строке Условие отбора (Criteria). 35. Щелкнув на кнопке панели инструментов конструктора отчетов Список полей (Field List). 36. Все поля запроса. 37. Пустая строка.
ЧАСТЬ II МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ТЕХНОЛОГИИ БАЗ ДАННЫХ
Глава 9
Совместное использование баз данных Access в сети База данных часто должна обеспечивать информационные потребности предприятия, объединяя все данные с минимальной избыточностью и предоставляя возможность одновременной работы многих сотрудников для решения различных задач. Такая база данных является общим корпоративным ресурсом, который должен быть доступен всем пользователям через подключение к сети. В предыдущих главах были рассмотрены основы разработки базы данных и всех ее объектов. При этом предполагалось, что созданные приложения Access использовались в однопользовательском режиме, т. е. только один пользователь мог открывать и редактировать файл базы данных. На практике большинство приложений баз данных предназначается для совместной работы многих пользователей компьютерной сети с обшей базой данных. Рассмотрим средства Access, обеспечивающие использование базы данных в таком многопользовательском режиме в сетевой среде. База данных в одноранговой сети. Если в организации меньше десяти компьютеров и они расположены рядом, то возможно использование одноранговой сети, управляемой встроенными средствами операционных систем Windows 98, Windows 2000/XP Professional. Все компьютеры такой сети равноправны. Каждый пользователь может сам определить, какие ресурсы на своем компьютере он предоставляет для общего доступа в сети Все пользователи получают совместный доступ к общим ресурсам. Они могут обращаться к содержимому общих папок, работать с одним файлом базы данных, печатать на одном принтере, выходить в глобальную сеть через один модем. В модели сети, работающей под управлением Windows, компьютеры логически соединены друг с другом напрямую, и для управления сетевыми ресурсами не требуется специального сервера. Одноранговая сеть проста в администрировании. Например, в Windows XP для предоставления доступа к папке достаточно открыть Мой компьютер
362
Часть II. Многопользовательские технологии баз данных
или Проводник., найти нужную папку, в контекстном меню выполнить команду Общий доступ и безопасность и установить флажок Открыть общий доступ к этой папке. Чтобы разрешить другим пользователям изменять файлы в этой обшей папке, необходимо установить флажок Разрешить изменение файлов по сети. Для открытия общей папки, размешенной на другом компьютере, необходимо в окне Мой компьютер или Проводник выбрать пункт Сетевое окружение. Возможно, затем понадобится щелкнуть на значке Вся сеть, выбрать сеть Microsoft Windows Network, к которой необходимо получить доступ, и компьютер, на котором размещена папка. Для обеспечения доступа к общей базе данных ее необходимо разместить на одном из компьютеров одноранговой сети и определить совместный доступ к папке, в которой находятся файлы этой базы данных. База данных в локальной сети с файловым сервером. На средних и крупных предприятиях, располагающих значительным числом компьютеров, используются компьютерные сети, основанные на концепции файлового сервера. Примерами сетевых операционных систем, поддерживающих эту концепцию, являются NetWare Novell и Windows NT/2000/XP Server. Основная идея этой концепции — выделение одного компьютера в качестве файлового сервера, все остальные компьютеры сети являются рабочими станциями, имеющими доступ к ресурсам файлового сервера. Сервер обеспечивает функционирование сети. В папке на сетевом диске файлового сервера размещаются файлы общей базы данных, доступные со всех рабочих станций сети. Средствами сетевой операционной системы обеспечивается доступ к этой папке и файлам всех пользователей сети, работающих с общей базой данных. Чтобы получить доступ к общей базе данных с другого компьютера, Microsoft Access должен быть установлен на нем (локальная установка) или на файловом сервере (сетевая установка, лицензированная по количеству пользователей). В последнем случае при запуске Access копируется с файлового сервера и загружается в оперативную память компьютера рабочей станции, т. е. выполняться Access и в этом случае будет на каждой рабочей станции. Установка Access на рабочей станции обеспечивает более высокую скорость работы. Возможно распространение выполняемых (runtime) версий Access. Это позволит, пользователям запускать уже существующие приложения, однако изменять или создавать новые приложения будет невозможно. (
Замечание
^
Лицензия на свободное распространение и средства, позволяющие распространять копии runtime-версий Access пользователям, даже если на их компьютерах не установлен Access, включены в Microsoft Office для разработчиков в компакт-диск Microsoft Office Developer Tools.
Глава 9. Совместное использование баз данных Access в сети
363
Все пользователи получают доступ к таблицам, формам, отчетам и другим объектам общей базы данных Access. При этом несколько пользователей одновременно могут просматривать и обновлять базу данных, решая задачи приложения на своей рабочей станции. В качестве примера на рис. 9.1 приведена схема работы пользователей с общей базой данных "Поставка товаров", размещенной на файловом сервере,
ВВОД справочники покупателей, складов, товаров ВЫВОД списки покупателей, складов, товаров, выборка договоров и накладных
Рабочая гганция Отдел соьна Список заказчиков, получивший (не попоивших) товары по договорам Анализ движения товаров по складам
ФАЙЛОВЫЙ СЕРВЕР Рабочая сташшя Плановый огдел
ОБЩАЯ БАЗА ДАННЫЕ Таблиц
Договора на поставку товаров ЫВОД
списки покупэтепей.товаров. выборка договоров и накладных Анализ выполнения договоров
Рабочая гташшя ВВОД Накладные на отгрузку товаров ВЫВОД списки покупателей,товаров, выборка договоров и накладных ЗАДАЧА проверка текущихзапэсов
Накладные на стгрузку товаров ОД списки покупателей.тоеаоов, выборка договоров и накладных ЧА проверкатекушдазапасов
Рис. 9.1. Схема работы пользователей с общей базой данных "Поставка товаров"
Защита базы данных Access Средства зашиты от несанкционированного доступа пользователей к данным и разграничение доступа к различным объектам базы данных предназначены, главным образом, для многопользовательской среды, хотя могут быть использованы и для предотвращения просмотра и изменения данных, хранимых на отдельном компьютере. Access располагает средствами, гарантирующими надежную защиту созданной в ее среде базы данных. Как известно, операционные системы Windows позволяют организовав контролируемый доступ к автономной компьютерной системе путем созда-
364
Часть II. Многопользовательские технологии баз данных
ния учетных записей пользователя. Системный администратор, создавая учетные записи, присваивает каждому пользователю уникальный идентификатор и права, позволяющие пользователям выполнять интерактивный вход в систему. С каждым идентификатором связывается пароль, определяемый пользователем и известный операционной системе. При регистрации пользователь указывает свой пароль и операционная система проверяет (аутенгифицирует), является ли данный пользователь зарегистрированным в системе. Объединение компьютеров в одноранговую сеть, предназначенное для работы пользователей с такими объектами, как общие папки и принтеры, называемое рабочей группой, не обеспечивает централизованное предоставление учетных записей и проверку подлинности. Поэтому в одноранговых сетях для организации надежной защиты баз данных особенно важно использовать систему безопасности Access. При размещении базы данных на файловом сервере следует иметь в виду, что пользователь приобретает права доступа к файлу базы данных, определенные администратором сети. В сетевых операционных системах, обеспечивающих работу сети с файловым сервером, таких как NetWare Novel или Windows 2000/XP Server, предусмотрены мощные средства защиты от несанкционированного доступа к папкам и файлам сервера. Во-первых, каждый пользователь может войти в сеть только в том случае, если он зарегистрирован в этой сети. При этом пользователь имеет уникальное имя и пароль. Во-вторых, каждому пользователю назначаются права доступа к папкам и файлам. В соответствии с назначенными правами пользователь может только читать и обновлять существующие файлы, создавать и удалять новые файлы и папки. Можно ограничить права пользователя возможностью работы только с одной или несколькими папками файлового сервера. При этом остальное содержимое дисков файлового сервера пользователь даже не видит.
Защита на уровне пользователей Для доступа пользователей к базам данных Access может быть организована отдельная проверка. Теперь уже в среде Access администратор базы данных создает учетные записи также с уникальными идентификаторами пользователей и паролями. Последние задаются конкретными пользователями и известны подпрограммам Access. При открытии базы данных пользователь должен ввести имя и пароль, чтобы подтвердить свое право на доступ к объектам базы данных. После получения права доступа к базам данных пользователю могут предоставляться различные разрешения на доступ к конкретным объектам базы данных: таблицам, запросам, формам, отчетам и макросам. Эти разрешения
Глава 9. Совместное использование баз данных Access в сети
365
могут выдаваться зарегистрированным пользователям либо администратором базы данных, либо владельцами объектов. Для удобства и упрощения управления учетными записями пользователей и разрешениями на доступ к объектам базы данных в системе безопасности Access, как и в большинстве систем безопасности других программ, предусматривается создание учетных записей групп, которым, как и отдельным пользователям, разрешен доступ к объектам. Создание группы позволяет присваивать одинаковый набор разрешений на доступ сразу нескольким пользователям. В группы включаются учетные записи пользователей, которые будут располагать в значительной степени одинаковыми разрешениями на доступ к базе данных. Разрешения, присвоенные группам, автоматически распространяются на всех пользователей, входящих в нее. Таким образом, добавляя новых пользователей в соответствующие группы, администратор гарантирует для них ранее определенный набор разрешений. При этом не исключается возможность обеспечения дополнительных разрешений на доступ отдельным пользователям группы. Например, можно организовать защиту базы данных "Поставка товаров" с помощью создания учетных записей таких групп: Руководители для руководства фирмы, Покупатели для представителей заказчика товаров, Бухгалтерия для административного персонала, Разработчики. После этого нужно присвоить необходимые разрешения каждой из групп. Например, группе Руководители можно разрешить просмотр, ввод или изменение данных в таблицах ДОГОВОР, ПОСТАВКА^ПЛАН и др., но не разрешать изменять структуру этих таблиц. Члены группы Покупатели могут быть допущены только к просмотру данных в таблице, содержащей сведения о заказах, и не иметь доступа к таблице платежная ведомость. При создании учетной записи для нового сотрудника эта запись будет добавляться в одну из групп, и сотрудник автоматически получит разрешения, назначенные этой группе. В то же время отдельным пользователям группы могут быть назначены некоторые дополнительные разрешения, при этом нельзя лишить пользователя права, которым обладает группа. В Access по умолчанию определена одна стандартная учетная запись пользователя Admin с пустым паролем и две стандартные учетные записи групп: группа администраторов (Admins) и группа пользователей (Users). Учетные записи пользователя Admin являются одинаковыми для всех экземпляров Microsoft Access.
Активизация системы защиты Когда пользователь в первый раз запускает Access после установки, автоматически создается файл рабочих групп Access, который имеет имя System.mdw.
366
Часть II. Многопользовательские технологии баз данных
Именно в нем определяются стандартные учетные записи. С этого момента включается система защиты Access. Однако как при первом, так и при последующих запусках Access автоматически подключает всех пользователей с помощью единственной встроенной учетной записи пользователя Admin, включенной в созданный файл рабочей группы. Члены группы Admins имеют разрешения на доступ ко всем объектам базы данных. В результате все пользователи без пароля и с разрешениями на доступ ко всем таблицам, запросам, формам, отчетам и макросам, созданным в рабочей группе, подключаются к базам данных. Таким образом, все пользователи будут работать в Access с правами администратора с полным доступом ко всем средствам системы безопасности, выступая и в роли администратора рабочей группы, и в роли владельца всех создаваемых баз данных и таблиц, запросов, форм, отчетов и макросов. Для того чтобы в Access активизировалась функция аутентификации, достаточно в окне команды Сервис)Защита|Пользователи и группы (Tools|Security| User and Group Accounts) установить пароль для учетной записи A d m i n . Это можно сделать сразу после запуска Access, не открывая базы данных. Установив пароль, закройте Access, запустите его снова и откройте базу данных. Поскольку учетная запись Admin защищена паролем, на экране появится диалоговое окно Вход (Logon), представленное на рис. 9.2.
Рис. 9.2. Окно регистрации пользователя Access
После регистрации при открытии одной базы данных можно без входа в систему открывать другие базы данных, для которых верны имя и пароль, введенные ранее. Для более надежной защиты необходимо определить новые учетные записи для администратора и владельца (или единой учетной записи, являющейся записью и администратора, и владельца), являющихся членами группы Admins. После этого следует удалить учетную запись пользователя Admin из группы Admins. Удалить учетную запись Admin из группы Admins до создания новой учетной записи администратора в этой группе невозможно, т. к. она должна содержать хотя бы одного участника. В группу Admins разрешается добавлять произвольное число учетных записей, однако владельцем базы данных может быть только одна учетная за-
Глава 9. Совместное использование баз данных Access в сети
367
пись — та, которая была активна при создании базы данных, либо та, которая была активна при передаче права владельца путем создания новой базы данных и импорта в нее всех объектов из исходной базы данных. Владельцами таблиц, запросов, форм, отчетов и макросов базы данных могут являться учетные записи любых групп. Во многих случаях вполне достаточно двух групп пользователей: группы администраторов Admins и группы пользователей Users, и нет необходимости создавать другие группы. При этом необходимо присвоить соответствующие разрешения стандартной группе Users и добавить дополнительных администраторов в стандартную группу Admins. Каждый новый пользователь автоматически добавляется в группу Users. Типовые разрешения на доступ для группы Users могут включать Чтение данных для таблиц и запросов и Открытие/запуск для форм и отчетов. Только члены группы Admins должны иметь право добавлять и удалять новых пользователей и группы, предоставлять и снимать разрешения на доступ к объектам баз данных. Поэтому право администрирования для группы Users должно быть отменено. Если появилась группа пользователей, права которых отличаются от прав членов группы Users, необходимо добавить новую группу. Это упростит процесс присвоения разрешений отдельным пользователям. Например, наряду с группой Users, которой разрешено только просматривать данные, может сушествовать группа, членам которой разрешено обновлять данные. Создание новой учетной записи группы, добавление пользователей в группу производится командой Сервис (Защита) Пользователи и группы (Tools| Security] User and Group Accounts), доступной сразу после запуска Access. Предоыставление соответствующих разрешений производится командой Сервис| Защита)Разрешения (Tools|Security|User and Group Permissions), доступной только после открытия базы данных. Перед выполнением команды Сервис] Защита|Пользователи и группы, так же как и перед открытием базы данных, появляется диалоговое окно Вход (Logon), требующее регистрации пользователя. Для упрощения управления разрешениями на доступ рекомендуется присваивать разрешения только группам (а не отдельным пользователям), а затем добавлять пользователей в соответствующие группы. Группы пользователей в системе защиты Access и рабочие группы — не одно и то же. Для запуска Access и управления доступом к базе данных члены рабочей группы используют файл рабочих групп. Этот файл содержит сведения о пользователях, входящих в рабочую группу и имеющих право запускать Access. Эти сведения включают имена учетных записей пользователей, их пароли, имена групп, в которые входят пользователи. Кроме того, зд^сь хранятся сведения о настройках рабочей среды каждого пользователя и описания настроенных пользователями панелей инструментов Access. Расположен файл рабочих групп в определенной папке. Так, при работе под управлением операционной системы Windows XP Professional и определении ряда локальных пользователей в системе для каждого из них создается стан-
Часть II. Многопользовательские технологии баз данных
368
дартный файл рабочих групп Systeml.mdw, который сохраняется в системной папке С1гстемньш__корневои_каталог\Т}ос\\теп1$ and 8еШп£8\Я«я_/шльзо0ателя\АррНса1юп Data\Microsoft\Access. При запуске Access этот файл читается для аутентификации пользователей. При открытии базы данных этот файл читается для определения пользователей, у которых есть доступ к объектам базы данных, и разрешения, полученные пользователями на объекты базы. Разрешения на открытие и изменение объектов базы данных хранятся в файле с расширением mdb. Просмотреть, какой именно файл рабочих групп будет использоваться, можно командой Сервис|Защита|Администратор рабочих групп (Tools|Security) Workgroup Administrator). Команда доступна сразу после запуска Access. Пользователи сети, которые работают с данными в режиме общего доступа, должны использовать общий файл рабочих групп. Учетные записи всех пользователей базы данных должны сохраняться в том файле рабочих групп, который будет использоваться для работы с базой данных. Любые создаваемые учетные записи пользователей и групп и пароли сохраняются в том файле рабочей группы, который был открыт при запуске Access. О том, какой именно системный файл рабочей группы следует открыть, Access узнает из системного реестра. Для управления доступом к общей базе данных целесообразно создать новый файл рабочей группы. Создание этого файла начинается в диалоговом окне Администратор рабочих групп (Workgroup Administrator), где нужно нажать кнопку Создать (Save). Вызывается окно командой Сервис{3ащита| Администратор рабочих групп (Tools|Security Workgroup Administrator). В открывшемся окне Сведения о владельце рабочей группы (рис. 9.3) для определения нового файла задаются имя, название организации и WID-код, определяющий группу. Сведения о владельце рабочей группы Для определения нового файла рабочей группы задайте имя, название организации и код. Воспользуйтесь приведенными ниже сведениями или введите другое имя и название организации, Чтобы обеспечить однозначное определение рабочей группы, введите код, содержащий до 20 цифр и букв, различая строчные и прописные.
Имя: Организация: Код группы:
Рис. 9.3. Окно определения параметров нового файла рабочих групп
Глава 9. Совместное использование баз данных Access в сети
369
Поместите файл базы данных и файл рабочих групп в общую папку сервера. Под сервером может пониматься как файловый сервер, так и компьютер одноранговой сети, на котором определена общая папка для размещения баз данных. Присоединение Access к новой рабочей группе осуществляется с помощью администратора рабочих групп. Запустив Access, выберите команду Сервис|Защита|Администратор рабочих групп и в диалоговом окне Администратор рабочих групп нажмите кнопку Связь. В открывшемся окне введите путь и имя файла рабочей группы или выберите файл, воспользовавшись кнопкой Обзор (Browse) (рис. 9.4). При определении местоположения файла на сервере сети целесообразно применять универсальное соглашение об именах UNC и вводить строку \\Имя_сервера\Шпка\Имя_фаш1а. Если общие файлы расположены на компьютере одноранговой сети, то именем сервера является имя компьютера, присвоенное ему в процессе установки операционной системы. При доступе к общему ресурсу сервера сети путем присвоения ему букв логических дисков может возникать проблема, связанная с использованием разными пользователями различных букв. Файл рабочей группы Воспользуйтесь данный именем и путем или введите другое имя и путь для нового файла рабочей группы, Рабочая группа:
stion Daca\Microsoft\Access\5ystemlmdw Отмена
Рис. 9.4. Присоединение Access к новой рабочей группе
Файл рабочей группы, к которому было произведено присоединение, а следовательно, учетные записи пользователей и групп и пароли будут использованы при следующем запуске Access. Если пользователи сети будут использовать стандартный файл рабочей группы, созданный при установке Access, в котором определен один пользователь Admin и две группы Admins и Users, никакой защиты общей базы данных средствами Access обеспечено не будет. Как уже было сказано, возможно изменение стандартного файла рабочей группы в соответствии с требованиями защиты конкретной рабочей группы. Однако при этом сохраняется вероятность того, что кто-то сможет создать другую версию этого файла, используя информацию о нем из раздела реестра HKEY_USERS, и приобрести разрешения на доступ учетной записи администратора в рабочей группе, определяемой этим файлом рабочей группы. Создание нового файла рабочей группы с указанием кода рабочей группы (WID) не позволит создать копию файла рабочей группы тому, кто не знает этого кода.
Часть II. Многопользовательские технологии баз данных
370
Защита объектов базы данных Организация системы защиты объектов базы данных на уровне пользователей в Access выполняется с помощью команды Защита (Security) в меню Сервис (Tools). Для создания и управления учетными записями пользователей и групп, которым нужно разрешить доступ к объектам базы данных, предназначена команда Пользователи и группы (User and Group Accounts). Команда Разрешения (User and Group Permissions) позволяет определить права групп и пользователей на доступ к каждому объекту базы данных. Команда Задать пароль базы данных (Set Database Password) позволяет организовать открытие базы только при предъявлении пароля. Чтобы упростить и ускорить создание системы защиты базы данных, можно воспользоваться услугами Мастера защиты (User-Level Security Wizard). При необходимости после запуска мастера можно вручную назначить или удалить разрешения на доступ для учетных записей пользователей и групп.
Выбор режима доступа к общей базе данных Общая база данных может открываться в монопольном режиме или в режиме общего доступа в соответствии с установленными параметрами. По умолчанию используется режим, заданный параметрами настройки. Первоначально параметры настройки определяют открытие базы данных в режиме общего доступа.
Замечание При открытии базы данных выбором имени файла из списка, который выводится в Области задач (Task Pane) или нижней части меню Файл (File), база данных будет открыта с теми же настройками, с которыми открывалась в последний раэ.
При необходимости использовать базу данных в режиме, отличном от установленного по умолчанию, необходимо открыть базу данных, используя команду Файл|Открыть (File|Open Database) или щелкнув в Области задач (Task Pane) на строке Другие файлы (More). Для установки режима доступа к базе данных нужно в окне Открытие файла базы данных (Open) выбрать файл базы данных и в списке кнопки Открыть (Open) выбрать нужный режим (рис. 9.5). Представленные в списке режимы позволяют выполнить следующие условия при открытии базы данных. П Открыть (Open) — открыть базу данных в режиме общего доступа многих пользователей, которые смогут как читать, так и сохранять данные и объекты в ней;
Глава 9. Совместное использование баз данных Access в сети
371
П Открыть для чтения (Open Read Only) — открыть базу данных в режиме общего доступа только для чтения. При этом невозможно сохранение изменений в данных или описаниях объектов; П Монопольно (Open Exclusive) — открыть базу данных для работы только этого пользователя и предотвратить открытие ее другими пользователями; П Монопольно для чтения (Open Exclusive Read Only) — открыть базу данных только для чтения и только для работы одного пользователя.
Открытие файла базы данных Папка:
,
...
•» Сервис -
^Оеновная_БД_для проектирования.гпсШ '{JjrioKy пка о пл зт а. md Ь Мои последние документы
Рабоиийстоп
^Поставка тоеаpoe.mdb :
4§ ПРИЛОЖЕНИЕ,! OPr.mdb •^JJTIpti да:* а _о пл ат а. rrdb •З^Прод ажи по купк n. mdb •dj Ра с шир е нн да_б д. md b Й]ТОРГОВЛЯ_2003,гпс1Ь '•£ ТОРГОБЛЯ_2004. mdb
Мои документы
Мой компьютер
Имя файла: Мое сетевое окружение
Тип файлов;
Открыть Microsoft Office Access (*.rndbi*.3dp;*.mda,'l'.rride;*.ade) И
Открыть Открыть для чтения Монопольно Монопольно для чтения
Рис. 9.5. Выбор режима доступа к базе данных при работе в сети Режим монопольного доступа
Для того чтобы открыть базу данных для монопольного доступа, надо выбрать из списка пункт Монопольно (Exclusive). Режим монопольного доступа запрещает другим пользователям и программам доступ к этой базе данных. База данных, открытая одним пользователем в монопольном режиме, не доступна для открытия другим пользователям. Монопольный доступ для общей базы данных должен устанавливаться, если необходимо провести такие работы, как изменение структуры БД, внод 13
Зак. S35
372
Часть II. Многопользовательские технологии баз данных
большого объема данных, сжатие или восстановление базы данных после повреждения. Монопольный доступ, как правило, устанавливается администратором базы данных. Чтобы многие пользователи могли одновременно работать с приложением, ни один из них не должен открывать базу данных в режиме монопольного доступа. Режим общего доступа Для того чтобы открыть базу данных в режиме общего доступа, надо выбрать из списка пункт Открыть (Open). Этот же режим выбирается, если, не открывая списка, щелкнуть по кнопке Открыть (Open). Режим общего доступа обеспечивает коллективное использование объектов базы данных, как в режиме чтения, так и в режиме обновления. Многие пользователи могут одновременно открывать одну базу данных в режиме общего доступа. Причем некоторым из них доступ может ограничиваться только чтением. Для того чтобы открыть базу данных в режиме, позволяющем только чтение, надо выбрать режим Открыть для чтения (Open Read Only) или Монопольно для чтения (Open Exclusive Read Only). При открытии базы данные в этих режимах выдается сообщение, приведенное на рис. 9.6.
Microsoft Office Access t
База данным 'Поставка товаров1 доступна только для чтения. Невозможно сохранение измененных данных или описаний объектов Б этой базе данных,
,-„
Рис. 9.6. Сообщение при открытии базы данных только для чтения
В этих режимах не доступны все операции по изменению объектов базы данных. Например, в открытой таблице базы данных нет строки новой записи, заблокированы изменения в полях, а в меню Правка (Edit) не видны строки удаления записей. Если база данных открыта в режиме общего доступа даже только для чтения, другие пользователи не могут открыть ее для монопольного использования. При попытке пользователя открыть базу данных в монопольном режиме ему предоставляется только режим общего доступа. При этом выдается сообщение, приведенное на рис. 9.7. Монопольный доступ предоставляется пользователю только в случае, если с базой данных не работает ни один из пользователей. Если некоторому поль-
Глава 9. Совместное использование баз данных Access^ сети
373
зователю предоставлен монопольный доступ к базе данных, другие пользователи не смогут открыть эту же базу данных для монопольного доступа. Microsoft Office Access
1 )
Невозможно открыть '0:\ЗАНЯТИЯ_2003\Поставка TaeapOB.mdb' с монопольным доступом, так как эта база данных открыта другим пользователем, или у вас нет разрешения на монопольный доступ. Приложение 'Microsoft Office Access' откроет базу данных с общим доступом, ' '!'
Рис. 9.7. Сообщение при попытке открытия базы данных "Поставка товаров" в монопольном режиме
Вне зависимости от режима доступа при изменении пользователем структуры таблицы другие пользователи не смогут получить доступ к ее данным. И наоборот, если хотя бы один пользователь открыл таблицу, никто не сможет изменить ее структуру.
Установка режима доступа по умолчанию Режим доступа, используемый при открытии базы данных по умолчанию, устанавливается в окне Параметры (Options) на вкладке Другие (Advanced) (рис. 9.8). Окно открывается командой меню Сервис|Параметры (Tools| Options). Для того чтобы база данных по умолчанию открывалась для коллективного доступа, параметр Режим открытия по умолчанию (Default Open Mode) должен иметь значение Общий доступ (Shared). Заданные параметры вступят в силу до закрытия окна диалога, если нажать кнопку Применить (Apply). Для применения заданных параметров и закрытии окна диалога нужно нажать кнопку ОК.
Замечание Параметры настройки сохраняются не в базе данных, а в файле рабочей группы пользователя. После изменения параметров настройки они используются для каждой базы данных, которая открывается или создается любым пользователем из этой рабочей группы.
Вне зависимости от установленного по умолчанию режима открытия базы данных в окне Открытие файла базы данных (Open) можно выбрать другой режим. Например, если по умолчанию установлен режим общего доступа, базу данных можно открывать для монопольного доступа или только для чтения.
Часть //. Многопользовательские технологии баз данных
374
Параметры Общие | Правка и поиск Вид Другие Международные
Клавиатура
]
Режим таблицы
Проверка ошибок
]
Формы и отчеты
Орфография
Операции DDE —-
Формат файла по умолчанию
Г™ Пропуск команд DDE;
[Access 2002 - 2003
Р обновление связей DDE
]
Страницы
Таблицы и запросы
Режим открытия по умолчанию
Аргументы командной строки;
*•' общий доступ *"*' монопольный доступ
Время ожидания OLE^DDE (с): Период обновления (с);
Блокировка по умолчанию • [бО
Число повторов обновления;
~J
{* отсутствует '""* всех эаписей
Период обновления ODBC (с):
J1500
Период повтора обновления (ис);
250
(" изменяемой записи Блокировка записей при открытии БД
Рис. 9,8. Установка параметров открытия базы данных коллективного доступа, используемых по умолчанию
Работа с базой данных, открытой для общего доступа В режиме общего доступа данные будут доступны пользователям для одновременного просмотра, ввода и обновления данных. Однако попытки одновременного изменения одних и тех же данных разными пользователями могут привести к конфликту. Access вносит изменения в базу данных сразу же после перехода к другой записи или при выполнении команды сохранения. Например, при попытке одновременно изменить запись нельзя предсказать, какие изменения будут произведены, а какие потеряны. Для предотвращения подобных ситуаций необходимо, чтобы в конкретный момент времени только один пользователь мог вносить изменения в используемые записи. Access для защиты совместно используемых данных предоставляет различные методы блокировки записей на время их изменения пользователем. Блокировка позволяет временно запретить другим пользователям изменять редактируемую в данный момент запись или таблицу, но предоставляет возможность читать данные.
Глава' 9. Совместное использование баз данных Access в сети
375
Если несколько пользователей пытаются внести изменения в одну и ту же запись, на экране появляется сообщение, помогающее разрешить конфликт. Например, при попытке сохранить запись, заблокированную другим пользователем, па экране появляется имя заблокировавшего ее пользователя. Блокировка таблицы и набора записей яачяется менее жесткой в сравнении с открытием базы данных в режиме монопольного доступа, но может оказать заметное воздействие на других пользователей, поэтому используется при больших изменениях в таблице.
Блокировка записей Параметры блокировки записей устанавливаются пользователем, макросом или программой Visual Basic в свойствах форм, отчетов и запросов. Это свойство представлено строкой Блокировка записей (Record Locks) в окне свойств формы на вкладке Данные (Data), в окне свойств запроса на вкладке Общие (General), в окне свойств отчета на вкладке Другие (Other). В формах это свойство определяет способы блокировки записей в базовой таблице при обновлении содержимого обшей базы данных, а также в результирующей таблице запроса, на котором построена форма. В отчетах это свойство определяет, блокируются ли записи в базовой таблице или запросе, на которых построен отчет, при печати или просмотре отчета. В запросах это свойство определяет, блокируются ли записи в таблице запроса при выполнении запроса на добавление, удаление, обновление пли создание таблицы. Свойство Блокировка записей (Record Locks) определяет способы блокировки записей и их реализацию при попытке нескольких пользователей одновременно изменить одну и ту же запись. Когда один пользователь изменяет запись, Access может автоматически заблокировать ее, чтобы запретить другим пользователям изменять эту запись до завершения работы с ней первого пользователя. Свойство Блокировка записей (Record Locks) может принимать одно из трех значений: О Отсутствует (OnLocks) (значение по умолчанию). В отчетах записи не блокируются при выводе на просмотр или на печать. В запросах записи не блокируются при выполнении запроса на изменение. В формах допускается одновременное изменение записи двумя или несколькими пользователями. Если два пользователя пытаются сохранить изменения одной записи, Access выводит предупреждающее сообщение тому из пользователей, кто сохраняет запись вторым. Этот пользователь может сохранить свой вариант записи, уничтожив изменения, внесенные другим пользователем; скопировать свою измененную запись в буфер обмена или отка-
376
Часть II. Многопользовательские технологии баз данных
заться от собственных изменений. Данное значение позволяет изменять записи в любое время, но при внесении изменений разными пользователями могут возникать конфликты. П Всех записей (All Records). Блокируются все записи в базовой таблице или запросе при открытии формы в режиме формы или в режиме таблицы, во время просмотра или печати отчета и при выполнении запроса. Другим пользователям разрешается просматривать записи, но они не могут изменять, добавлять или удалять любые записи до закрытия первым пользователем формы, до завершения этим пользователем печати отчета или до завершения запроса, в которых установлено значение блокировки записей. Блокировка всех записей является блокировкой таблицы. П Изменяемой записи (Edited Record). Это значение свойства Блокировка записей (Record Locks) может быть установлено только в формах и запросах. При этом может блокироваться страница записей. Страница — это блок данных в файле базы размером в 4 Кбайт, который может содержать одну или несколько записей. Как только любой из пользователей начинает вносить изменения в любое поле одной из записей страницы, страница блокируется и остается заблокированной до тех пор, пока запись не будет сохранена. Access дополнительно к блокировке страничного уровня поддерживает блокировку на уровне единственной записи. Выбор режима блокировки на уровне записи в текущей базе данных производится параметром Блокировка записей при открытии базы данных (Open databases using record level locking), который устанавливается на вкладке Другие (Advanced) при выполнении команды Сервис|Параметры (Tools)Options). Этот вид блокировки накладывает минимальные ограничения и позволяет многим пользователям работать в режиме обновления данных. Если этот параметр не выбран, по умолчанию будет использована блокировка на уровне страницы. В режиме формы и режиме таблицы при попытке изменить значения в заблокированной другим пользователем записи в области выделения записи отображается символ блокировки 1Ф1. Для задания режима блокировки записей для конкретной .формы, запроса или отчета необходимо открыть их в режиме конструктора, вывести окно свойств и установить требуемое значение свойства Блокировка записей (Record Locks).
Параметры блокировки записи, используемые по умолчанию Если пользователь не определил значения свойства Блокировка записей (Record Locks) в объектах базы данных, то используются параметры по
Глава & Совместное использование баз данных Access в сети
377
умолчанию. Для того чтобы просмотреть и, если необходимо, изменить эти параметры, нужно выбрать в меню Сервис (Tools) команду Параметры (Options). В окне Параметры (Options) необходимо выбрать вкладку Другие (Advanced) и на ней один из параметров в группе Блокировка по умолчанию (Default Record Locking) (см. рис. 9.8). Заметим, что команда Параметры (Options) появляется в меню Сернис (Tools) только при открытой базе данных.
Файл сведений о блокировках При открытии файла базы данных с расширением mdb в режиме общего доступа Access создает файл сведений о блокировках с расширением Idb с тем же именем и в той же папке, что и файл базы данных. В этом файле сохраняются имя компьютера и имена всех совместно работающих пользователей базы данных в системе защиты. Microsoft Access использует эти сведения для управления совместной работой. Как правило, Access автоматически удаляет файл сведений о блокировках при закрытии файла базы данных последним пользователем.
Отображение на экране последней версии данных В сети нескольким пользователям часто приходится работать с одними и теми же записями. Для того чтобы обеспечить использование последней версии данных, надо обновлять отображение данных на экране. Отображение последней версии данных, выводящихся в форме или другом объекте в режиме таблицы, может производиться командой Записи)Обновить (RecordsjRefresh). Если за время до обновления отображения какая-либо из выведенных записей была удалена другим пользователем, Access выведет в каждом из полей этой записи значение ошибки: ^Удалено (рис. 9.9). Символы, выводящиеся в области маркировки записей, указывают пользователю текущее состояние записей. Символ вносились.
указывает, что запись является текущей; изменения в нее не
Символ I—i указывает, что запись была изменена, но изменения еще не сохранены. Если запись заблокирована, другие пользователи не имеют возможности изменять эту запись и видеть внесенные изменения. Для того чтобы сделать запись доступной для других пользователей, следует либо сохранить изменения, либо отменить их.
Часть //. Многопользовательские технологии баз данных
378
Символ L®J указывает, что запись блокирована другим пользователем. В нее нельзя вносить изменения. При попытке ввода данных в блокированную запись Access подает звуковой сигнал.
Ш ТОВАР : таблица
ЦТ
Единица изи Став а НДС] Наименование товара Г Цена 5% Монитор 17LG 6587,00р. штука 6% FDD 3,5 363,00р. коробка HDD Maxtor 2QGB 1 260,00р. штука 16% 0% Корпус MiniTower 916,00p штука 30% CD-ROM Panasonic IDE Г 1 153,00р. штука DIMM64MPC10Q 360,00р штука 15% #Удалено #Удалено #Удалено #Удзлено 16% СканерАсег 2338,00р. штука Зв. Карта Genius Liv 789,00р. штука 10% Модем Genius ext 1 295,00р. •H3£L — pl^p. — ~j 1 За 1ись: И 1 ^ |Г i из 10 9 > |М
Код товара * Т001 +-7TJQ2 + ТООЗ + TOQ4 * Т005 + TDQ6 + #Удалено * ТОЮ Т + TQ09
Рис. 9.9. Отображение записей, удаленных другим пользователем в сети
При обновлении отображения данных в текущей форме или другом объекте в режиме таблицы Access показывает изменения, сделанные другими пользователями в полях записей, но не изменяет порядок записей, не добавляет новые записи и не убирает удаленные. Для того чтобы увидеть добавленные записи и убрать удаленные, следует выполнить закрытие и повторное открытие формы или другого объекта в режиме таблицы. Эквивалентные действия выполняются нажатием клавиш <Shift>-KF9>.
Автоматическое обновление отображения записей В Access через определенные промежутки времени предусматривается автоматическое обновление отображения записей, просматриваемых в форме или другом объекте в режиме таблицы. Частота обновления определяется настройкой интервала обновления. Для изменения этой величины следует выполнить команду Сервис] Параметры (Tools Options) и ввести новое значение параметра Период обновления (Refresh Interval) на вкладке Другие (Advanced) (см. рис. 9.8). Перечислим параметры, которые регулируют процесс обновления отображения данных на экране и способствуют разрешению конфликтных ситуаций. П Период обновления (Refresh Interval). Этот параметр задает число секунд, по истечении которых Access автоматически обновляет записи и объекте
Глава 9. Совместное использование баз данных^Ассезв в сети
379
в режиме таблицы или формы. Допустимыми являются значения от 1 до 32 766 секунд. При обновлении текущего объекта в режиме таблицы или формы записи не сортируются заново, не добавляются новые записи и не убираются удаленные записи. Для того чтобы увидеть эти изменения, необходимо выполнить операцию обновления данных. О Период повтора обновления (Update Retry Interval). Этот параметр задает число миллисекунд, по истечении которых Access автоматически пытается сохранить измененную запись, заблокированную другим пользователем. Допустимыми являются значения от 0 до 1000 миллисекунд. П Число повторов обновления (Number of Update Retries). Этот параметр задает число попыток сохранения измененной записи, заблокированной другим пользователем. Допустимыми являются значения от 0 до 10.
Изменение объектов базы данных в сети При одновременной работе нескольких пользователей с одной базой данных каждый из них получает свою копию всех форм, отчетов, модулей и других объектов. Изменения, внесенные пользователем в объекты, станут доступными другим пользователям только после того, как они закроют и снова откроют базу данных. Объект в режиме конструктора могут одновременно редактировать несколько пользователей, но при сохранении объекта, который уже изменен другим пользователем, будет выдано сообщение о том, что со времени открытия базы данных объект был изменен. При этом предоставляется возможность либо переписать объект, т. е. записать собственную версию, либо сохранить собственную версию под другим именем. При коллективной работе в сети разрешается изменять большинство объектов базы данных так же, как и при монопольном доступе к базе данных. Исключением являются таблицы, которые невозможно открыть в режиме конструктора, если она используется другими пользователями. Если хотя бы один пользователь открыл таблицу или просматривает данные в запросах, формах или отчетах, для которых эта таблица является базовой, изменять структуру этой таблицы другим пользователям нельзя. Появится сообщение, что таблица доступна только для чтения. Поскольку никто не может просматривать данные из таблицы, открытой некоторым пользователем в режиме конструктора, рекомендуется открывать таблицу в режиме конструктора только на строго необходимое время. Несмотря на то, что изменение объектов базы данных во время работы с ней других пользователей допускается, лучше создать макеты большинства объектов базы данных до ее открытия для коллективной работы.
380
Часть It. Многопользовательские технологии баз данных
При внесении существенных изменений в макет рекомендуется исключить доступ к базе данных других пользователей, установив при ее открытии режим Монопольно (Exclusive) в окне диалога Открытие файла базы данных (Open). При внесении изменений в запрос, форму или отчет одним пользователем другие пользователи смогут получить последнюю версию объекта только после того, как они закроют объект и вновь откроют его. Выполнять обновленные процедуры Function или sub, входящие в модули Visual Basic, другие пользователи смогут только после того, как они закроют и вновь откроют базу данных. Операция сохранения измененного макроса во время его выполнения другим пользователем может привести к ошибкам при выполнении. Во избежание этого рекомендуется перед изменением макроса открывать базу данных для монопольного доступа.
Разделение базы данных на таблицы и другие объекты Помимо рассматриваемого варианта, когда все объекты базы данных хранятся в одном файле и используются совместно, возможен вариант отдельного хранения таблиц на сервере, а других объектов — у каждого пользователя. Разделение существующей базы данных на таблицы и объекты приложения позволяет хранить все таблицы в одном файле базы данных (mdb) на файловом сервере, а формы, отчеты и другие объекты в другом файле базы данных (mdb), копии которого могут быть у всех пользователей общей базы данных. Разделение базы данных на два файла, в одном из которых содержатся таблицы, а в другом — запросы, формы, отчеты, макросы, модули и ярлыки страниц доступа к данным, позволяет пользователям, имея доступ к общему источнику данных, создавать свое собственное приложение. В созданном приложении пользователя таблицы отображаются как связанные. Работа с этими таблицами в приложении не отличается от работы с таблицами в неразделенной базе данных. Следует отметить, что хранение объектов приложения на компьютерах пользователей уменьшает сетевой трафик и повышает производительность работы. Разделить на две части существующую базу данных позволяет команда Разделение баз данных (Database Splitter) из меню Сервис]Служебные программы (ToolsUtilities). Мастер по разделению баз данных в диалоге с пользователем производит все необходимые действия.
Глава 9. Совместное использование баз данных Access в сети
381
ЗАДАНИЕ 1 Создайте для базы данных "Поставка товаров" в группе Users учетные записи пользователей, определите для них пароли. Определите для группы Users разрешения на доступ к объектам базы данных. Отмените право администрирования для группы Users. Для каждой учетной записи определите дополнительные разрешения на доступ к объектам базы данных. Не забудьте активизировать систему защиты. Разместите файл базы данных "Поставка товаров" и файл рабочих групп в одной из обших папок одноранговой сети или в папке на файловом сервере. Убедитесь, что вы имеете право на изменение файлов в этой папке. Откройте базу данных с различных рабочих станций, использовав для входа разные учетные записи пользователя. Убедитесь, что вход в систему невозможен без использования учетной записи и к объектам базы разрешен доступ, определенный для учетной записи. Контрольные вопросы
1. Используется ли в одноранговой сети выделенный сервер? 2. Можно ли в одноранговой сети с разных компьютеров выполнять печать на одном принтере, выходить в Интернет через один модем? 3. Если на компьютерах установлена операционная система Windows 98 или Windows 2000/XP Professional, нужны ли дополнительные средства для управления одноранговой сетью? 4. Где в одноранговой сети должна размещаться база данных для обеспечения к ней общего доступа? 5. В какой программе Windows XP можно открыть обший доступ к папке со всех компьютеров одноранговой сети? 6. На каком компьютере сети с файловым сервером устанавливается сетевая операционная система? 7. Назовите сетевые операционные системы, поддерживающие сети с файловым сервером. 8. На каком компьютере сети с файловым сервером размещается общая база данных? 9. На каком компьютере сети с файловым сервером размещается Access? 10. Где выполняется Access при сетевой установке на файловом сервере сети? 11. Предусмотрена ли в Access защита с использованием учетных записей пользователей? 12. Можно ли в системе защиты Access объединять учетные записи пользователей в группы?
382
Часть !!, Многопользовательские технологии баз данных
13. Какие учетные записи пользователей определены в Access по умолчанию? 14. С помощью какой учетной записи подключаются пользователи к базам данных и какие права они получают, если не активизирована система зашиты Access? 15. Как активизировать систему зашиты Access? 16. Какая команда позволяет добавлять учетные записи пользователей и групп? 17. Какая команда позволяет установить пользователям и группам нужные разрешения на доступ к объектам базы данных? 18. Где сохраняется информация об учетных записях пользователей базы данных? 19. Где должен размешаться файл рабочих групп, сохраняющий учетные записи всех пользователей базы данных? 20. С помощью какой команды осуществляется присоединение Access к нужному файлу рабочих групп? 21. В каких режимах общего доступа может быть открыта база данных? 22. Для каких объектов может устанавливаться свойство Блокировка записей? 23. Какие значения может принимать свойство Блокировка записей? Ответы
1. Нет. 2. Да.
3. Нет. 4. На одном из компьютеров сети в папке, для которой определен совместный доступ. 5. Мой компьютер или Проводник. 6. На файловом сервере. 7. NetWare Novell и Windows NT/2000/XP/2003 Server. 8. На файловом сервере. 9. На компьютере каждого пользователя (локальная установка) или на файловом сервере (сетевая установка). 10. На компьютере каждого пользователя (на каждой рабочей станции сети). 11. Да. 12. Да.
13. Учетная запись пользователя A d m i n и две стандартные учетные записи групп: Admins и Users.
Глава 9. Совместное использование баз данных Access в сети
383
14. С помошью учетной записи Admin и полными правами на доступ ко всем объектам базы данных. 15. Установить в окне команды Сервис|3ащита[Пользователи и группы пароль для учетной записи Admin. 16. Сервис|3ащита (Пользователи и группы. 17. Сервис{3ащита|Разрешения. 18. В файле рабочих групп. 19. В общей папке файлового сервера или на одном из компьютеров одноранговой сети, где определена общая папка для размещения баз данных. 20. Сервис]Защита[Администратор рабочих групп. 21. Открыть, Открыть для чтения, Монопольно, Монопольно для чтения. 22. Для форм, отчетов и запросов. 23. Отсутствует, Всех записей, Изменяемой записи.
Глава 10
Работа Access с данными на SQL-сервере Access предоставляет возможность использовать данные из различных внешних источников. Внешними источниками данных могут служить таблицы других баз данных Access, Microsoft FoxPro, dBase, Paradox и Microsoft SQL Server, таблицы и списки форматов HTML и НТХ, находящиеся на сервере в локальной, корпоративной сети или в Интернете, данные из других приложений, таких как Microsoft Excel, Microsoft Exchange. Настоящая глава посвящена технологии работы в сети с данными базы коллективного использования, размещенной на Microsoft SQL Server.
Microsoft SQL Server В сетевых системах с файловым сервером при коллективном использовании базы данных Access более чем 15 пользователями и значительных размерах БД производительность становится недопустимо низкой. Это связано с увеличением объема передаваемых по сети данных, поскольку их обработка производится на компьютере пользователя. Например, если пользователю необходимо получить информацию об одном товаре, то на его компьютер должны быть переданы данные обо всех товарах (тысячи строк), из которых локальная СУБД выберет одну строку. Для построения более эффективной системы обработки общей базы данных целесообразно использовать архитектуру "клиент-сервер". Программное обеспечение архитектуры "клиент-сервер" состоит из двух частей: программного обеспечения сервера и программного обеспечения пользователя-клиента. Программа-клиент выполняется на компьютере пользователя и посылает запросы программе-серверу, которая работает на компьютере общего доступа. Основная обработка данных производится мощным сервером, а на компьютер пользователя возвращаются только результаты выполнения запроса. В такой архитектуре сервер называется серее-
Глава 10. Работа Access сданными на SQL-сервере
385
ром баз данных. Схема взаимодействия клиентских приложений Access с SQL-сервером баз данных приведена на рис. 10.1.
Приложение клиента (Access)
Приложение клиента (Access)
Приложение клиента (Access)
Рис. 10.1. Схема взаимодействия приложений клиентов с SQL-сервером
Сервер баз данных ориентирован на хранение и обработку больших объемов данных, на одновременную работу большого числа пользователей и обеспечивает при этом высокую производительность, надежность и защищенность. Доступ к данным и их изменение производятся по запросам пользователей, обработка которых осуществляется на сервере. Пользователю-клиенту, сделавшему запрос, возвращается только результат выполнения запроса. Широко известными СУБД, применяемыми в архитектуре "клиент-сервер", являются Microsoft SQL Server, Oracle, Sybase SQL Server и др. Эти СУБД являются реляционными SQL-серверами баз данных. СУБД с архитектурой "клиент-сервер" может включать собственную клиентскую программу. В то же время в качестве клиентов сервера баз данных могут использоваться другие СУБД. Access также может работать в качестве клиента SQL-сервера. Для взаимосвязи клиентов с сервером разработано специальное программное обеспечение. Широко используемыми интерфейсами таких взаимосвязей являются ODBC и OLE DB. Access предоставляет несколько способов взаимодействия приложения с данными сервера на основе интерфейса ODBC. Начиная с версии 2000, Access содержит средства создания клиентских приложений Microsoft SQL Server, которые позволяют не только не-
386
Часть II. Многопользовательские технологии баз данных
пользовать существующие на сервере базы данных, но и создавать новые, и взаимодействуют с ними на основе интерфейса OLE DB. Данные в базе Microsoft SQL Server организуются в логические компоненты, такие как таблицы, представления, сохраняемые процедуры. Физически база данных сервера хранится в нескольких файлах на диске. SQL Server может сохранять несколько баз данных. Среди них — четыре системные базы данных и одна или несколько баз данных пользователя. Можно иметь только одну .базу данных, содержащую данные для всех пользователей, или разные базы данных для каждой группы пользователей. Например, организация может иметь одну базу данных для продаж, другую для платежей, третью для приложения, управляющего документами, и т. д. Приложение может использовать только одну базу данных или иметь доступ к различным базам данных. SQL Server способен обслужить тысячи пользователей, одновременно работающих в многочисленных базах данных на сервере. Все пользователи, которые подключаются к серверу, получают доступ к базам данных в соответствии с определенными правами. Централизованное хранение и управление данными, осуществляемое с помощью SQL Server, позволяет не загружать на компьютер каждого клиента отдельные копии данных. Это гарантирует работу всех пользователей с одними и теми же данными. SQL Server обеспечивает полную защиту при попытках корректировать одновременно одни и те же данные. Сервер эффективно распределяет оперативную и дисковую память среди многочисленных пользователей. SQL Server обеспечивает надежное обслуживание больших баз данных, имеет широкие возможности по администрированию, защите, разграничению доступа к данным. Microsoft SQL Server ориентирован на создание и ведение БД на уровне предприятия. Основное его назначение — работа с крупными корпоративными базами данных емкостью в согни гигабайт и единицы терабайт. Для администрирования SQL Sewer используется универсальная консоль администратора, которая может обслуживать различные серверные продукты Microsoft. Из единой консоли администратора можно управлять не только SQL Server, но и Internet Information Server (IIS), и всеми серверами организации. Основным режимом работы SQL Server является работа на мощных серверах под управлением Windows NT или 2000/2003 Server. В то же время SQL Server может устанавливаться и для работы под управлением Windows NT Workstation, Windows 95/9S или Windows 2000/XP Professional.
Microsoft SQL Server 2000 Desktop Engine Microsoft SQL Server 2000 Desktop Engine позволяет разрабатывать и тестировать проекты Access или приложения с архитектурой "клиент-сервер" на
Глава 10. Работа Access сданными на SQL-сервере
357
персональном компьютере или рабочей станции, не подключаясь к базе данных SQL Server на удаленном сервере. Изменив сведения о подключении проекта Access, можно выполнить окончательное тестирование и ввод его в эксплуатацию. Работа в этом режиме целесообразна в том случае, если базы данных сервера будут использоваться небольшой группой пользователей, но в дальнейшем может возникнуть необходимость в эксплуатации мощного сетевого сервера баз данных. Desktop Engine является минимальным из всех изданий Microsoft SQL Server 2000. Технология Microsoft SQL Server 2000 Desktop Engine обеспечивает локальное хранение данных в формате, совместимом с Microsoft SQL Server 2000, и, кроме того, может использоваться при удаленном хранении данных в качестве ядра обработки данных в архитектуре "клиент-сервер", альтернативного ядру базы данных Jet для файлового сервера. Предыдущая версия Microsoft SQL Server 2000 Desktop Engine называлась Microsoft Data Engine (MSDE). Microsoft SQL Server 2000 Desktop Engine поставляется как часть Microsoft Office в папке \MSDE2000 компакт-диска (самоизвлекающаяся программа MSDE2KS3.EXE). Эта версия SQL-сервера может устанавливаться на компьютере с операционной системой начиная с Windows 98.
Замечание При первой установке Microsoft SQL Server 2000 Desktop Engine поспе завершения выпопнения программы самоизвлечения необходимо выполнить команду setup.exe с параметром. Это можно сделать в режиме эмуляции MS-DOS. Для перехода в режим эмуляции MS-DOS выберите в меню Пуск команду Выполнить, введите CMD и нажмите клавишу <Enter>. Затем введите следующие команды; CD \sqi2ksp3\msde setup.exe SAPWD="AStrongSAPwd" По умолчанию команда setup.exe после самоизвлечения находится в папке C:Vsql2ksp3\msde. При обновлении существующей версии команда setup exe записывается в следующем виде: setup.exe /upgrades? setup\sqlrun01 .msi SAPWD="AStrongSAPwd"
В Microsoft SQL Server 2000 Desktop Engine существует ограничение на максимальный размер базы данных (2 Гбайт) и число одновременно обслуживаемых пользователей (до 6), хотя сервер сохраняет производительность и при значительно большем их числе, если компьютер, выполняющий функции сервера в одноранговой сети, обладает достаточными ресурсами (прежде всего памятью).
388
Часть II. Многопользовательские технологии баз данных
Кроме встраиваемой Microsoft SQL Server 2000 Desktop Engine версии, на локальном компьютере может устанавливаться версия Microsoft SQL Server 2000 Personal Edition. Основным отличием этой версии от MSDE является то, что она включает полный набор инструментов управления: Microsoft Management Console (MMC), SQL Enterprise Manager и другие графические средства, упрощающие создание и управление базами данных; а также 'обеспечивающие максимальные возможности приложения Microsoft SQL Server Standard Edition. Microsoft SQL Server 2000 Desktop Engine является прекрасным инструментом для изучения средств управления базами данных архитектуры "клиентсервер". При этом нет необходимости приобретать Windows NT или Windows 2000 и SQL Server, т. к. этот вариант сервера включен в Microsoft Office 2003, и не нужно заниматься настройкой параметров сети.
Язык структурированных запросов — SQL Универсальным языком запросов к SQL-серверу различных приложений, в том числе Access, является язык структурированных запросов — SQL (Structured Query Language). В Access язык SQL является основным средством доступа к данным базы. Он используется для выборки, обновления, удаления, добавления данных. Любой запрос в Access реализуется с помощью языка SQL. Большинство запросов можно разработать, используя графические средства конструирования запросов, однако и в этом случае запрос генерируется и хранится в виде инструкции SQL. Для того чтобы увидеть инструкции SQL, реализующие запросы на обработку данных в базе, надо, находясь в окне конструктора запросов, выбрать пункт Вид|Режим SQL (View|SQL View). Каждый раз, когда вы создаете запрос в режиме конструктора, открывайте окно SQL и читайте соответствующую инструкцию SQL. Это позволит вам быстро ознакомиться с основными инструкциями SQL. Язык SQL является языком реляционных баз данных и наиболее распространенным языком управления базами данных в системах архитектуры "клиент-сервер". При взаимодействии приложений Access с SQL Server также используется этот'язык. Следует отметить, что язык SQL имеет множество диалектов, порожденных 'различными разработчиками. Это затрудняет работу приложений, созданных в одних СУБД, с базами данных других СУБД, несмотря на то, что они также используют язык SQL при работе с данными. Последний утвержденный на сегодня стандарт SQL для реляционных баз данных, называемый SQL92 или ANSI SQL, является усовершенствованием
Глава 10. Работа Access сданными на SQL-сервере
389
ранее принятого Американским национальным институтом стандартов (ANSI — American National Standards Institute) и зарегистрированного Международной организацией стандартов (ISO — International Standards Organization) SQL86. Этот стандарт обобщает основные известные реализации языка. Причем ядро стандарта содержит функции, реализованные в большинстве коммерческих версий языка, а полный стандарт включает расширения, которые многими производителями еще не реализованы или реализованы на своем диалекте. Кроме того, некоторые программные продукты были выпущены еще до принятия стандарта и используют язык, синтаксис которого не соответствует стандарту. В связи с этим инструкции SQL, предназначенные для выполнения в одной базе данных, зачастую не могут быть выполнены в другой базе данных и требуют модификации. SQL относится к категории множественно-ориентированных языков, поэтому в него не входят ни средства управления выполнением программы, такие как организация ветвлений или циклов, ни средства организации интерфейса, такие как создание форм или распечатка отчетов. SQL-Server содержит расширенную версию SQL, которая имчет название Transact-SQL или TSQL. Transact-SQL обеспечивает полную поддержку команд стандартного языка SQL. Этот язык включает расширенные средства программирования, такие как дополнительные типы данных, команды контроля за выполнением, встроенные функции, средства обеспечения целостности данных, сохраненные процедуры и триггеры, выполняющиеся на сервере. В Access 2002 и более поздних версиях запросы можно создавать в одном из двух несовместимых режимов запроса ANSI SQL: ANSI-89, который описывает традиционный синтаксис Jet SQL или ANSI-92, который близок к спецификации ANSI-92 уровня 1; запросы ANSI-92 могут выполняться с минимальными изменениями в базе данных Microsoft SQL Server. Если предполагается будущее развитие приложения до проекта Access и необходимо разработать запросы, которые будут выполняться в базе данных Microsoft SQL Server, или необходимо воспользоваться преимуществами новых средств, отсутствующих в ANSI-89 SQL, должен быть использован режим ANSI-92 SQL. Данный режим устанавливается на вкладке Таблицы и запросы в окне параметров, вызываемом командой Сервис|Параметры. Компании при разработке ANSI SQL-совместимых программ, имея право расширять язык SQL, должны поддерживать стандартный набор основных команд. Для взаимосвязи клиентов с сервером разрабатывается специальное программное обеспечение — интерфейсы. Группой производителей СУБД (SQL Access Group) разработан стандартный интерфейс языка, учитывающий особенности всех основных вариантов SQL. Этот интерфейс был формализован Microsoft и получил название открытого
390
Часть II. Многопользовательские технологии баз данных
интерфейса подключения к базам данных (Open Database Connectivity ODBC). Все программные продукты Microsoft могут получать через этот интерфейс доступ к различным базам данных, использующим SQL. В СУБД других фирм также обеспечивается поддержка стандарта ODBC. Access позволяет использовать интерфейс ODBC для доступа к данным из различных внешних источников, в том числе баз данных SQL Server. Для обеспечения взаимодействия с данными SQL Server в Access, начиная с версии 2000, помимо технологий, ориентированных на ODBC, используется технология OLE DB, которая обеспечивает универсальный доступ к данным. Для SQL Server технология OLE DB является базовой. OLE DB — это набор OLE-интерфейсе в, предназначенных для доступа к данным самых разных источников. Целью создания OLE DB является увеличение скорости и упрощение доступа к данным, сохраняемым в различных форматах.
Работа Access с SQL Server через ODBC В Access использование данных из базы Microsoft SQL Server, как и из других внешних источников, для которых имеется интерфейс ODBC, реализуется способами, рассмотренными ниже. 1. Запросы на языке SQL к базам данных SQL Server. С помощью запросов на SQL можно выполнить выборку данных из таблиц, сохраняемых на сервере, добавление, обновление данных и структур таблиц сервера. Запросы к серверу могут содержать инструкции для создания и удаления таблиц в базе данных и даже баз данных на сервере. Запросы передаются и выполняются непосредственно на сервере. Запросы целесообразно использовать для запуска сохраняемых процедур на сервере. 2. Связь с таблицами баз данных SQL Server. При этом таблицы сервера отображаются в окне базы данных Access для их просмотра и изменения средствами Access. Данные остаются в формате источника, но представлены как объекты Access, и могут быть обработаны с помощью инструментальных средств Access. 3. Импорт объектов SQL Server в текущую базу данных Access. При импорте объектов создаются их копии. Исходные объекты источника при этом не изменяются. В Access внешние данные можно использовать при создании запросов, форм, отчетов, причем можно объединить внешние данные с данными из объектов Access. При взаимодействии Access с сервером локальные таблицы базы данных могут быть экспортированы в общую базу данных сервера. Таким образом, можно, создав таблицу в Access, разместить ее в базе данных сервера. Для работы в Access с внешними данными на SQL-сервере необходимо подключиться к их источнику через интерфейс ODBC.
Глава 10, Работа Access сданными на SQL-сервере
391
Определение внешних источников данных в ODBC ODBC предназначен для соединения приложения, выполняющегося на рабочей станции, с сервером и выполнения процедур, связанных с получением и обработкой данных. Основными компонентами ODBC являются администратор и драйвер. Администратор ODBC устанавливает соединение с указанным пользователем внешним источником данных, поддерживает связь между приложением и сервером, обеспечивает приложение информацией и, по мере необходимости, загружает драйвер. Драйвер управляет взаимодействием приложения с сервером, переводит SQL-выраж е н и я приложения на диалект источника данных, перехватывает ошибки. Драйверы ODBC содержатся в динамически подключаемых библиотеках формата DLL. Если из приложения Access требуется получить доступ к базам данных SQL, необходимо, чтобы был установлен соответствующий драйвер ODBC. Ряд драйверов ODBC поставляется вместе с Access (в том числе драйвер Microsoft SQL Server), и они могут быть установлены уже при инсталляции Access. Дополнительные драйверы ODBC, поддерживающие другие форматы данных, могут быть приобретены у независимых поставщиков. Microsoft Access требует 32-разрядных драйверов ODBC, совместимых с протоколом ODBC уровня I. Приобретаемые драйверы должны быть проверены в работе с Microsoft Access. Схема взаимодействия приложения Access с различными базами данных SQL представлена на рис. 10.2.
Приложение Access
Администратор ODBS (поставляется Microsoft)
Драйверы ODBC для разных СУБД (предоставляются разработчиками этих СУБД) Базы данных SQL (локальные и удаленные)
Рис. 10.2. Схема взаимодействия Access с внешними базами данных
Часть II. Многопользовательские технологии баз данных
392
Схема взаимодействия приложения Access при запросах к SQL-серверу, связях с его таблицами, импорте и экспорте в базы данных сервера представлена на рис. 10.3. Компьютер клиента
Компьютер клиента
Драйвер ODBC SQL Server
Драйвер ODBC SQL Server
Драйвер ODBC SQL Server
Рис. 10.3. Схема взаимодействия Access с SQL-сервером
Для того чтобы посмотреть, установлен ли нужный драйвер на вашем компьютере, выберите пункт Источники данных (ODBC) (ODBC Data Sources (32bit)) в списке программ панели управления. В Windows XP ссылка на пункт Источники данных (ODBC) размещена в категории Производительность и обслуживание)Администрирование. Замечание
D
Напомним, что в Windows для открытия окна Панель управления надо щелкнуть на кнопке Пуск (Start) и выполнить соответствующую команду.
В открывшемся окне Администратор источников данных ODBC (ODBC Data Source Administrator) на вкладке Драйверы (Drivers) будут представлены все
Глава 10. Работа Access сданными на SQL-сервере
393
установленные в системе ODBC-драйверы. Убедитесь, что на вашем компьютере установлен драйвер SQL Server. Для добавления и удаления драйверов ODBC используются программы настройки соответствующих драйверов. На этой вкладке операции выполняться не могут. Если драйверы ODBC установлены, то при выполнении операции с внешними данными становится доступным элемент Базы данных ODBC (ODBC Databases), который и позволяет перейти к процедуре подключения к внешнему источнику данных. Этот элемент отображается в списке Тип файла (Save as Type) при импорте в диалоговом окне Импорт (Import), а при связи с таблицей — в окне Связь (Link).
Типы источников данных Для того чтобы получить доступ к базе данных SQL-сервера, необходимо определить источник данных. Источник данных ODBC— это термин, используемый для ссылки на внешнюю базу данных. Для каждой базы данных сервера, с которой работает Access, должен быть создан источник данных. К источникам данных обращаются по именам. Создать источники данных позволяет программа Администратор ODBC. Каждый драйвер ODBC предъявляет собственные требования к созданию и настройке источников данных, Администратор ODBC позволяет настраивать и использовать три типа источников данных. П Пользовательский DSN (User DSN). Источник данных этого типа может быть использован только одним пользователем, работающим на данном компьютере, П Системный DSN (System DSN) предназначен для всех пользователей и системных служб на данном компьютере. П Файловый DSN (File DSN) может совместно использоваться многими пользователями разных компьютеров сети, на которых установлены одинаковые драйверы, для получения доступа к базе данных. При определении этого источника данных, в отличие от других, указывается файл, в котором сохраняется описание источника. Файл имеет расширение dsn. Этот файл должен быть доступен на всех компьютерах сети, пользователи которых будут использовать этот источник данных.
Создание источника данных Рассмотрим создание пользовательского источника данных — Пользовательского DSN (User DSN). Процедура создания источников данных других типов аналогична описанной ниже. Активизируйте диалоговое окно Администратор источников данных ODBC (ODBC Data Source Administrator) и выберите в нем вкладку Пользовательский DSN (User DSN) (рис. 10.4). Первоначально в нем нет источников данных для SQL Server.
Часть II. Многопользовательские технологии баз данных
394
^Администратор источников данных ODBC Драйверы
1
Трассировка
]
Пользовательский DSN
Группировка подключений Системный DSN
j
j
0 программе
Файловый DSN
Источники данных пользователя:
Имя
аивер Microsoft dBase Driver (".dbf) Microsoft Excel Driver (* xls) Excel Files М S Access D atabase Microsoft Access Driver (*.mdb] База данных MS Access Microsoft Access Driver (".mdb] Файлы dBASE Microsoft dBase Driver (*.dbf) Microsoft Excel Driver (' xls) Длы :•• • 1
Источник данных ODBC n а ль зов are л я сохраняет сведения об установке связи с источником. Он доступен только этому пользователю и может применяться лишь изданном компьютере.
Справка
Рис. 10.4. Окно Администратора ODBC при определении пользовательского источника данных Создание нового источника данных Выберите драйвер, для которого задается источник.
Microsoft FoxPro VFP Driver ('.dbf] Microsoft ODBC для Oracle Microsoft Paradox Driver (".db ) Microsoft Paradox-Treiber (*.db ] Microsoft Tent Driver (".txt; * csv) Microsoft Tent-Treiber i'.txt, ".csv] Microsoft Visual FoxPro Oliver Microsoft Visual FoxPro-Treiber SQLServer
Готово
Отмена
,
Рис. 10.5. Выбор драйвера, для которого создается источник данных
Глава 10. Pa6ora_Access сданными на SQL-сервере
395
Для создания нового источника данных нажмите кнопку Добавить (Add), в окне Создание нового источника данных (Create New Data Source) (рис. 10.5) выберите драйвер SQL Server, для которого создается источник. После выбора драйвера и нажатия кнопки Готово к работе подключается мастер создания нового источника данных. Окно мастера Создание источника данных для SQL-сервера (Create a New Data Source to SQL Server) представлено на рис. 10.6.
Create a New Data Source to SQL Server This wizard will help you create an ODBC data source that you can use to connect to SQL Server. What name do you want io use to refer to the data source? Name: (Поставка How do you want to describe the data source? Description: [ра^отаТБД Поставка товаров Which SQL Server do you want to connect to? Server: jUBB-2tti:f
_
Готово
—<ы^^.
_J
Далее > ш
_,_^_J
Отмена
^__^-_
Справка ,^
д||ц
Рис. 10.6. Окно создания нового источника данных на SQL-сервере
В этом окне нужно заполнить следующие поля: П Name (Имя), определяющее имя нового источника данных, которое будет использоваться при подключении приложения к базе данных сервера; D Description (Описание), содержащее комментарий, который поможет определить назначение базы данных, используемой в качестве источники данных; О Server (Сервер), задающее имя SQL-сервера в сети, с которым нужно соединиться для получения доступа к базе данных. Если SQL-сервер установлен на том же компьютере, достаточно указать значение "local". В следующем диалоговом окне выбирается способ проверки прав пользователя на доступ к SQL-серверу при подключении к нему (рис. 10.7).
396
Часть It. Многопользовательские технологии баз данных
К SQL-серверу можно подключаться, используя два режима регистрации: П по доверительному соединению, при котором пользователь, успешно зарегистрировавшийся в сети Windows NT/2000/XP и представленный в списках пользователей сервера, не проверяется дополнительно. Сервер доверяет результатам этой проверки. Этот режим задается при выборе пункта With Windows NT authentication using the network login ID (Проверка подлинности учетной записи Windows NT). В дальнейшем производится только проверка на право выполнения тех или иных работ с объектами баз данных; П путем проверки самим SQL-сервером идентификатора пользователя и пароля, передаваемых непосредственно серверу. Этот режим задается при выборе пункта With SQL Server authentication using a login ID and password entered by the user (Проверка с помощью имени и пароля). Результаты . проверки, выполненной Windows, не учитываются. Идентификатор пользователя и пароль должны быть заранее определены на SQL-сервере администратором и обеспечивают первый уровень защиты данных от несанкционированного доступа. Create a New Data Source to SQL Server How should SQL Server verify She authenticity of the login ID? (• Judith Windows N Т authentication using the network |ogin ID.i {* With SJ]L Server authentication using a login ID and password entered by the user: To change the network libiary used io communicate with SQL Server, click Client Configuration. Client Configuration... Connect to SQL Server to obtain default settings for the additional configuration options.
< Назад
1
Далее >
Отмена
Справка
Рис. 10.7. Выбор способа идентификации пользователя при подключении к серверу
Далее мастер позволяет ввести имя базы данных сервера, которая будет доступна по умолчанию при использовании создаваемого источника данных (рис. 10.8).
Глава 10. Работа Access с данными на SQL-сервере
397
Create a New Data Source to SQL Server
-
е£ *"ТСйл£ V ,.j,fL Г" ^ 1
АС
~_„
i
Attach database filename:
Use ANSI quoted identifiers. UseANSI nulls, paddings and warnings
< Назад
I
Далее >
Отмена .
Справка
Рис. 10.8. Определение базы данных, к которой по умолчанию открывается доступ при подключении к серверу ODBC Microsoft SQL Server Setup A new ODBC data source will be created with the following configuration: Microsoft SQL Server ODBC Driver Version 03.81.9031 iData Source Name: Поставка Data Source Description: Работа с БД Поставка товаров Server; UBB-2003 Database: Поставка товаров SQL „anguage: Russian Translate Character Data: Yes Log Long Running Queries: No Log Driver Statistics; No Jse Integrated Security: Yes Use Regional Settings: No Prepared Statements Option; Drop temporary procedures on disconnect Jse Failover Server: No Use ANSI Quoted Identifiers: Yes Use ANSI Null, Paddings and Warnings: Yes Data Encryption; No
Test DataSdurce.-.
Рис. 10.9. Информация о конфигурации вновь созданного источника данных
Часть II, Многопользовательские технологии баз данных
398
После установки в следующем окне ряда параметров мастер завершает создание нового источника данных выводом окна ODBC Microsoft-SQL Server Setup (Установка ODBC для SQL-сервера Microsoft) с информацией о его параметрах (рис. 10,9). Нажав кнопку Test Data Source (Проверить источник данных), можно произвести тестирование нового источника данных. Результаты тестирования отобразятся в соответствующем окне (рис. 10.10). SQL Server ODBC Data Source Test Test Results Microsoft SQL Server ODBC Driver Version 03.81.9031 Running connectivity tests... Attempting connection Connection established Verifying option settings Disconnecting from server TESTS COMPLETED SUCCESSFULLY!
Dl
Рис. 10.10. Результат тестирования нового источника данных
Выполнив рассмотренные шаги по созданию источника данных и возвратившись в окно Администратор источников данных ODBC (ODBC Data Source Administrator), на вкладке Пользовательский DSN (User DSN) в списке увидим строку с именем нового источника данных (рис. 10.11). На этом создание источника данных завершается. Теперь, указав лишь имя источника данных, можно подключиться к конкретному SQL-серверу и базе данных. Использование этого имени при работе с данными SQL-сервера из базы данных Access будет рассмотрено далее. Для просмотра или изменения параметров существующего источника данных выберите его имя в списке Источники данных пользователя (User Data Sources) (рис. 10.11) и нажмите кнопку Настройка (Configure). Выполните необходимые действия по изменению параметров источника в диалоговых
Глава 10. Работа Access с данными на SQL-сервере
399
окнах, которые в точности повторяют рассмотренные ранее (см. рис 10610.10). ^'Администратор источников данных ODBC Драйверы 1 Трассировка J Пользовательский DSN
Группировка подключений Системный DSN
|
0 программе
Файловый DSN
И сточники данных пользователя:
_ dBASE Files Excel Files MS Access Database База данных MS Access Поставка Файлы dBASE
Добавить Microsoft dBase Driver [*.dbf] Miciosoft Excel Driver (*.nls| Microsoft Access Driver (".rndbj Microsoft Access Driver (".rndbj SQL Server Microsoft dBase Driver f.dbl) Microsoft Excel Driver (".xls)
Источник данный ODBC пользователя сохраняет сведения об установке связи с источником, Ондоступентолькоэтому пользователю и может применяться лишь на данном компьютере.
Рис. 10.11. Список с новым источником данных "Поставка" для драйвера SQL Server
Для удаления источника данных выберите его имя в списке Источники данных пользователя (User Data Sources) и нажмите кнопку Удалить (Remove). В каждом диалоговом окне Администратора ODBC имеется кнопка Справка, нажав которую, можно получить дополнительные сведения по каждому параметру создаваемого или модифицируемого источника данных.
Запросы на языке SQL к базам данных SQL-сервера Рассмотрим первый способ использования данных из базы Microsoft SQL Server— запросы SQL. Запросы к базе данных SQL-сервера записываются непосредственно на языке SQL и передаются на сервер для выполнения. В этих запросах используются таблицы, сохраняемые в базе данных на сервере. Эти таблицы не представлены в окне базы данных Access, поэтому создание запроса в режиме конструктора невозможно, т. к. нельзя добавить их в схему данных запроса. Запрос должен быть записан на языке SQL-
400
Часть II. Многопользовательские технологии баз данных
сервера (для Microsoft SQL Server-- Transact SQL), которому будет посылаться запрос. Запрос передается на сервер через ODBC, но не обрабатывается им.
Создание запросов SQL к серверу Процесс создания запроса на языке SQL в Access начинается с выбора в окне базы данных вкладки Запросы (Queries), нажатия кнопки Создать (New) и выбора в списке режимов диалогового окна Новый запрос (New Query) строки Конструктор (Design View). В диалоговом окне запроса Добавление таблицы (Show Table) не следует выбирать таблицы, его нужно просто закрыть. Далее в меню Запрос (Query) следует выбрать команду Запрос SQL (SQL Specific) и подкоманду К серверу (Pass Through). В открывшемся окне запроса к серверу вводится инструкция SQL. Синтаксис инструкций запроса должен соответствовать диалекту языка, поддерживаемого сервером SQL, к которому будет посылаться запрос. Для уточнения синтаксиса целесообразно обратиться к справочной информации.
Замечание Инструкции SQL для типичных запросов к базе данных можно просмотреть, открыв созданные средствами QBE запросы в режиме SQL (см. главу 4). Для этого нужно открыть запрос и, нажав кнопку Вид (View), выбрать пункт Режим SQL.
Определение источника данных для запроса SQL Для выполнения запроса SQL нужно на панели конструктора запросов нажать кнопку Запуск (Run). Появится окно Администратора ODBC Выбор источника данных (Select Data Source) (рис. 10.12). В этом окне можно создать новый или выбрать ранее созданный источник данных, содержащий сведения о сервере и базе данных, к которой делается запрос. Используя сведения из выбранного источника данных, Администратор выполняет подключение к базе данных. Если в выбранном источнике данных не указано доверительное соединение, у пользователя будут запрашиваться имя и пароль. Чтобы не выбирать источник данных при каждом выполнении запроса, пользователь может сохранить сведения о нем в свойстве запроса Строка подключения ODBC (ODBCConnectStr). Для этого нужно в режиме конструктора открыть окно свойств запроса, нажав на панели инструментов кнопку Свойства (Properties). В окне свойств запроса в поле Строка подключения ODBC (ODBCConnectStr) ввести имя источника данных; например, для ссылки на пользовательский источник данных "Поставка", созданный ранее, НУЖНО ВВесТИ ОВВС;05Н=Поставка; .
Для ввода данных об источнике может быть использован построитель строк подключения ODBC. Построитель для выбора источника данных выводит
Глава 10. Работа Access с данными на SQL-сервере
401
окно Администратора ODBC Выбор источника данных (Select Data Source) {см. рис. 10.12). Кроме того, построитель предлагает включить в строку подключения пароль пользователя (рис. 10.13). Выбор источника данных Файловый источник данный
Источник данных компьютера
Имя источника данных dBASE Files Еисе! Files MS Access Database Б аза данный MS Access Поставка Файлы dBASE Файлы Excel
Тип 1 Описание i! m ;: m '• mi Поль. Поль. Работа с БД Поставка товаров Honi Поль.
Создать..
:
Источник данным компьютера подходит только для этого компьютера и не '. может использоваться совместно. Источники данный пользователя подходят только для одного определенного пользователя компьютера. : Системные источники - для всех пользователей или системных служб.
Справка
Рис. 10.12. Выбор источника данных для запроса SQL к базе данных сервера Построитель строк подключения Сохранить пароль в строке подключения?
А
Нет
Рис. 10.13. Диалоговое окно построителя строк подключения ODBC
Например, при выборе на вкладке Источник данных компьютера (Machine Data Source) пользовательского источника данных Поставка и утвердительного ответа на вопрос о сохранении пароля построитель введет в строку следующую запись: ODBC;DSN=rioCTaBKa;Description=Pa6oTa с БД Поставка товаров/UID^NVP; DATABASE- Поставка товаров SQL;IJ^GUAGE=pyccKMH;Network=DBMSSOCN; Trusted Connection-Yes
Часть //. Многопользовательские технологии баз данных
402
Если в свойстве Строка подключения ODBC (ODBCConnectStr) не указан пароль пользователя, который известен серверу, то при выполнении запроса отображается диалоговое окно регистрации на SQL-сервере (рис. 10.14). SQL Server Login Server
fllBB-2G03
~Л __^j
Г" Use Trusted Connection Login ID:
JNVP
PasswQid:
OK Cancel Help
|
£^d
Рис. 10.14. Окно регистрации пользователя на сервере
По умолчанию значением свойства Строка подключения ODBC (ODBCConnectStr) является ODBC. Это значение выводится в окне свойств и восстанавливается при удалении текущего значения. Даже если в свойстве не указана строка подключения, Access использует ODBC. В этом случае при каждом запуске запроса на выполнение будет выводиться диалоговое окно Выбор источника данных (Select Data Source) со списком имен всех источников данных ODBC (см. рис. 10.12), в котором надо выбрать необходимый для подключения к базе источник данных. Выбранный таким образом источник данных не сохраняется в строке подключения. Для сохранения строки подключения ее необходимо указать в свойстве запроса Строка подключения ODBC (ODBCConnectStr). При сохранении запроса строка подключения сохраняется вместе с ним. Свойство Строка подключения ODBC (ODBCConnectStr) используется только в запросах к серверу. Построитель устанавливает связь с нужным сервером базы данных SQL и прерывает связь после создания строки подключения ODBC. Источник данных компьютера (Machine Data Source) доступен только пользователям одного компьютера. Однако, если на одном компьютере определено несколько учетных записей пользователя, источник доступен только пользователю, создавшему его. Каждый другой пользователь должен создавать свои источники. При работе нескольких пользователей с базой данных сервера целесообразно создавать Файловый источник данных (File Data Source), доступный с разных компьютеров сети.
Примеры запросов SQL к серверу Рассмотрим примеры создания запросов SQL. О Запрос на выборку данных из таблиц НАКЛАДНАЯ и ОТГРУЗКА, размещенных на SQL-сервере в базе д а н н ы х "Поставка товаров". Запрос возврата-
Глава^Ю. Работа Access^ данными HaSQL -сервере
403
ет таблицу с полями, указанными в первой строке запроса, и строками с данными об отгрузках, которые были выполнены в период, заданный условием отбора. SELECT НАКЛАДНАЯ. *, ОТГРУЗКА. КОД_ТОВ, ОТГРУЗКА. КОЛ__ОТГР FROM НАКЛАДНАЯ INNER JOIN ОТГРУЗКА ON (НАКЛАДНАЯ.КОД_СК=ОТГРУЗКА.КОД_СК) AND (НАКЛАДНАЯ.НОМ_НАКП=ОТГРУЗКА -НОМ_НАКЛ) WHERE ДАТА_ОТГР>='01.06.2004|;
П Запрос на обновление данных в таблице ПОКУПАТЕЛЬ. В записи с полем НАИМ_ПОК*'перспектива 1 наименование покупателя меняется на значение "Компьютерный мир". UPDATE
ПОКУПАТЕЛЬ
SET НАИМ_ПОК='Компьютерный мир' WHERE НАИМ_ПОК='Перспектива';
П Запрос на обновление данных в таблице ОТГРУЗКА. В записи с составным КЛЮЧОМ НОМ__НАК='Н001', КОД_СК='С01' И К О Д _ Т О В = ' Т 0 0 5 ' ПОЛЮ КОЛ__0'.:ТР
присваивается значение 500. UPDATE
ОТГРУЗКА
SET КОЛ_ОТГР =500 WHERE НОМ_НАКП='Н001Т AND КОД_СК='С01' AND КОД_ТОВ='Т005';
О Запрос на добавление записи в таблицу ТОВАР. Добавляется запись со значениями полей, указанными в третьей строке запроса. INSERT INTO ТОВАР
(КОД_Т08,HAMMJTOB,ЦЕНА,ЕЙ,СТАВКА_НДС]
VALUES ('Т017','Микрокомпьютер',200,'штука',0.1);
О Запрос на создание новой таблицы таЫе2 в базе данных сервера, в котором определяются ПОЛЯ Name_Pl И Name_P2. CREATE TABLE ТаЫе2 ( [Name_Pl]
[char]
(3) ,
[Name_?2] [char] (2) ) ;
Если запрос не принадлежит к типу запросов, в которых возвращаются записи, для свойства Возврат записей (Returns Records) нужно выбрать значение Нет. В противном случае после выполнения запроса выводится сообщение (рис. 10.15). Для запуска запроса со значением Нет в свойстве Возврат записей (Returns Records) используется только кнопка Запуск (Run) на панели инструментов. Для запроса, возвращающего записи, можно также нажать на панели инструментов кнопку Вид (View). 14 Зак 835
Часть II. Многопользовательские технологии баз данных
404
Microsoft Office Access •\ I». Л
Запрос к серверу, свойство 'Возврат записей' (ReturnsRecords) которого имеет значение 'Истина', не вернул ни одной записи.
Рис. 10.15. Сообщение при выполнении запроса на добавление записи
Связь с таблицами баз данных SQL-сервера Другим способом использования в приложениях Access данных SQL-сервера является связь с таблицами его баз данных. Связанные таблицы, оставаясь на сервере в формате источника, отображаются в окне базы данных Access. Эти таблицы могут быть использованы наряду с локальными таблицами базы данных Access при создании запросов, форм, отчетов привычными диалоговыми средствами Access. Связанные таблицы можно просмотреть и в режиме конструктора, однако никакие изменения структуры таблицы невозможны.
Создание связи с таблицами сервера Для создания связи с внешними таблицами предназначена команда Файл|Внешние данные|Связь с таблицами (File|Get External DatajLink Tables). При выполнении этой команды открывается окно Связь (Link) (рис. 10.16), в котором для создания связи с таблицами из внешних баз данных нужно выбрать в поле Тип файлов строку База данных ODBC (ODBC Databases). В следующем окне (см. рис. 10.12) выбирается источник данных ODBC, обеспечивающий подключение к нужному серверу и базе данных. В окне регистрации пользователя на серЕзере, если необходимо (см. рис. 10.14), вводится пароль. После получения доступа к базе данных сервера в окне Связь с таблицами (рис. 10.17) выбираются таблицы, которые будут использоваться в работе как связанные. Процесс установления связи с таблицами сервера отображается в окне, представленном на рис. 10.18. Если таблица базы данных сервера не имеет ключа, выводится окно выбора однозначного индекса (рис. 10.19). Выберите поля таблицы для создания ключа связанной таблицы. Этот ключ используется при работе со связанной таблицей на компьютере клиента и не создается в таблице, сохраняемой на сервере.
Внимание Если таблица, с которой устанавливается связь, не имеет ключа и при связывании не выполнен выбор однозначного индекса, то через связанную таблицу
Глава 10. Работа Access сданными на SQL-сервере
405
невозможно осуществить обновление данных в таблице или добавление записей и не обеспечивается проверка целостности данных.
•С)Adobe PDF б.О U-—• |^) Мои рисунки : Мои последние QMoa музыка документы ,y|jdbl.mdb
Рабочий стол
Нои документы
Мой компьютер
L
J
Имя файла; Мое сетевое окружение
Тип файлов:
Отмена
Microsoft Office Access (*,mdb;*.mdaj*.mde) Документы HTML (*.html;*.htm) OuttaokO Paradox (*.db) Текстовые файлы (*.txt;*.csv;*,tab;*.asc) Windows SharePoint Services 0 Базы данных ODBC Q
Рис. 10.16. Окно выбора типа источника данных для связи с его таблицами Связь с таблицами Таблицы чёо. ДОГОВОР dbo, НАКЛАДНАЯ ^dbo.Накладные склада Idbo, ОТГРУЗКА dbo.Отгрузка полная dbo.Отгрузка склада dbo.Покупатели dbo, ПОКУПАТЕЛЬ dbo.nOCTABKAJiriAH' dbo. СКЛАД dbo.Table2 i dbo. ТОВАР
!
f~ Сохранить пароль
Рис. 10.17. Окно выбора связанных таблиц
406
Часть II. Многопользовательские технологии баз данных
Таблицы Установка связи.,.
OK
'с(Ьо_НАКПАДНАЯ
Для отмены нажмите Ctrl-Break.
Г
Сохранить пароль
Рис. 10.18. Окно процесса Установка связи
Выбор однозначного индекса Поля таблицы HGM НАКП KOjfCK
01
Отмена
ДАТА ОТГР НОМ_ДОГ СУММА НАКП
Чтобы обеспечить целостность данных и обновить записи, необходимо выбрать поле или поля, однозначно определяющие каждую запись. Допускается выбор до десяти полей. Рис. 10.19. Выбор ключа для связываемой таблицы
После выбора таблиц и выполнения процедуры связывания выбранные таблицы сервера будут отображены в списке таблиц окна базы данных Access (рис. 10.20). Для обозначения связанных таблиц, хранящихся на сервере, используется значок gJlPi. Если удалить связанную таблицу, удаляется связь с ней, но сама внешняя таблица сохраняется на SQL-сервере. При создании запросов, форм, отчетов связанные таблицы могут использоваться наряду с таблицами локальной базы данных. В окне добавления таблиц в запрос связанные таблицы отображаются наряду с локальными таблицами. Связанные таблицы могут, также как локальные, отображаться в режиме таблицы и в режиме конструктора. Однако структуру связанной таблицы модифицировать нельзя.
Глава 10. Работа Access с данными на SQL-сервере
407
^^^Н |Ьв Поставка товаров : баю данных (формат Access 2002 - 2003) flTjf П ]( X" .^Открыть ^Конструктор ^Создать | X ! ^а IV [рП] !"И! Объекты
i
ЗД Создание таблицы в режиме конструктора j ^у Создание таблицы с помощью мастера
^3
Таблицы
Jip
Запросы
,13]
Формы
Ш
Отчеты
[фф с!Ьо_ОТГРУЗКД
*У
Страницы
+Ф dbo_nOKynATEnb
2
Макросы
t3j Создание таблицы путей ввода данных \*ф dbo_HAK ЛАДНАЯ
*ф с(Ьо_ПОСТАВКА_ПЛАН !*^ с!Ьо_СКЛАД
^ Модули
Ф^ dbo_TOBAP
Группы 1 ~" i jjjjl Избранное
"1
3
ЗАПАС
*t«l Лист! "3 НАКЛАДНАЯ S3 Накладные склада 3
ОТГРУЗКА
31
Отгрузка полная
!3 Отгрузка склада 3
СОТРУДНИК
•<
л;
>
Рис. 10.20. Окно базы данных со списком таблиц, включающим связанные
Включение связанных таблиц в схему БД и установление между ними связи выполняется так же, как для локальных таблиц (рис. 10.21). Изменение связей Связанная таблица/запрос:
НОМ НАКЛ
код_ск
'|НОМ НАКЛ
код_ск
!л
V
Г -Ч;: :-^'., ч«
Г !
Г
XKUhOt ftit
5 Г" sag L -- ••---.'-•'. Тип отношения:
один-ко-многим
Рис. 10.21. Установление связи между связанными таблицами сервера
408
Часть И. Многопользовательские технологии баз данных
Как видно на рисунке, для связанных таблиц не могут быть установлены параметры обеспечения целостности, эти параметры устанавливаются на сервере. Для разрыва связи с таблицей на сервере достаточно удалить ее, как удаляют любую другую таблицу локальной базы данных, воспользовавшись командой Правка|Удалить (EditjDelete) в окне базы данных. При этом таблица на сервере удалена не будет. Сообщение о разрыве связи приведено на рис. 10.22. Microsoft Office Access 1
Подтвердите удаление связи, установленной для таблицы'dbo_ДОГОВОР . При удалении связи удаляются только сведения, используемые приложением 'Microsoft Office Access' для открытия таблицы, но не сама таблица.
Нет
Рис. 10.22. Сообщение о разрыве связи с таблицей сервера
Вся информация о связях с таблицами сервера сохраняется в базе данных и после ее закрытия. При открытии базы данных в следующий раз в ней отображаются связанные таблицы. Повторно проводить процедуру включения связанных таблиц не требуется. Очевидно, что работу со связанными таблицами можно выполнять только в том случае, если сервер доступен. Сведения об источниках данных для связанной таблицы сохраняются в общих свойствах таблицы в строке Описание. Свойства можно просмотреть в режиме конструктора таблицы. Например, свойство связанной таблицы dbo.ПОКУПАТЕЛЬ может иметь следующее значение: ODBC;DSN=nocTaBKa;Description=Pa6oTa с БД Поставка TOBapOB;APP=Microsoft Office 2003;WSID=UBB-2003;DATABASE=nocTaBKa товаров SQL;LANGUAGE= русский;Network=DBMSSOCH;Trusted_Connection=Yes;TABLE=dbo.ПОКУПАТЕЛЬ
Все связанные таблицы и параметры их источников данных можно увидеть в окне Диспетчер связанных таблиц (Linked Tables Manager), которое открывается по одноименной команде, представленной в пункте Служебные программы (Database Utilites) меню Сервис (Tools). В этом окне можно обновить связь, если изменилось местоположение или другие параметры источника данных. На рис. 10.23 представлено окно диспетчера связанных таблиц, в котором отображены связанные таблицы текущей базы данных. В данном примере первые семь являются связанными таблицами SQL-сервера и для каждой из них указаны параметры связи с источником данных через ODBC. Кроме того, на рисунке отображена связанная таблица Лист1, являющаяся документом Excel, и ее местоположение на локальном диске.
Глава 10. Работа Access сданными на SQL-сервере
409
Если изменилось местоположение или другие параметры источника данных, связь можно обновить. Для обновления связи нужно установить флажок в строке таблицы, связь с которой должна быть обновлена. При этом строка выделяется и становится доступной кнопка ОК, по которой инициируется процесс обновления. 1
fit" Диспетчер связанных таблиц Выберите связанные таблицы дпя обновления: (Р5М=Поставка;ОАТАВАЗЕ=Псставкатоваров SQL,) (ОЗМ=Поставка;ОАТАВА5Е=Пост9Вкатоварсв5й1;) (ОЗН=Поставка;ОДТАВА5Е=Поставка товаров SQL;) с1Ьо_ПОКУПАТЕЛЬ (02М=Поставка;ОАТАВА5Е=Поставка товаров SQL;) (№о_ПОСТАВКА_ПЛАН (ОЗМЧ1оставка;ОАГАВА5Е=Поставкзтоваров501-;) сЬэ_СКЛАД (ОЗМ=Поставка;ОАТАВА5Е=ПостаекатоваровЭО|_;) (05М=Поставка; DAT ABASE=Поставка товаров SQL;) Лист1 (E:^ocumentsardS8ttingsWVPVulciMдокументы\Книгз_учета.х1з\Лист11)
Отмена Вы делить в;;е Очистить вне
Г" [Всегда выдавать запрос нового местонахождения
Рис. 10.23. Список связанных таблиц текущей базы данных
Примеры запросов со связанными таблицами Рассмотрим примеры запросов со связанными таблицами. П Запрос на выборку из локальных таблиц и связанных, таблии SQL-сервера. На рис. 10.24, 10.25 показан запрос, использующий данные о покупателях и договорах, которые хранятся в общей базе данных на сервере в таблицах с1Ьо_покупд7ЕЛЬ и с!Ьо_договор, а также данные о накладных, сохраняемых на складе в локальной базе данных Access в таблице Накладные склада,
G Добавление записей из локальной таблицы в связанную таблицу базы данных SQL-сервера. Например, сведения об отгрузке товаров со склада хранятся В ЛОКалЬНОЙ базе ДаННЫХ СКЛада В таблицах Накладные склада И О т г р у з к а
склада. В общей базе данных на SQL-сервере имеются таблицы НАКЛАДНАЯ и ОТГРУЗКА, в которых собираются сведения со всех складов. Для решения этой задачи установим из локальной базы данных связь с таблицами базы данных сервера. В результате установления связи таблицы сервера будут представлены в окне базы данных Access (см. рис. 10.20), например, под именами аъо_нАКЛАДНАЯ и dbo_o
410
Часть II. Многопользовательские технологии баз данных
таблицу базы данных SQL-сервера создадим отдельный запрос на добавление записей. Напомним, что запрос на добавление создается в режиме конструктора как запрос на выборку, который формирует необходимые для добавления записи. Далее запрос на выборку преобразуется в запрос Добавление (Append Query) (рис. 10.26). При этом в диалоговом окне (рис. 10.27) выбирается таблица, в которую нужно добавить записи. В запросе на добавление для создания записей использована локальная таблица накладные склада, а в качестве обновляемой выбрана связанная таблица С!ЬО_НАКЛАДНАЯ. В результате выполнения запроса таблица на сервере будет дополнена записями из локальной таблицы.
И* Запрос со связанными таблицами : запрос на выборку ,. ,
RH^^Bi U'MlMMinMiim
н
—
|,код_пок IHH ЙНАИМ_ПОК |ЛДРЕС_ПОК У'
(V jjujfxj
v
[НОМДОГ V }ДАТД_ДОГ *-* 1код_пок
Ьл
| СУММА _ДОГ
<
•
|НЮН_НАКЛ
|код_ск 1ДАТА ^~ин_дог /ММ А
Поле: НАИМ_ПОК НС И.ДОГ Имя таблицы: dbo_nOKynATEnb db э .ДОГОВОР Сортировка: Вывод на экран: 0 0 Условие отбора: [Наименование покупателя]
ДАТА^ОГ dbo ^.ОГОВОР
СУММА Накладные склада
0
Л
0
или:
У
<; £
X
Рис. 10.24. Запрос с таблицами сервера и локальной таблицей в режиме конструктора
Щ Запрос со связанными таблицами : запрос на выборку НАИМ_ПОК | НОМ J30r Компьютер маркег Д111 Компьютер маркет Д222 Компьютер маркет Д222 J_ Компьютер маркет д777 За 1ись: Н Н И
^Г
Ши
ДАЪа _ДОГ Общая суыма по накладной 01.01.2004 4 6 " 2,00р. 29.12.2004 17 1£ 8,QOp. j 29.12.2004 19 41 о.оор. ; 14. 10.2004
4 г_] Н | ' -| из 4
Рис. 10.25. Результат выполнения запроса для покупателя "Компьютер маркет"
Глава 10. Работа Access с данными на SQL-сервере
411
^связанную таблицу :эап.
НОМ_НАКЛ КОД_ОС ДАТА
н_дог
СУММА
Поле: Накладные склада,* Имя таблицы : Накладные склада Сортировка: Добавление; dbo_HAK ЛАДНАЯ. Условие отбора:
Рис, 10.26. Окно конструктора с запросом на добавление Добавление Добавление записей в таблицу
,,.-
имя таблицы; ^Ьо_НАКЛАДНАЛ "'• Б текущей базе данных
Отмена
?" в другой базе данных:
Рис. 10.27. Окно выбора таблицы, в которую добавляются записи С помощью аналогичного запроса выполняется добавление записей в подчиненную таблицу dbo_OTrPy3KA ИЗ Таблицы Отгрузка склада.
Импорт объектов из базы данных SQL-сервера в Access Запросы на языке SQL к серверу и работа со связанными таблицами сервера возможны только при установленной связи с сервером. При импорте объекты сервера копируются в базу данных Access и сохраняются в ней как собственные. Связь с сервером необходима только на время выполнения опера-
Часть Я. Многопользовательские технологии баз данных
412
ции импорта. При использовании импортированных объектов связь с сервером не нужна. Для импорта данных из базы данных сервера используется команда Файл (Внешние данные|Импорт (File Get External Datajlmpon). В окне Импорт (Import) в поле Тип файлов (Files of type) выбирается значение Базы данных ODBC (ODBC Databases). Далее выбирается источник данных, определяющий сервер и базу данных, из которой должны импортироваться объекты, производится регистрация на сервере и в окне Импорт объектов (Import Objects) выбирается любое количество нужных объектов. После выполнения этих действий полученные объекты отображаются в базе данных Access.
Экспорт объектов Access в базу данных SQL-сервера Одним из способов создания таблиц в базе данных SQL-сервера является экспорт таблиц из локальной базы данных Access. Для экспорта объектов из базы данных Access в базу данных ODBC используется команда Файл|Экспорт (FilejExport). Объект должен быть выбран, иначе команда недоступна. В окне Экспорт (Export) в поле Имя файла (File name) отобразится имя экспортируемого объекта. Для экспорта в базу данных через интерфейс ODBC нужно в поле Тип файла (Save as type) выбрать значение Базы данных ODBC (ODBC Databases). Например, если выбрать эти параметры для экспорта таблицы накладные склада и нажать кнопку Сохранить (Save), отобразится окно, представленное на рис. 10.28. Экспорт Экспорт Накладные склада под именем: | Накладные склада
'!
Отмена
в База данных ODBC
Рис. 10.28. Сообщение об экспорте таблицы ео внешнюю базу данных
Следующим отобразится окно для выбора источника данных ODBC, определяющего местоположение и имя внешней базы данных, в которую необходимо экспортировать объект. После принятия выбранного источника предлагается зарегистрироваться на сервере, проверяется идентификатор, пароль и права пользователя на проведение операции. Если пользователь имеет права на проведение операции, объект записывается в базу данных сервера. Связь с сервером после выполнения операции экспорта прерывается.
Глава 10. Работа Access сданными на SQL-сервере
Замечание
413
)
Следует заметить, что полного соответствия сохраненной на сервере в результате экспорта таблицы и таблицы-источника нет. Так, например экспортированная таблица не сохраняет определение ключа.
Контрольные вопросы 1. Какую архитектуру поддерживает Microsoft SQL Server? 2. Под управлением каких операционных систем выполняется Microsoft SQL Server? 3. Какую роль выполняет Access в архитектуре "клиент-сервер"? 4. Как в архитектуре "клиент-сервер" называется компьютер, на котором выполняется Microsoft SQL Server? 5. На каком компьютере размешается база данных в системе с архитектурой "клиент-сервер"? 6. Являются ли базы данных Microsoft SQL Server реляционными? 7. На каком компьютере выполняются запросы пользователя в системе с архитектурой "клиент-сервер"? 8. Какой язык используется для работы с данными в реляционных СУБД? 9. Как называется язык, используемый Microsoft SQL Server для работы с данными? 10. Какой интерфейс используется при выполнении запросов к серверу из Access? 11. Какой интерфейс используется при работе со связанными таблицами, при импорте и экспорте данных из Access на Microsoft SQL Server? 12. Как называется программа, с помощью которой определяются источники данных ODBC? 13. Где размешается программа создания источников данных ODBC? 14. Как называется драйвер ODBC для связи с Microsoft SQL Server? 15. Какие виды источников данных позволяет создавать интерфейс ODBC? 16. Назовите основные параметры источника данных ODBC. 17. Какие данные должен передать пользователь серверу для регистрации 0 18. Какая команда открывает окно Запрос к серверу? 19. В каком свойстве запроса к серверу записываются сведения об источнике данных? 20. Как запишется ссылка на источник данных с именем Поставка?
414
Часть II. Многопользовательские технологии баз данных
21. Куда надо записать пароль, чтобы при выполнении запроса к серверу не потребовалось его ввода? 22. Синтаксис инструкции запроса к серверу должен отвечать диалекту языка клиента или сервера? 23. С какой команды начинается процесс создания связанных таблиц? 24. Обеспечивается ли локальной системой проверка целостности для связанных таблиц? 25. Где сохраняются сведения об источнике данных связанной таблицы? 26. Какая команда позволяет просмотреть и обновить список связанных таблиц? 27. Остаются ли экспортируемые из локальной базы данных на сервер таблицы в ее составе? Ответы 1. "Клиент-сервер". 2. Windows NT/2000/XP Server, NT Workstation, 2000/XP Professional и Windows 98. 3. Роль клиента. 4. Сервер баз данных. 5. На компьютере сервера.
6. Да. 7. На компьютере сервера. 8.
Язык структурированных запросов — SQL.
9. Transact-SQL. 10. ODBC. П. ODBC. 12. Источники данных ODBC. 13. На панели управления. 14. SQLServer. 15. Пользовательский, системный, файловый. 16. Имя сервера и имя базы данных. 17. Имя пользователя и пароль. 18. Запрос|3апрос SQL|K серверу (QueryjSQL Specific|Pass Through). 19. Строка подключения ODBC (ODBCConnectStr).
Глава 10. Работа Access сданными на^ SQL-сервере
415
20. ОВВС;ОЗЫ=Поставка;
21. В свойство запроса Строка подключения ODBC (ODBCConnectStr). 22. Сервера. 23. Файл|Внешние данные|Связь с таблицами (FiIe|Get External DatajLink Tables).
24. Нет. 25. В общих свойствах таблицы в строке Описание. 26. Сервис)Служебные программы[Диспетчер связанных таблиц (Tools|Database Utilites|Linked Tables Manager).
27. Да.
Глава 11
Разработка проекта Access — приложения Microsoft SQL Server Проект Access 2000 (расширение adp от Access Data Project — проект доступа к данным) является клиентским приложением, которое подключается к Microsoft SQL-серверу, расположенному в сети или на локальном компьютере, не привлекая к этому ядра базы данных Jet. Эффективный доступ к базам данных SQL Server обеспечивается при этом с помощью интерфейсов OLE DB.
Проект Access 2000 В проекте Access можно создавать приложения архитектуры "клиент-сервер", функционирующие в среде Access и работающие только с данными базы на SQL-сервере. Из проекта можно не только получить доступ к базе данных сервера, но и создать новую базу и ее компоненты. Проект Access оснащен мощными графическими средствами, как для разработки клиентского приложения, так и базы данных. Проект Access представляется новым типом файла Access (adp). Он содержит только те объекты, которые составляют приложение: формы, отчеты, HTML-страницы доступа к данным, макросы и модули. В отличие от базы данных, Microsoft Access проект не содержит данных или описаний структур базовых объектов. Таблицы, представления, схемы базы данных, сохраняемые процедуры и определяемые пользователем функции — объекты базы данных SQL-сервера — только отображаются в проекте Access. Объекты базы данных SQL-сервера, отображаемые в окне проекта Access, используются в качестве источников данных в объектах приложения, что позволяет пользователю работать в привычном для Access режиме. В проекте Access объекты приложения создаются так же, как при работе с базой данных Access. В проекте Access содержится много мастеров, аналогичных мастерам базы данных Access, например: мастер форм, мастер отчетов, мастер страниц. Эти мастера упрощают создание приложений.
Глава?J. Разработка проекта Access — приложения Microsoft SQL Server
417
Подключившись к базе данных SQL Server, можно просматривать, создавать, изменять и удалять объекты базы данных SQL-сервера с помощью конструктора баз данных, конструктора таблиц, конструктора запросов, построителя запросов и текстового редактора SQL. Хотя пользовательский интерфейс, предназначенный для работы с этими объектами базы данных, отличается от используемого в базе данных Access, он имеет много общего с ним и также прост в применении.
Интерфейс доступа к данным OLE DB OLE DB — это архитектура компонентов базы данных, реализующая эффективный доступ по локальной сети и через Интернет к источникам данных многих типов, в том числе реляционным источникам данных, почтовым файлам, неформатированным текстовым файлам и электронным таблицам. Набор OLE-интерфейсов, обеспечивает универсальный доступ к данным различного формата. В архитектуре OLE DB приложения, получающие доступ к данным, называют потребителями данных, например: Access, Visual Basic. Программы, обеспечивающие внутренний доступ к данным, называют средствами доступа к базам данных, например: Microsoft OLE DB Provider for Microsoft SQL Server (рис. 11.1) или Microsoft Jet 4.0 OLE DB Provider для доступа к базе данных Microsoft Access внешнего потребителя. Компьютер клиента /
Компьютер клиента
у
/
j Приложение клиента : Пооект Access
.
.1
j ' 'риложение клиента 1 Проект Access | '1
h-r— — у
— fJ
<->Lt ии ^roviaer
OLE DB Provider for SOI Rprver
for SQL Server
SQL-сервер баз данных / rnorr ! SQL-c 1 "НЧ Г~"1
1—1
crt БД
7±>, \ БД j L J
OLE DB Provider for SQL Server Приложение клиента Проект Access
Рис. 11.1. Схема взаимодействия проекта Access и SQL-сервера в сети
418
Часть II. Многопользовательские технологии баз данных
При установке Microsoft Office или Microsoft Access автоматически инсталлируются следующие OLE DB-провайдеры: П OLE DB Provider for SQL Server; П OLE DB Provider for Microsoft Jet 4.0; П OLE DB Provider for Oracle; П OLE DB Provider for ODBC Drivers. В программах Visual Basic for Application доступ к данным через OLE DB реализуется в объектах доступа к данным ActiveX (файлы с расширением ado). Чтобы просмотреть, какие провайдеры OLE DB установлены на компьютере, откройте программу связи с данными (Data Link), выполнив следующие действия: 1. Откройте проводник Windows. 2. В меню Сервис выберите команду Свойства папки. На вкладке Вид снимите флажок Скрывать расширения для зарегистрированных типов файлов и нажмите кнопку ОК. 3. Выберите папку, в которой требуется сохранить файл подключения к источнику данных DDL-файл (Universal Data Link). Щелкните правой кнопкой мыши в правой области проводника, выберите пункт Создать, а затем — Текстовый документ. 4. Введите нужное имя файла и расширение udl, нажмите <Enter>. 5. На экране может появиться предупреждение о том, что после смены расширения файл может оказаться недоступным. Для файлов udl это предупреждение можно не принимать во внимание. Нажмите кнопку Да. 6. Дважды щелкните по UDL-файлу, откроется диалоговое окно Свойства связи с данными. (Data Link Properties)., где на вкладке Поставщик услуг (Provider) будут представлены все установленные в системе провайдеры OLE ОВ-(рис. 11.2). 7. Определите параметры подключения к источнику данных на вкладке Подключение (Connection). Все необходимые для подключения к источнику данных сведения сохранятся в UDL-файле. Каждый провайдер требует определения специфического набора параметров для связи с источником данных. Для того чтобы из проекта Access подключиться к базе данных Microsoft SQL Server, нужно определять имя сервера, имя базы данных, имя пользователя, пароль. Требуемый тип провайдера Microsoft OLE DB Provider для SQL-сервера выбирается проектом по умолч а н и ю . Эти параметры сохраняются как строка связи с базой данных сервера в проекте Access. Кроме того, они могут сохраняться в файле udl. В Access этот файл подключения используется для связи одной или нескольких страниц доступа к данным с источником данных, Файлы подклю-
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
419
чения можно использовать просто для организации и управления сведениями, необходимыми для подключения к источникам данных OLE DB. В проекте Access, ориентированном на работу с SQL-сервером, при установлении связи с ним нет возможности выбрать ранее созданный UDL-файл. Сразу открывается диалоговое окно Свойства связи с данными (Data Link Properties), причем выбор типа провайдера Microsoft OLE DB Provider для SQL-сервера выполняется по умолчанию. Настройка свойств соединения проводится через универсальное диалоговое окно Свойства связи с данными (Data Link Properties). Эти параметры сохраняются как строка связи с базой данных сервера в проекте Access и не могут сохраняться в файле udl. .ноиства связи с данными Поставщикданных j Подключение] Дополнительно: Все Выберите подключаемые данные: Поставщики OLE DB MediaCatalogDB OLE DB Provider MediaCatalogMergedDB OLE DB Providei MediaCatalogWebDB OLE DB Provider Microsoft ISAM 1.1 OLE DB Provider Microsoft Jet 4.0 OLE DB Providei Microsoft OLE DB Provider Foi Data Mining Services Microsoft OLE 08 Rovider for DTS Packages Microsoft OLE DB Provider for Indexing Service Microsoft OLE D Б Pr о vider f or I nternet_Pu blis hin g Microsoft OLE DB Provider for OLAP Services 8.0 Microsoft OLE DB Piovider for Oracle Microsoft OLE De Piovider for SQL Server Microsoft OLE DB Simple Provider MSDataShape SQL Server Replication OLE DB Pfovider foi DTS Поставщик OLE DB для служб каталогов
Цалее »
01
Рис. 11.2. Список OLE DB-провайдеров, доступных на компьютере
Создание проекта Access Для того чтобы на рабочей станции из Access получить доступ к данным существующей на сервере базы, необходимо создать проект Access.
Часть II. Многопользовательские технологии баз данных
420
Прежде чем начать разработку проекта, необходимо убедиться, что SQLсервер запущен, а база данных на нем доступна с компьютера пользователя в соответствии с правами, определенными администратором на сервере.
Замечание Для управления серверами, определения их параметров и объектов предназначена программа Enterprise Manager. В ее окне все объекты представлены в виде дерева. Базы данных сервера, с которыми может работать пользователь, представлены в поддереве объектов консоли SQL Servers в папке Databases. Папка Logins содержит список пользователей, имеющих доступ к серверу. Список может быть дополнен по команде Action|New login. Свойства существующего пользователя могут быть просмотрены по нажатии кнопки Properties.
Если вы используете Microsoft SQL Server 2000 Desktop Engine — MSDE, то при запуске Access он начнет работу автоматически. Запуск сервера выполняется программой Microsoft SQL Server Service Manager. Для того чтобы сервер начал свою работу, нужно в окне этой программы нажать кнопку Start/Continue (рис. 11.3).
SQL Server Service Manager Server: Services:
II I
Л* J
Pause stsp
Auio-stail service when 05 starts Running-\VUBB-2003-MSSQLServer
Рис. 11.3. Окно программы Microsoft SQL Server Service Manager
Для создания проекта Access, работающего с базой данных, размешенной на Microsoft SQL Server, на панели Область задач в разделе Создание (New) выберите один из двух вариантов: П Проект с имеющимися данными (Project Existing Data), если база данных уже существует на сервере; П Проект с новыми данными (Project New Data), если одновременно с проектом нужно создать новую базу данных на сервере.
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
421
Для открытия раздела Создание (New) может быть выполнена команда Файл|Создать (File(New). При создании проекта открывается окно Файл новой базы данных (File New Database) (рис. 11.4), в котором нужно выбрать местоположение для сохранения файла создаваемого проекта и определить его имя. Проект сохраняется в файле типа Проект Microsoft Access (Microsoft Access Project) (с расширением adp).
Файл новой базы данных Лапка:
"3 Актуальные БД
',
Серейс
Мои последние документы
Рабочий стол
i
Мои документы
Мой компьютер
Мое сетевое окружение
Имя файла;
jadpl.edp
Создать
Тип файла:
[проект Microsoft Office Access (*.adp)
Отмена
i
Рис. 11.4. Окно для выбора местоположения файла проекта Access
Для завершения работы в этом окне нужно нажать кнопку Создать (New),
Создание проекта для существующей на сервере базы данных При создании проекта для существующей на сервере базы данных после выбора местоположения файла проекта Access открывается окно подключения к серверу Свойства связи с данными (Data Link Properties) (рис. 11.5), в котором, прежде всего, указываются имя сервера и способ регистрации пользователя на нем.
Часть II. Многопользовательские технологии баз данных
422
Замечание Вместо имени сервера может быть использован уникальный сетевой 32разрядный IP-адрес компьютера, на котором установлен SQL Server. Например: 10.135.200.15.
Если пользователь определен на SQL-сервере, для регистрации можно воспользоваться соответствующим именем и паролем (см. рис. 11.5). Сервер проверит права пользователя. При успешной регистрации становится доступным список баз данных в поле Выберите базу данных на сервере (Select the database on the server), с которыми может работать проект. .войства связи с данными Поаключение j Дополнительно | Все
j
Для подключения к данным SQL Seiver укажите следующее: 1. Выберите или введите имя сервера: [Ш^ЗООТ
'""Vj
Обновить
2. Для входа в сервер использовать: *~~ учетные сведения Windows NT ** следующие имя и пароль пользователя: Пользователь: IN V Р Пароль: Г" Пустой пароль Г* Разрешить сохранение пароля В ыберите базу данных на сервере: [Поставки
jr]
Подсоединить Файл с базой данных под именем:
. 1
Справка
Рис. 11.5. Окно выбора параметров подключения к базе данных сервера
Выбранные параметры соединения можно протестировать, нажав кнопку Проверить подключение (Test Connection). Если тестирование прошло успешно, нужно нажать кнопку ОК, откроется окно вновь созданного проекта Access (рис. 11.6). В заголовке окна указываются имя файла проекта и имя базы данных сервера, которая доступна из проекта, вместе с форматом фай-
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
423
ла (Microsoft Access 2002 — 2003). В окне проекта Access отображаются объекты этой базы данных сервера: таблицы, запросы, схемы баз данных. Теперь пользователь может приступить к созданию объектов приложения. H adpl ; проект - Поставим (формат Access 2002 - 2003)
(5~HS
l.jjOTjcpbiTb *^ Конструктор _]Создать | >• г -* °"г|| l-^' •Создание таблицы в режиме конструктора • J ^у J'j
: "J ДОГОВОР
Таблицы Запросы Схемы баз данных
J
НАКЛАДНАЯ
J3
ОТГРУЗКА
J
ПОКУПАТЕЛЬ
^Л Формы
3
ПОСТАЕКА_ПЛАН
i$
J
СКЛАД
СЗ
ТОВАР
Отчеты
**j| Страницы J:'
Макросы
!
. ^ Модули Группы L^J Избранное
i
1
Рис. 11.6. Окно проекта Access с отображением таблиц базы данных сервера
После создания проекта в меню Файл (File) становится доступной команда Подключение (Connection), которая открывает окно Свойства связи с данными (Data Link Properties) (см. рис. П.2). Эта команда позволяет проверить или переопределить параметры подключения к серверу: выбрать другую базу данных сервера, объекты которой будут доступны в окне проекта Access или лаже установить связь с другим сервером. При повторных открытиях проекта не требуется задавать параметры подключения, т. к. они сохраняются в проекте.
Создание проекта и новой базы данных на сервере Проект Access позволяет не только использовать существующую на сервере базу данных, но и создать на сервере новую. Создание новой базы данных на сервере осуществляется во время создания проекта Access на локальной
424
Часть II. Многопользовательские технологии баз данных
рабочей станции. При этом создается файл проекта с расширением adp, а на сервере — файлы базы данных с расширениями mdf и Idf. При создании проекта с новой базой данных на сервере после выбора местоположения нового проекта и его имени (см. рис. 11.5) появляется окно базы данных и запускается Мастер баз данных SQL-сервера (Microsoft SQL Server Database Wizard). В окне мастера (рис. 11.7) указываются сервер, с которым надо установить связь, имя и пароль учетной записи для регистрации на сервере. Имя и пароль пользователя, а также его права, достаточные для создания базы данных на сервере, должны быть определены администратором сервера. Часто сервер настраивается на аутентификацию Windows. При этом возможен вход с использованием доверительного соединения. В этом же окне задается имя базы данных, создаваемой на сервере.
Мастер баз данных Microsoft SQL Server Укажите сервер 5QL Server для базы данных. [UBB-Z003 Задайте код входа и пароль для учетной записи, обладающей правами CREATE DATABASE на сервере. [7 Доверительное соединение
Задайте имя новой базы данных SQL Server. [Поставки
Отмена
Далее >
Рис. 11.7. Окно мастера создания базы данных на SQL-сервере при создании проекта Access
Далее мастер сообщает о получении сервером всей необходимой информации и приступает к созданию базы данных. При этом выдается сообщение, представленное на рис. 11.8. Мастер создает на сервере пустую базу данных и добавляет новый объект в папку Database иерархического дерева объектов сервера. По умолчанию но-
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
425
вая база данных, создаваемая на сервере, имеет имя проекта Access, дополненное символами SQL. Мастер без данных Microsoft SQL Server Создание базы данным 'Поставки'... Выполнение может занять некоторое еремял определяемое размером устройства или базы данных и загрузкой сервера.
Рис. 11.8. Сообщение сервера о выполнении процедуры создания базы данных
После завершения мастером процесса создания базы данных открывается окно нового проекта, в котором можно приступить к созданию отдельных объектов базы данных и приложения.
Подключение проекта Access к Microsoft SQL Server 2000 Desktop Engine Microsoft SQL Server 2000 Desktop Engine, предлагая основные средства ядра базы данных Microsoft SQL Server 2000, ограничивает размер базы данных и число одновременно работающих пользователей, исключает лицензии на доступ для клиента и ряд других средств. Исключение интерфейса пользователя и инструментов управления сервером приводит к значительным ограничениям при создании системы безопасности. В настоящее время у системного администратора нет простых способов создания учетных записей для входа в локально установленную базу данных SQL Server, за исключением средств SQL или команд Transact-SQL. Рассмотрим, как осуществляется проверка подлинности пользователя при подключении к серверу. MSDE так же, как другие варианты SQL-сервера, поддерживает два способа проверки прав пользователя при регистрации в базе данных SQL-сервера: П проверка имени и пароля пользователя SQL-сервера; П использование имени учетной записи пользователя Windows. В этом случае Windows выполняет проверку пользователя при входе в систему, а SQL Server обнаруживает, что имя и пароль пользователя проверялись при входе в систему, и предоставляет доступ к базе данных, не требуя отдельного ввода имени и пароля.
Часть II. Многопользовательские технологии баз данных
426
При первом подключении проекта Access к Microsoft SQL Server 2000 Desktop Engine пользователь с правами администратора компьютера может получить доступ к базам данных сервера, использовав учетные сведения Windows. После подключения проекта Access к Microsoft SQL Server 2000 Desktop Engine можно включить учетную запись системного администратора сервера (SA) с пустым паролем, чтобы другие пользователи смогли получить доступ к приложению. Включение учетной записи SA также позволит администратору изменить пароль SA для дополнительной защиты.
Замечание По умолчанию проект регистрируется в MSDE с помощью только одного имени пользователя без введения пароля.
При включенной учетной записи SQL Server (SA) пользователи имеют возможность подключать проекты к базе данных сервера, указывая в имени пользователя имя стандартной учетной записи системного администратора сервера — SA и его пароль. Включение учетной записи SQL Server (SA) в проекте Access выполняется с помощью команды Вид|Свойства сервера. В открывающемся окне Свойства сервера устанавливается флажок Учетная запись системного администратора (SA) (рис. 11.9). Для установки флажка Microsoft SQL Server 2000 Desktop Engine должен выполняться на одном компьютере с проектом Access под управлением операционной системой Windows NT/2000/XP, а пользователь должен обладать правами администратора компьютера. Установка флажка Учетная запись системного администратора (SA) приводит к переподключению проекта Access к базе данных сервера. Подключение проекта изменяется для использования учетной записи SA без пароля. Свойства сервера .adpl Продукт:
Microsoft SQL Server
Версия;
OS. 00.0194
Имя сервера:
UBB-2003
Текущая база данных: :Поставки '^?1™?. ?.?!?и!£ системного администратора (SAJj
•;
Рис. 11.9. Активизаций имени системного администратора сервера
Глава 1 ^.Разработка проекта Access —• приложения Microsoft SQL Server
427
Окно Свойства сервера позволяет, находясь в проекте Access, просмотреть версию сервера (версия 08 соответствует Microsoft SQL Server 2000), имя сервера и базу данных, к которой подключен проект. После активизации учетной записи системного администратора сервера можно изменить ее пароль с помощью команды Сервис|3ащита]Задать пароль для входа. При изменении пароля устанавливается подключение проекта с новым паролем. При следующем открытии проекта открывается диалоговое окно, в которое необходимо ввести пароль (рис. 11.10). При вводе пароля учитывается регистр символов.
Рис. 11.10. Окно ввода пароля при подключении проекта
Следует иметь в виду, что если вы забудете пароль, восстановить его будет невозможно, и вы не сможете открыть проект. Из проекта Access можно также выполнять некоторые обычные административные задачи в базе данных Microsoft SQL Server. Для этого предназначены команды меню Сервис]Служебные программы (табл. 11.1), доступные только при установке Microsoft SQL Server 2000 Desktop Engine на локальном компьютере. Таблица 11.1. Команды меню Сервис! Служебные программы Команда
Описание
Создать резервную копию SQL-базы данных
Создает резервный файл (dat) текущей базы данных SQL Server
Восстановить SQL-базу данных
Восстанавливает базу данных SQL Server из резервного файла базы данных (dat)
Удалить базу данных SQL
Удаляет базу данных SQL Sewer
Копировать файл базы данных
Копирует базу данных SQL Server в другую базу данных SQL Server
Перенести базу данных
Переносит файл базы данных SQL Server (mdf I
428
Часть II. Многопользовательские технологии баз данных
Создание проекта с помощью мастера преобразования Если в Access уже создана база данных и настало время перехода к использованию базы в многопользовательском режиме по технологии "клиентсервер", нет необходимости создавать базу данных на сервере и объекты приложения в проекте заново. С помощью мастера можно преобразовать базу данных Access (файл с расширением mdb) в приложение типа "клиентсервер". При этом мастер переносит данные и определения данных в новую или существующую базу данных, преобразуя их в формат Microsoft SQL Server, а объекты приложения — в новый проект Access (файл с расширением adp). Кроме того, мастер позволяет перенести данные из существующей базы данных Access в базу на сервере, а в существующем приложении создать связанные таблицы, организовав таким образом работу приложения с базой данных на сервере. Возможен только перенос на сервер объектов базы данных Access, без изменения существующего приложения или создания нового проекта. Для выполнения преобразования откройте базу данных Access (файл mdb) и запустите мастер командой Сервис)Служебные программы|Мастер преобразования в формат SQL Server (Tools|Database Utilities|Uprising Wizard). Откроется окно (рис. 11.11), в котором нужно выбрать режим создания новой базы данных на SQL-сервере или использования существующей. При выборе пункта создать базу данных запускается Мастер баз данных SQL Server. В следующем окне мастера (рис. 11.12) введите имя нужного SQL-сервера для создания базы данных. Выберите способ проверки подлинности пользователя: Доверительное соединение, если хотите использовать средства защиты, интегрированные со средствами операционной системы Windows NT/ 2000/ХР, или Код входа и Пароль, если хотите использовать средства защиты SQL Server. Задайте имя новой базы данных SQL Server. Далее мастер предоставляет возможность выбрать таблицы базы данных Access для преобразования в формат базы данных SQL Server (рис. 11.13). В следующем окне (рис. 11.14) выберите атрибуты базы данных Jet, эмулируемые в новой базе SQL Server. Установив режим триггеры (Use triggers), вы сможете воспользоваться всеми возможностями обеспечения целостности данных, определенными в Access, включая каскадное обновление и удаление записей. Далее, чтобы создать новый проект из файла базы данных Access (файл mdb), установите флажок создать новое приложение Access "клиент-сервер" (Create a new Access client/server application) (рис. 11.15). По умолчанию новый файл проекта (файл adp) сохраняется в той же папке, что и база данных Access, а имя нового файла проекта записывается как ИмяТекущейБазыДанныхС5^р. Мастер создает новый файл проекта Access и преобразует все объекты базы данных Access в объекты проекта Access.
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server Мастер преобразования в формат SQL Server С помощью данного мастера нетрудно преобразовать базу данных Microsoft Access в формат Microsoft SQL Server. Мастер может создать базу данных SQL Server пли воспользоваться существующей базой данных. Выберите нужный режим работы. '
цспользоеать существующую базу данных
(* |создать базу данных После нажатия кнопки "Далее" необходимо указать сведения о новой базе данных.
Отмена
Справка
Далее >
Рис. 11.11. Первое окно мастера — выбор режима создания новой базы данных или использования существующей
Мастер преобразования в формат SQL Server Укажите сервер SQL Server для базы данных, iu88-2003 Задайте код входа и пароль для учетной записи, обладающей правами CREATE DATABASE на сервере. Г? Доверительное соединение
Задайте имя новой базы данных SQL Server, [Поставка TosapoBSQL
Справка
Отмена
4. Назад
Далее >
\
Рис. 11.12. Определение названия сервера, параметров регистрации и имени создаваемой базы данных
429
430
Часть II. Многопользовательские технологии баз данных Мастер преобразования в формат SQL Server Укажите таблицы для экспорта в баз/ данных SQL Server.
Доступные таблицы:
Экспорт в базу данных SQL Server:
дог j: правильными датами Отгрузка полная Покупатели hf Покупатели " ялри-д
> ^^~
^_ <
~!
Выбранная таблица:
Справка
1
ДОГОВОР НАКЛАДНАЯ Накладные склада ОТГРУЗКА Отгрузка склада ПОКУПАТЕЛЬ ПОСТДВКА_ПЛДН СКЛАД
[Покупатели без адреса
Отмена
< Назад
|
Далее >
. .
•.
|
Рис. 11.13. Выбор таблиц базы данных Access для преобразования в формат SQL Server
Мастер преобразования в формат SQL Server Допускается преобразование в формат 5QL Server не только даннь^ но и атрибутов таблиц,
Какие атрибуты таблиц следует преобразовать? _ _. У индексы I? значения по умолчанию F/ правила проверки на значения
F/ связи таблиц Г DRI
(? [триггеры
Какие дополнительные данные нужно включить? Добавлять поля щтампа времени в таблицы?
[Да, определяется иастером
| Г* создать только структуру таблицы и не преобразовывать данные
Справка
Отмена
< Назад
Далее >
Рис. 11.14. Атрибуты, экспортируемые по умолчанию в базу данных SQL Server
-J
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
431
При выборе параметра Сохранить пароль и код пользователя они сохраняются в проекте Access в строке подключения. В результате пользователи проекта будут получать доступ к базе данных SQL Server, не указывая имя пользователя и пароль каждый раз при входе в базу данных SQL Server. Если пароль и код пользователя не были сохранены, то при первом открытии проекта Access отображается диалоговое окно Свойства связи с данными, позволяющее подключиться к базе данных SQL-сервера. Мастер преобразования а формат SQL Server С помощью мастера нетрудно изменить существующее или создать новое приложение для работы с базой данных SQL Server,
Какие изменения следует внести е приложение? **
создать новое приложение Access "клиент-сервер" 1
имя файла ADP: р;\Поставк;а_товаровС5.ае1р
' :1 •
I ™ связать таблицы SQL Server с существующим приложением не изменять приложение " |Сохранить пароль и код пользователя
Справка
Отмена
< Назад
] Далее >
Готово
Рис. 11.15. Определение параметров проекта, создаваемого из базы данных Access
Если требуется только преобразовать данные, выберите параметр не изменять приложение (No 'application changes). При выборе параметра связать таблицы SQL Server с существующим приложением (Link SQL Server tables со existing application) мастер преобразования создаст в существующем приложении связанные таблицы, а имена старых таблиц дополнит суффиксом "локальная". Таким образом, приложение базы данных Access будет переориентировано на работу с базой данных сервера, а локальные таблицы могут быть удалены из него. В последнем диалоговом окне мастера (рис. П.16) щелкните на кнопке Готово (Finish). Сначала мастер создает базу данных на сервере, затем выполняет преобразование таблиц, запросов в объекты базы данных SQL Server, копирование
Часть II. Многопользовательские технологии баз данных
432
форм, отчетов, страниц доступа к данным в проект Access. Этот процесс отображается в окне мастера преобразования (рис. 11.17). Мастер преобразования в формат SQL Server Мастер преобразования в формат 5QL Server получил всю необходимую информацию для преобразования базы данных.
Открыть файл ADP после окончания преобразования? (*
[Открыть файл ADP
С
Оставить открытым файл MD6
Справка
Отмена
< Назад
Готово
Рис. 11.16. Завершение работы мастера преобразования в формат SQL Server
Таблица 'НАКЛАДНАЯ1,.. Создание таблицы и отправка данных.
Таблицы: 4/5
Отмена
Рис. 11.17. Отображение процесса создания объектов в базе данных сервера
При переносе таблиц все типы данных Access преобразуются в эквивалентные типы Microsoft SQL Server. Поскольку проект не поддерживает запросы Access, при переносе запросов из базы данных Access в базы данных SQL Server 2000 они конвертируются: П запросы на выборку, которые не содержат предложения ORDER BY или параметров, преобразуются в представления;
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
433
П запросы на изменение преобразуются в сохраненные процедуры. В программу после объявления параметра добавляется конструкция з^т NOCOUN? он, чтобы сохраненная процедура была запущена; П запросы на выборку, которые ссылаются только на таблицы и используют параметры или предложение ORDER BY, преобразуются в определяемые пользователем функции. При необходимости в запрос, содержащий предложение ORDER BY, добавляется предложение ТОР юо PERCENT; О запросы с параметрами, которые содержат именованные параметры, сохраняют исходное имя, использованное в базе данных Access, и преобразуются в сохраненные процедуры или определяемые пользователем функции. После работы мастера преобразования на экран в режиме предварительного просмотра выводится отчет, содержащий подробное описание всех созданных объектов и перечень всех ошибок, возникших в ходе процесса. Отчет сохраняется в стандартной папке базы данных.
Импорт базы данных Access на SQL-сервер Для переноса объектов из базы данных Access в базу данных сервера и проект Access может быть использована процедура импортирования. Создайте проект с новой базой данных. Выполните в проекте команду Файл|Внешние данные] Импорт (File|Get External Data|Import). В окне Импорт выберите ранее созданную базу данных Access. В окне Импорт объектов выделите таблицы и другие необходимые объекты. В результате таблицы будут импортированы в базу данных на сервере, а формы, отчеты, страницы доступа к данным, макросы и модули — в ваш проект Access. При импорте выполняется некоторое преобразование объектов базы данных, однако мастер располагает более мощными средствами преобразования. Например, при импорте таблицы теряют определение ключей. Запросы, созданные в базе данных Access, не подлежат импортированию. Они даже не представлены в списке объектов, доступных для импорта. В проекте, помимо объектов подключенной базы данных SQL Server, могут использоваться таблицы из другой базы данных SQL, базы данных Access и другие источники данных OLE DB или источники данных ODBC. Связь с таблицами из указанных источников позволяет организовать мастер связывания таблиц, вызываемый командой Файл [Внешние данные!Связь с таблицами (File|Get External Data| Link Tables). Открывается окно Мастер связанных таблиц, где нужно выбрать тип создаваемой связи. Если выбирается пункт связанный сервер, Access создает связанный сервер, который предоставляет наибольшие функциональные возможности, включая возможность обновления данных, если это позволяется источником данных OLE DB, и постоянное сохранение сведений о подключении к данным в базе данных
434
Часть II. Многопользовательские технологииг баз данных
Microsoft SQL Server. База данных SQL Server, с которой выполняется связывание, может находиться на другом SQL-сервере. В процессе работы мастера связывания может быть выбран существующий файл подключения данных (файл ode) или, с помощью мастера подключения данных, создан новый. После подключения к источнику данных отображается список его таблиц. Выделите таблицы, которые требуется связать. Для каждой связанной таблицы мастер создает представление, которое в проекте отображается на вкладке Запросы.
Объекты базы данных SQL-сервера В список объектов окна базы данных проекта Access (adp), в отличие от окна базы данных Access (mdb), включены схемы баз данных (Database Diagrams). Объекты базы данных сервера: таблицы, запросы, схемы баз данных — отображаются в проекте как локальные. Для работы с этими объектами предназначен набор графических средств — конструкторов. Пользовательский интерфейс конструкторов проекта отличается от аналогичных интерфейсов в базе данных Access, но так же прост и понятен в использовании. Объекты приложения: формы, отчеты, страницы, макросы, модули -- создаются и используются в проекте Access аналогично базе данных Access. Рассмотрим некоторые особенности работы с объектами базы данных сервера в проекте Access.
Таблицы Таблицы базы данных сервера создаются в .единственно доступном режиме — режиме конструктора. Начинается процесс создания таблиц в окне проекта (см. рис. 11.6) щелчком на соответствующей кнопке. Интерфейс создания структуры таблиц сервера, предоставляемый пользователю в проекте, отличается от интерфейса, предоставляемого конструктором Access при создании таблиц локальной базы данных Access. В частности, различны свойства, определяемые для полей таблиц сервера, шире перечень используемых типов данных. Основные типы данных полей, хотя и отличаются от принятых в базах данных Access, совместимы с ними. Для полного представления об особенностях конструирования таблиц баз данных сервера и их свойствах можно обратиться к источникам информации о SQL Server. При некотором опыте создания таблиц в Access будет не сложно освоить этот процесс. При выполнении команды создания таблицы сразу появляется окно конструктора таблиц SQL-сервера. На рис. 11.18 приведен пример определения структуры таблицы ТОВАР в окне конструктора SQL-сервера. Вкладки свойств полей таблицы в проекте, Б целом сохранив свое назначение, сме-
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
435
нили имена Общие (General) и Подстановка (Lookup) на Столбцы (Columns) и Поиск (Lookup).
В ТОВАР : таблица Имя столбца
[ ^ код_гов
1
]
(Г
Тип данных char
Длима ] Разрешить Null | 5
nvarchar
25
НАИМ ТОБ ЦЕНА
money
ЕЙ
nvarchar image
ПОМЕТКА
bit
Столбцы
л
у'
V
f СТА8КА_НДС ФОТО
Описание
8
V
4
V-
16 1
^ V
v
Поиск.
L Y ; - . - - • >, »: -
А'
Формула Формат Процентный Число десятичных знако) 2
i Подпись Индексация
Ставка НДС
Нет
>
Рис. 11.18. Окно конструктора таблиц базы данных SQL-сервера
В проекте так же, как в базе данных Access, открыв таблицу в режиме конструктора, можно просмотреть ее свойства. Диалоговое окно свойств таблицы сильно отличается от окна, используемого в базе данных Access, которое представляет только ряд общих свойств таблицы. Чтобы открыть окно свойств таблицы, в режиме конструктора щелкните на кнопке Свойства (Properties). Окно содержит несколько вкладок. На рис. 11.19 показана вкладка Связи (Relationships). На этой вкладке предоставляется возможность посмотреть все связи таблицы с другими таблицами и, при необходимости, создавать новые связи или удалять существующие, изменять эти связи, не открывая специально схему данных. Список всех связей таблицы открывается в поле Выделенная связь (Selected relationships). В окне Свойства (Properties) на вкладке Проверить ограничения (рис. 11,20) могут быть заданы ограничения на значение полей таблицы. Для ввода ограничения нажмите кнопку Создать (New). Сначала введите в поле Выражение 15
Зак 835
Часть II. Многопользовательские технологии баз данных
436
для ограничения (Constraint expression) логическое выражение, определяющее нужное ограничение, например, для таблицы ТОВАР: [стАвкА_ндс]<40. Теперь в поле Имя ограничения (Constraint name) можно изменить установленное по умолчанию имя СК_ТОВАР, например, дополнив его именем поля СТАВКА_НДС, для которого вводится ограничение. Аналогично может быть сформировано ограничение на значения других полей таблицы: [ЦЕНА]>Ю с именем СК ТОВАР ЦЕНА1 И [ЦЕНА]<=2000 С ИМСНСМ СК ТОВАР ЦЕНА2.
Свойства Таблицы Связи | Индексы и ключи | Проверить ограничения Имя таблицы; Выделенная связь:
; ТОВАР [J? РК_ПОСТАВКА_ПЛАН_ТОВАР Создать
Имя связи:
КОД_ТОВ
V
Удалить
. JFK ПОСТАВКА ПЛАН ТОВАР
Таблица первичного ключа • ТОВАР
;
Таблица внешнего ключа ПОСТАВКА ПЛАН
_£]код_тов
[проверять имеющиеся данные при создании! Применить связь при репликации Применить связь для INSERT и UPDATE р1 каскадное обновление связанных полей Р каскадное удаление связанных полей
Справка
Рис. 11.19. Окно определения связей таблицы ТОВАР Просмотреть сформированные ограничения и, если необходимо, исправить их, можно, воспользовавшись списком Выделенное ограничение (Selected constraint). В окне конструктора таблиц поля первичного ключа, как и в базе данных Access, отмечаются соответствующим значком. Используя кнопку панели инструментов Ключевое поле (Primary Key), можно создать или удалить
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
437
ключ. Для определения индексов используется вкладка Индексы и ключи (Indexes/Keys) окна свойств таблицы. В этом окне возможны как просмотр и изменение уже созданного первичного ключа, так и создание нового. Индексы создаются и изменяются только в этом окне. На рис. 11.21 представлено окно свойств таблицы ТОВАР с открытой вкладкой Индексы и ключи (Indexes/Keys). На ней отображается вторичный индекс, созданный по полю НАИМ_ТОВ - наименование товара. Открыв список Выделенный индекс (Selected index), можно выбрать и, при необходимости, модифицировать первичный ключ или любой другой индекс. Свойства Таблицы
[Х] Связи j Индексы и ключи
Имя таблицы: Выделен ограничЕ i '| 1.-. • ное
Проверить ограничения ] 1,Д 1лЗ
ТОВАР ICK i ~"ТОВАР СТАВКА— Ни •• Создать
• - v• j1
Удалить
Имя огра ничения: [сК_ТОВАР_СТАВКА_НД Выражен ие для ограничения: [СТАВКА _НДС<40
1 1? Проверять имеющиеся данные при создании р1 Применить ограничение при репликации Р Применить ограничение для INSERT и UPDATE
Справка
Рис. 11.20. Окно определения ограничений на значения полей таблицы ТОВАР
Прямой выход на вкладки определения индексов/ключей, отношений, ограничений в окне свойств таблицы осуществляется по соответствующим командам меню Вид (View).
Часть II. Многопользовательские технологии баз данных
438
Свойства Таблицы | Связи Индексы и ключи j Проверить ограничения ] IJJJ. Имя таблицы:
ТОВАР
Выделенный индекс:
1Х_ТОВАР_НАИМ
Тип:
Индекс
Имя индекса;
IX ТОВАР НАИМ (порядок ' j По возрастам!
Имя столбца НАЙМИТОВ
/V
V.
Группа файлов индекса:
lpR1HARY
.
__.
;.:
•. Степень заполнения;
•Р" UNIQUE • |f" Ограничение
;
о
] %
! (* Индекс Г" Пропускать повторения ; Г CLUSTERED Г~ Не пересчитывать статистику автоматически Текст для проверки;
Рис. 11.21. Окно определения первичного ключа и индексов таблицы ТОВАР
Перейдите в режим таблицы (рис. П.22).
+ ТО01
* TQ02 * ТООЗ
* ТОШ * Т005 Запись; И
Ч
Монитор 17LG 587,00р FDD 3,5 363,00р. .HDD Maxtor 20 1 280,00р. Корпус MiniTov Э16,00р CD-ROM Panat 1 153,00р И |_ИЕ]
0
штука коробка штука штукз штука
EJE
li
5,00% рисунок 6.00% рисунок 16,00% рисунок 6,00%' 30,00%
Ложь Истина Истина Ложь
Рис. 1 1 .22. Таблица сервера в режиме таблицы в проекте Access
В строке кнопок перехода по записям появились две дополнительные кноп ки. При нажатии крайней правой кнопки отобразится окно для выбора мак
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
439
симального числа записей, передаваемых с сервера (рис. 11.23). Вторая справа кнопка подсвечивается красным цветом в процессе передачи записей с сервера и позволяет остановить этот процесс. В проекте для таблицы, в которой не определен ключ, нельзя изменять данные. При попытке изменения в строке состояния выводится сообщение: Данный набор записей не допускает обновление. В строке кнопок перехода по записям такой таблицы кнопка добавления записей отключена. Максимальное число записей Введите максимальное число отображаемых записей. Чтобы вывести все записи, введите 0. Максимальное число записей: ОК
10000 Отмена
Рис. 11.23. Окно изменения максимального числа записей передаваемых с сервера
Схемы баз данных Схемы баз данных являются графическим средством представления и изменения структуры базы данных, к которой выполнено подключение. Их можно использовать при разработке базы данных для создания, изменения и удаления таблиц, столбцов, ключей, индексов, отношений и отграничений. Для более удобного визуального представления структуры базы данных пользователь может создать одну или несколько схем, отображающих различные части базы данных или предстаатения различных элементов ее структуры. Схема может включать некоторые или все таблицы, столбцы, ключи и отношения. В любой базе данных допускается создание произвольного числа схем базы данных. Каждая таблица базы данных может входить в любое число схем. Для создания схемы из проекта Access выполните команду Создать (New), находясь на вкладке Схемы баз данных (Database Diagrams). Далее, практически так же как в Access, в схему с помощью окна Добавление таблицы (Add Table) включаются таблицы, например, ДОГОВОР и НАКЛАДНАЯ. Для установления связи между таблицами выделите и перетащите ключевое поле ном дог из главной таблицы ДОГОВОР в подчиненную таблицу НАКЛАДНАЯ. В появившемся окне Установить связь (Create Relationship) (рис. 11.24) будет указан ключ связи. Установите в нижней части окна
440
Часть It. Многопользовательские технологии баз данных
флажки, которые позволяют включить механизм проверки целостности данных в связываемых таблицах.
Установить связь
!X '
Имя связи: РК_НАКЛАДНЙЯ_Д ОГОВОР Таблица первичного ключа
Таблица внешнего ключа
ДОГОВОР НОМ_ДОГ
НАКЛАДНАЯ _!JHOMJCr
А.
v 15* Проверять имеющиеся данные при создании Р Применить связь при репликации Р Применить связь для INSERT и UPDATE Р" каскадное становление связанных полей Р каскаднр^ удаление связанных полей!
ОК
Отмена
Справка
|
Рис. 11.24. Окно создания связи таблиц ДОГОВОР и НАКЛАДНАЯ
Окно схемы базы данных сервера, в которую включены две таблицы с установленной связью, представлено на рис. 11.25. Конструктор схем имеет разнообразные возможности по изменению ее вида. Работая со схемой, можно изменить вид отображаемой таблицы, остаатяя только ее заголовок или представляя полную ее структуру. При этом открывается возможность изменять структуру таблицы. В приведенной схеме данных таблица НАКЛАДНАЯ отображена в уменьшенном варианте конструктора таблиц. Такое отображение позволяет изменять атрибуты полей таблицы. Для получения такого отображения в контекстном меню таблицы (см. рис. 11.25) должен быть выбран режим Свойства столбца (Column Properties). Установите курсор на таблице ДОГОВОР и выберите на панели кнопку Свойства (Properties). В открывающихся свойствах таблицы на вкладке Связи (Relationships) отображаются установленные для нее в схеме связи. Если связь между парой таблиц установлена в одной из ранее созданных схем или в свойствах таблицы, она автоматически отобразится во вновь соз-
Глава 11 Разработка проекта Access — приложения Microsoft SQL Server
441
даваемой схеме сразу после включения в нее этих таблиц. Удаление связи в схеме приводит к удалению связи из свойств таблицы. ДОГЛАКЛАДНАЯ : схема
ном_дог
*
,,-,
ДАТА ЛОГ КОД_ПОК СУММД_ДОГ
НАКЛАДНАЯ Имя столбца ИОМ_НАКП
код_ск ДАТЙ_ОТГР
ном_дог СУММА НАКЛ
Тип данных char char date time char money
Свойства столбца
Д
Ключи J
Только имя Новое представление Ключевое поле Индексы / Ключи Отношения Ограничения
ут Добавить строки -•и) Удалить строки
1
Удалить таблицу из базы данных Скрыть таблицу Добавить связанные таблицы Автоподбор раэиеров выделенных таблиц
Увеличить выделенное Свойства
Рис. 11.25. Схема базы данных SQL-сервера, построенная в проекте Access
Если при построении новой схемы добавляются таблицы, ранее использовавшиеся в других схемах или имеющие в свойствах определенные для нее связи, построение схемы упрощается. Щелкнув правой кнопкой мыши на такой таблице в схеме данных, достаточно выбрать команду Добавить связанную таблицу (Add Related Tables), чтобы в схему были включены связанные таблицы и указаны связи с ними. Изменяя в меню Вид (View) масштаб схемы, можно ее разместить на одной странице. Установленные в схеме связи используются при создании представлении и других объектов на основе взаимосвязанных таблиц.
442_
Часть II. Многопользовательские технологии баз данных
Запросы В проекте поддерживается работа с тремя основными типами запросов, сохраняемыми в базе данных: О запросами на выборку, выполняющими извлечение данных с помощью инструкции SQL SELECT, называемыми представлениями; П управляющими запросами, выполняющими вставку, изменение или удаление данных с помощью инструкций SQL INSERT, UPDATE и DELETE, называемыми сохраненными процедурами; П определяемыми пользователем функциями, также представленными в окне запросов проекта и сочетающими характеристики представлений и сохраненных процедур в одном запросе. Представления являются предварительно откомпилированными запросами на выборку. Они определяют подмножества данных, которые могут использоваться любыми пользователями базы данных. Кроме того, представления позволяют отключить доступ любых пользователей к таблицам базы данных. В проекте представления создаются только в режиме конструктора. В представлении не допускается использование параметров. Окно конструктора представлений Представление (View) (см. рис. 11.27), структура которого подобна структуре, используемой в режиме конструктора запросов Access, разделяется на три области: область схемы, область сетки (бланк представления) и область SQL. Схема отображает таблицы, представления, а также определяемые пользователем функции, которые используются в запросе. На схеме отмечаются поля, которые необходимо вывести в таблице результата, при этом они автоматически переносятся в бланк представления. В области сетки также могут быть выбраны поля и заданы критерии отбора записей. Область SQL отображает запрос на языке SQL, формируемый так же, как в Access, — автоматически по мере заполнения бланка представления. В то же время оператор SQL может быть отредактирован или целиком написан пользователем. Эта область используется также для ввода операторов SQL, которые невозможно создать в области схемы и сетки. Если оператор невозможно отобразить в областях схемы и сетки, эти области должны быть невидимыми. Области схемы, сетки и SQL синхронизируются — изменения, внесенные в одной области, автоматически отражаются в других областях. (
Замечание
Конструктор запросов разработан для поддержки Microsoft SQL Server 2000, но является совместимым и с более ранними версиями.
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
443
В режиме конструктора представлений на панели инструментов отображаются соответствующие кнопки: G кнопка Схема (Diagram) служит для воссоздания в окне конструктора подсхемы представления. В диалоговом окне свойств связи (см. рис. 11.28) можно определить тип объединения записей таблиц; П кнопка Сетка (Grid) показывает или скрывает из окна конструктора бланк представления. В бланке отображается информация о столбцах. Здесь могут быть заданы псевдоним столбцов, выражение для вычисляемых столбцов, критерий отбора записей, группировка; П кнопка SQL (SQL) отображает в окне конструктора раздел с операторами на языке Transact-SQL; П кнопка Проверить синтаксис SQL (Verify SQL Syntax) осуществляет проверку синтаксиса оператора SQL без выполнения запроса, с помощью которого создается представление. Окно Представление (View) в проекте Access, в отличие от окна конструирования представлений в программе SQL-сервера — Enterprise Manager, не содержит раздела для вывода результата. Результат выполнения представления отображается так же, как при работе с локальной базой данных Access — в отдельном окне, выводимом при переходе в режим таблицы. Создадим представление, в котором на основе таблиц ПОКУПАТЕЛЬ и ДОГОВОР формируется список договоров, заключенных покупателем "Компьютер маркет" в 2004 году. 1. Создание представления для базы данных SQL-сервера начнем с нажатия кнопки Создать (New) на вкладке Запросы (Queries) в окне проекта Access. В окне Новый запрос (New Query) выберем строку Конструктор представления (Design View). 2. Через открывшееся окно Добавление таблицы (Add Table) включим в схему представления таблицы ПОКУПАТЕЛЬ и ДОГОВОР. 3. Связь между таблицами устанавливается автоматически, если она была создана в схеме данных или определена в таблице, а также если в одной таблице определен ключ, а в другой имеется одноименное поле. Если связь не была установлена, перетащим поле код_пок, по значениям которого должна осуществляться связь, из таблицы ПОКУПАТЕЛЬ в таблицу ДОГОВОР.
Замечание В представлении связь можно устанавливать и между таблицами, не имеющими ключей, т. к. она служит только для определения способа объединения записей таблиц.
Часть II. Многопользовательские технологии баз данных
444
По умолчанию для установленной любым способом связи выбирается внутреннее объединение типа INNER JOIN, которое обозначается значком <ф. При этом объединяются только записи, имеющие равные значения в поле связи (рис. 11.26). Записи таблиц, не имеющие связанных записей в другой таблице, в результат объединения не включаются. Могут выбираться и другие знаки сравнения значений в поле связи. Если в схеме для объединения используется оператор, отличный от оператора равенства (=), то оператор отображается на значке линии объединения, Свойства Линия объединения Условия объединения Таблица: [ДОГОВОР
{ПОКУПАТЕЛЬ
Столбец: dbo.ДОГОВОР.КОД_ПС
[*f ПОКУПАТЕЛЬ, крх
Включить строки /X
Г" Вс.е строки с ДОГОВОР
Справка
Рис. 11.26. Определение типа объединения записей таблиц
Если выбрать пункт Все строки с ДОГОВОР (All rows from ДОГОВОР), установится левое объединение LEFT OUTER JOIN, отображаемое значком щщ, при котором в результат объединения, помимо записей с одинаковыми значениями в поле связи, будут включены все записи таблицы ДОГОВОР, для которых нет связанных записей в таблице ПОКУПАТЕЛЬ. Выбор пункта Все строки с ПОКУПАТЕЛЬ (АН rows from ПОКУПАТЕЛЬ) приведет к правому объединению типа RIGHT OUTER JOIN, отображаемому значком, повернутым в другую сторону, и включению в результат всех записей таблицы ПОКУПАТЕЛЬ. Выбор обеих строк сразу приводит к полному внешнему объединению FULL OUTER JOIN, отображаемому значком [g | и приводящему к включению в результат объединения всех записей из обеих таблиц, даже тех, у которых нет соответствующих строк в связанной таблице.
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
445
Выбрать способ объединения можно и прямо в контекстном меню линии объединения. 1. Выберем поля таблиц, которые необходимо вывести в результате запроса, отметив их в таблицах схемы. 2. Для ПОЛЯ наименование покупателя (НАИМ_ПОК) введем В столбец Критерий (Criteria) строку ='компьютер маркет 1 , а для поля с датой заключения договора— строку (ддтд_дог) >=01. 01.2004. Наличие критерия отбора записей для поля помечается значком фильтра в таблице. 3. В столбце Псевдоним (Alias) зададим подписи полей. Введенные подписи отобразятся в названиях столбцов таблицы запроса. Кроме того, они будут использоваться вместо имен полей при работе с запросом в схемах данных, в списках полей при использовании запроса мастером форм, отчетов, страниц, отображаться в подписях полей в форме и т. д. 4. Для параллельного отображения инструкции SQL при формировании представления диалоговыми средствами щелкнем на кнопке SQL. Окно созданного представления приведено на рис. 11.27. Внимание При вводе имен объектов базы данных сервера SQL (таблиц, представлений и столбцов) необходимо представить серверу информацию, достаточную для идентификации объекта. В общем случае объекты базы данных идентифицируются по уникальным именам, которые могут содержать до трех частей (для таблиц и представлений) или до четырех частей (для столбцов): например, 5аза_данных.владелец.таблица или база_данных.владелец.таблица. столбец. Ссылка в именах на базу данных используется потому, что в Microsoft SQL Server 7.0 или более поздних версиях допускается объединение таблиц из разных баз данных, находящихся на сервере. При работе с БД в соответствие идентификатору SA ставится стандартное учетное имя dbo.
5. Для выполнения представления из окна конструктора нажмем на панели инструментов кнопку Запуск (Run) или выберем Режим таблицы (Datasheet View), воспользовавшись кнопкой Вид (View). Из окна проекта представление выполняется по кнопке Открыть (Open). Создадим представление, в котором на основе таблиц ПОКУПАТЕЛЬ и ДОГОВОР подсчитывается число договоров., заключенных каждым покупателем, и общая сумма всех договоров каждого покупателя. В таблицу представления включим наименование покупателя, его адрес. Включим и тех покупателей, которые не заключали договоров. На рис. 11.28 приведено окно представления, схема которого включает связанные таблицы ПОКУПАТЕЛЬ и ДОГОВОР, в бланке представления расположены поля: наименование покупателя — ндим_пок, адрес — АДРЕС_ПОК, номер договора — ном_дог и общая сумма по договору — СУММА_ДОГ.
Часть II. Многопользовательские технологии баз данных
446
вга
Представление! ; представление ' (Все столицы) ;КОД„ГКЖ
V УАДРЕС_ПОК
Столбец HAMMJ10K АДРЕС_ПОК ТЕЛ HOMJOr ДАТА^ОГ СУММА_ДОГ
Псевд
Таблица ПОКУПАТЕЛЬ ПОКУПАТЕЛЬ ПОКУПАТЕЛЬ ДОГОВОР ДОГОВОР ДОГОВОР
Бивод V V V" s/ \/ \/
И пи,.. Тип сорт Порядок Критерий = N' Ком пьют ер паркет'
>= '01. 01. 2004'
< SELECT FROM WHERE
>
dbo. ПОКУПАТЕЛЬ, НАИМ ПОК, dbo. ПОКУПАТЕЛЬ. АДРЕС ПОК, dbo. ПОКУПАТЕЛЬ. ТЕЛ, dbo. ДОГОВОР. НОМ_ДОГ, dbo. ДОГОВОР. Д AT А_ДОГ, dbo, ДОГОВОР. СУММА ЛОГ dbo, ДОГОВОР INNER JOIN dbo. ПОКУПАТЕЛЬ ON dbo, ДОГОВОР .КОД ПОК = dbo. ПОКУПАТЕЛЬ, КОД ПОК (сЬо.ПОКУПДТЕЛЬ.НАИМ ПОК = М'Компьютер паркет') AND (dbo. ДОГОВОР. ДАТА_ДОГ >= CONVERT(DATETIME, '2004-01-01 00:00:00', 102))
Рис. 11.27. Окно конструктора представлений
Для расчета числа и стоимости договоров каждого покупателя выполним группировку записей по полям таблицы ПОКУПАТЕЛЬ, ндим_пок и АДРЕС_ПОК, щелкнув на кнопке Группировка. В колонке Группировка (Group By) поля ном_дог выберем функцию Count, поля СУММА^ДОГ — функцию sum. В схеме представления в списках таблиц специальными значками помечаются поля, по которым производится группировка, и поля, по которым выполняется функция. Вычисляемому полю с результатом выполнения функций автоматически присваиваются имена "Exprl" и "Ехрг2" (колонка Псевдоним (Alias)). Изменим эти имена на "Число договоров" и "Общая сумма". В таблице ПОКУПАТЕЛЬ могут быть записи о покупателях, не заключивших договоров. Чтобы при объединении записей в результат попали и записи о покупателях, не имеющие связанных в таблице ДОГОВОР, установите для связи параметр объединения Все строки с ПОКУПАТЕЛЬ (All rows from ПОКУПАТЕЛЬ).
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
447
В нижней части окна при заполнении бланка представления автоматически формируется соответствующая инструкция SQL.
Замечание Заготовка инструкции SQL формируется сразу после включения таблиц в схему. Для приведенного примера она записывается так: SELECT FROM dbc.ДОГОВОР RIGHT OUTER JOIN dbo.ПОКУПАТЕЛЬ ON dbo.ДОГОВОР.КСД_ПОК=аЬо.ПОКУПАТЕЛЬ.КОД_ПОК
Окно созданного представления приведено на рис. 11.28.
и1 Представление 2 ; представление
•НСУ
: Л;
'
...* (Все столб!
(
Л'
Пкод_пок Пинн
вс Ш
У'АДРЕС_ПОК 1 " ТЕЛ
С=
>
Т 1 ""'
;
-•
JJJTJ
.„,* (Все столбцы) ^НОМ_ДОГ 1-ДАТАЛОГ
Z
,„;код_пок 'СУММА jor l\ Е
> Столбец НАШ_ПОК АДРЕС_ПОК СУММА_ДОГ НОМ_ДОГ
Псевдоним
[Таблица ПОКУПАТЕ. ПОКУПАТЕ. [Общая сумма] ДОГОВОР [Число договоров] ДОГОВОР
Вывод 1 Тип сортировки S/
V
По убыванию
Группировка Группировка Группировка
V
л
5um Count
<
v >
5EL ЕСТ
ТОР 100 PERCENT dbd. ПОКУПАТЕ ЛЬ. HAHMJIOK., dbo, ПОКУПАТЕ ЛЬ, АДРЕС ПОК, SUM(dbo. ДОГОВОР ,СУММА_ДОГ) А5 [Общая сумма], COUNT(dbo. ДОГОВОР. НОМ _ДОГ) AS [Число договоров] dbo, ДОГОВОР RIGHT OUTER JOIN >RC )М dbo. ПОКУПАТЕ ЛЬ ON dbo. ДОГОВОР. КОД _ПОК = dbo. ПОКУПАТЕ ЛЬ. КОД _ПОК GR( XJP BY dbo. ПОКУПАТЕЛЬ .НАИМ ПОК, d Ьо. ПОКУПАТЕ ЛЬ. АД РЕ С_ПОК OR DER BY SUM(dbo. ДОГОВОР, СУММА ДОГ) DESC
Рис. 11.28. Запрос на выборку данных с группировкой записей по полям таблицы ПОКУПАТЕЛЬ
Запустим представление из окна конструктора, нажав на панели инструментов кнопку Запуск (Run). Таблица представления в соответствии с указанным способом объединения включает все записи таблицы ПОКУПАТЕЛЬ. Для записей о покупателях без
448
Часть II. Многопользовательские технологии баз данных
договоров в колонке Число договоров выводится нулевое значение. Можно изменить способ объединения записей на INNER JOIN, чтобы убедиться, что записи о покупателях без договоров не выводятся.
Сохраненные процедуры Сохраненные процедуры не ограничиваются использованием только запросов на выборку. Они используются для выполнения запросов с параметрами и запросов на изменение, вставку или удаление данных с помощью инструкций SQL UPDATE, INSERT и DELETE. Сохраненная процедура — это специальная программа из совместно откомпилированного набора инструкций Transact-SQL, сохраненная в базе данных SQL Server и выполняемая по вызову клиента. Сохраненные процедуры позволяют описать сложную логику обработки и проверки данных при решении задач. Они могут выполняться из приложения с помощью вызова по имени и поддерживают использование определяемых пользователем переменных, условное выполнение и другие мощные средства программирования. Им могут передаваться параметры, они могут возвращать наборы записей, а также возвращать значения. В сохраненной процедуре можно вызывать другие сохраненные процедуры. Поскольку сохраненные процедуры предварительно компилируются и оптимизируются, они более эффективны, чем аналогичный набор инструкций, посылаемый для выполнения клиентом. Использование сохраненных процедур сокращает объём данных, передаваемых по сети. В проекте Access сохраненные процедуры могут выполняться при щелчке мыши на кнопке Открыть (Open) в окне проекта. Для того чтобы запускать процедуры, пользователь должен обладать соответствующими правами. Сохраненная процедура, содержащая одну инструкцию SQL SELECT, может создаваться или изменяться в графическом режиме в конструкторе. Сохраненная процедура, содержащая несколько инструкций SQL, может создаваться или изменяться в текстовом редакторе SQL, допускается редактирование входящей в такую процедуру инструкции SQL SELECT в графическом режиме. Для создания сохраненной процедуры в окне проекта Access при выборе вкладки Запросы (Queries) нужно нажать кнопку Создать (New). В открывшемся окне Новый запрос (New Query) для создания сохраненных процедур представлен Конструктор сохраненной процедуры (Design Stored Procedure) и редактор, вызываемый строкой Ввод сохраненной процедуры (Create Text Stored Procedure). Панель инструментов конструктора сохраненной процедуры в отличие от конструктора представлений дополнена кнопкой Тип запроса (Query Type). По кнопке открывается список запросов на изменение (рис. 11.29), которые
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
449
могут быть созданы в сохраненной процедуре в режиме конструктора в областях схемы и сетки. Пункт меню Запрос (Query) конструктора сохраненной процедуры также дополнен аналогичными командами.
Выборка Запрос на создание таблицы.., Обновление Добавление.,, Запрос на добавление значений Удаление
Рис. 11.29. Список типов запроса, доступный в конструкторе сохраненной процедуры
О Запрос на создание таблицы (Make-Table Query) — создает новую таблицу и строки в ней, копируя результаты запроса на выборку. Запросы этого типа создаются с помощью инструкции SQL SELECT. . .INTO. П Обновление (Update Query) — обновляет значения отдельных столбцов в одной или нескольких существующих строках таблицы. Запросы этого типа создаются с помощью инструкции SQL UPDATE. П Добавление (Append Query) — создает новые строки, копируя существующие строки из одной таблицы в другую или копируя строки из той же таблицы как новые строки. Запросы этого типа создаются с помощью инструкции SQL INSERT. . .SELECT. П Запрос на добавление значений (Append Values Query) — создает новую строку и вставляет значения литералов в указанные столбцы. Запросы этого типа создаются с помощью инструкции SQL INSERT INTO. . .VALU:-:S. О Удаление (Delete Query) — удаляет одну или несколько строк из таблицы целиком. Запросы этого типа создаются с помощью инструкции SQL DELETE.
SQL Server содержит множество встроенных функций. Одни из них являются скалярными, т. е. возвращающими единственное значение, другие возвращают таблицы и могут использоваться в предложении FROM, входящем в предложение SELECT. SQL Server позволяет пользователям создавать и свои собственные скалярные и табличные функции, которые называются пользовательскими.
Часть II. Многопользовательские технологии баз данных
450
Во многих случаях определяемые пользователем функции имеют ряд преимуществ по сравнению с представлениями и сохраненными процедурами. Они позволяют возвращать таблицу данных или скалярное значение, упрощают синтаксис SQL. Эти функции могут быть использованы для извлечения данных и просмотра результатов в режиме таблицы, в качестве источника записей формы, отчета или поля со списком, а также для программной обработки с использованием модели объектов Microsoft Access. Для создания определяемых пользователем функций в окне Новый запрос (New Query) представлены текстовые редакторы Microsoft SQL: Ввод скалярной функции и Ввод табличной функции.
Конструктор сохраненной процедуры Если приходится часто выполнять один и тот же запрос с новыми критериями отбора записей, используют запрос с параметрами. Параметр можно ввести в колонку Критерий (Criteria) в области сетки конструктора сохраненной процедуры.
СохраненналПроцедураЧ : сохраненная процедура
ш * (Все столбцы) JKOAJ10K
инн
* (Все CTuitiLibij
«/•номдог
0АДРЕС_ПОК •IV ТЕЛ
<
Столбец НАИМ_ПОК АДРЕС J1OK ТЕЛ НОМ_ДОГ ДАТА^ОГ СУММА_ДОГ
SELECT FROM WHERE
Псевд'Таблица ПОКУПАТЕЛЬ ПОКУПАТЕЛЬ ПОКУПАТЕЛЬ ДОГОВОР ДОГОВОР ДОГОВОР
Вывод | Критерий = ©Наименование Покупателя V/
dbo,ПОКУПАТЕЛЬ.HAMMJlOKj dbo.ПОКУПАТЕЛЬ,АДРЕС ПОК, dbo,ПОКУПАТЕЛЬ.ТЕП, dbo.ДОГОВОР,НОМ_ДОГ, У Ьо. ДОГОВОР. Д AT А^ДОГ, dbo*. ДОГ О ВОР. СУ ММ А _ДОГ dbo. ДОГОВОР INNER JOIN dbo.ПОКУПАТЕЛЬ ON dtro.ДОГОВОР,КОД_ПОК = dbo,ПОКУПАТЕЛЬ,КОД_ПОК №о.ПОКУПАТЕЛЬ,НАИМ_ПОК = ©НаименованиеПежулателя) AND (ЬЬо,ДОГОВОР.ДАТА_ДОГ BETWEEN @ДзтаНачала AND @ДатаОкончания)
Рис. 12.30. Использование параметра в сохраненной процедуре
451
Глава 11. Разработка проекта Access — приложения Microspft SQL Server
Параметр определяется расположенным перед его именем символом "@". Знак "@" перед именем параметра сообщает системе, что следует открыть диалоговое окно Введите значение параметра (Enter Parameter Value), в которое пользователь вводит значение параметра. Далее оно используется как значение в предложении WHERE. В созданном ранее представлении наименование покупателя, для которого нужно было вывести записи, задавалось прямо в столбце критериев. Представление не позволяло использовать параметры. Создайте аналогичную сохраненную процедуру в режиме конструктора и в колонку Критерий (Criteria) поля НАИМ_ПОК введите =@НаименованиеПокупателя {рис. 11.30). Использование пробелов в имени параметра не допускается. В поле даты заключения договора введите критерий для отбора договоров в заданном диапазоне дат: BETWEEN @ДатаНачала AND @ДатаОкончания. При выполнении этой сохраненной процедуры выведутся диалоговые окна, представленные на рис. 11.31.
Введите значение параметра
щ|1|]
Н а и м еновашеПо к у п ат е л я
<]
ДзтаНэчзла
-Vj •"'К
Введите значение параметра [?
Отмена
1 ОК
Отмена
Рис. 11.31. Окна ввода значений параметров в сохраненную процедуру
В графическом режиме в конструкторе запросов может создаваться или изменяться сохраненная процедура, содержащая одну инструкцию SQL SELECT.
Ввод сохраненной процедуры Создание сохраненной процедуры в текстовом редакторе SQL начинается с выполнения команды Ввод сохраненной процедуры (Create Text Stored Procedure) в окне Новый запрос (New Query), открывающемся щелчком на кнопке Создать (New). В окне текстового редактора отобразится шаблон сохраненной процедуры (рис. П.32). В инструкции создания сохраненной процедуры за ключевыми словами CREATE PROCEDURE следует предлагаемое по умолчанию имя процедуры и определение ее параметров и переменных. Параметры в сохраненной процедуре, как и переменные, задаются вместе с типами данных, возможно присвоение значений по умолчанию. Имя параметра должно начинаться с символа "@". Для параметров допускаются те же типы данных, что
Часть II. Многопользовательские технологии баз данных
452
и для столбцов таблиц. Если у процедуры несколько параметров, их определения разделяются запятыми. По умолчанию все параметры хранимой процедуры являются входными. Для того чтобы определить выходной параметр, нужно добавить после его имени, типа и значения по умолчанию ключевое слово OUTPUT. Выходным параметрам в процедуре присваиваются результаты выполнения вычислений или операций. Вызываются процедуры по имени с помощью команды EXECUTE. При вызове процедуры ей должны передаваться все входные параметры, для которых не определены значения по умолчанию, и выходные параметры, с помощью которых в вызывающую процедуру будет возвращен присвоенный в вызываемой процедуре результат. Знаками / * . . . * / выделяются строки комментария. Строками комментариев в шаблоне процедуры являются шаблоны параметров и директива Л SET NOCOUNT ON */. Вслед за ключевым словом AS записываются инструкции SQL. Ключевое слово RETURN можно определить или удалить. После сохранения процедуры ключевое слово CREATE автоматически заменяется на ALTER.
Замечание При создании сохраненной процедуры, возвращающей строки из базы данных, первой инструкцией после CREATE PROCEDURE должна быть инструкция SELECT. Можно также использовать инструкцию SET NOCOUNT он в начале процедуры. Это обеспечит отображение результирующего набора записей из первой инструкции SELECT, иначе строки отображаться не будут.
СохраненнаяПроцедура? : сохраненная процедура L, }|П CREATE PROCEDURE "СохраненнаяПроцедура?"
Г ^parameter! datatype = default value, (SparameterZ datatype OUTPUT
/* 5ET NOCOUNT ON *j RETURN
Рис. 11.32. Шаблон сохраненной процедуры в текстовом редакторе SQL
При написании инструкций SQL можно воспользоваться кнопкой Вставить SQL (Insert SQL) на панели инструментов, которая открывает построитель инструкций. Построитель в графическом режиме конструирования позволя-
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
453
ет сформировать инструкции, которые при необходимости могут быть уточнены после возвращения в окно текстового редактора. При первом запуске процедуры SQL Server ее компилирует и оптимизирует, Кроме того, он автоматически компилирует и оптимизирует процедуру, когда изменяются таблицы, которые она использует. На рис. 11.33 приведен пример процедуры, в которой вычисленная по всем договорам заданного покупателя сумма присваивается выходной переменной с именем @сумма! с помощью оператора set. Входная переменная имеет ИМЯ @НаименованиеПокулателя.
Инструкция SELECT, возвращающая значение суммы всех договоров заданного покупателя, может быть сформирована с помощью построителя. Там же определяется параметр путем ввода его в колонку критерия отбора записей. Для параметра, использованного в инструкции, в процедуре определена входная переменная. Тип данных и размер переменных соответствуют заданным значениям для полей НАШ пок и СУММА дог в таблице ПОКУПАТЕЛЬ,. СохраненнаяПроцедураЗ : сохраненная процедура ALTER PROCEDURE СохраненнаяПроцедура-1 @НаименованиеПокупателя nvarchar (20), @сумма1 decimal OUTPUT AS Set @Сумма1=(5Е1.ЕСТ 5иМ(ДОГОВОР, СУММА ЛОГ) FROM ДОГОВОР INNER JOIN ПОКУПАТЕЛЬ ON ДОГОВОР, КО Д_ПОК = ПОКУПАТЕЛЬ.КОД_ПОК GROUP BY ПОКУПАТЕЛЬ, HAMMJIOK HAVING (ПОКУПАТЕЛЬ,HAHMJIOK = ФНаименованиеЛокупателя))
Рис. 11.33. Пример сохраненной процедуры с входной и выходной переменными
На рис. П.34 приведен пример процедуры, в которой инструкцией EXECUTE вызывается Сохраненнаяпроцедура4. При этом ей передаются значение ВХОДНОГО параметра (ШаименовакиеПокупателя, равное 'Компьютер маркет 1 ,
и имя выходной переменной, через которую будет получено вычисленное в вызываемой процедуре значение. И СохраненнаяПроцедураб : сохраненная процедура ALTER PROCEDURE СохраненнаяПроцедураб @Сумма money =0 AS EXECUTE СохраненнаяПроцедура4 'Компьютер паркет',фСумиа OUTPUT UPDATE ПОКУПАТЕЛЬ SET СУММА_ПОК = @Сумма WHERE НАИМ_ПОК= 'Компьютер маркет'
Рис. 11.34. Вызов сохраненной процедуры с параметрами на выполнение
454
Часть II. Многопользовательские технологии баз данных
Инструкция UPDATE выполнит обновление поля СУММА_ГТОК для заданного покупателя в соответствующей таблице. Приведенный на рис. 11.34 пример не может быть создан построителем, т. к. в конструкторе отсутствует графическая поддержка такой инструкции SQL. Графическое представление запроса в области схемы и сетки невозможно. Контрольные вопросы 1. Клиентом какого сервера является проект Access? 2. Какие объекты хранит проект Access? 3. Может ли проект хранить запросы к базе данных? 4. Где размещаются объекты базы данных, с которыми работает проект? 5. Перечислите основные объекты базы данных, с которыми работает проект. 6. Можно ли из проекта создать новую базу данных и ее объекты? 7. Какой интерфейс используется проектом Access для доступа к данным Microsoft SQL Server? 8. Как узнать, инсталлирован ли провайдер OLE DB для SQL Server на вашем компьютере? 9. Может ли проект Access использовать файлы связи с данными файлы?
- UDL-
10. Какое расширение имеет файл, сохраняющий проект? 11. Какие параметры необходимо задать для подключения проекта к базе данных сервера? 12. Какая команда позволяет просмотреть и изменить параметры подключения проекта? 13. В какой момент возможно создание новой базы данных на сервере из Access? 14. Куда попадут таблицы локальной базы данных при выполнении из проекта команды Файл|Внешние данные|Импорт (File|Get External Data|Import)? 15. Сохраняется ли определение ключа таблицы при ее импорте из БД Access в БД Microsoft SQL Server? 16. Можно ли таблицу без ключа дополнить новыми данными? 17. Возможно ли из проекта изменение структуры таблицы? 18. Возможно ли в таблице БД Microsoft SQL Server задать ограничения на значения полей? 19. В каком режиме выполняется создание таблиц в БД Microsoft SQL Server?
Глава 11. Разработка проекта Access — приложения Microsoft SQL Server
455
20. Возможно ли определение связей таблицы в схеме данных, если она не имеет ключа? 21. Обеспечивается ли проверка целостности данных в связанных таблицах сервера? 22. Где можно увидеть ограничения, наложенные на поля таблицы, ее связи с другими таблицами, индексы? 23. Возможно ли импортировать запросы из БД Access в БД Microsoft SQL Server? 24. Какие типы объединения записей таблиц можно установить в схеме данных представления? 25. Только ли для подписи используется имя поля, введенное в столбец Alias в конструкторе представления? 26. Отображается ли в конструкторе представлений соответствующая инструкция SQL? Ответы 1. Сервера баз данных — Microsoft SQL Server. 2. Формы, отчеты, HTML-страницы, макросы и модули.
3. Нет. 4. На SQL Server. 5. Таблицы, схемы базы данных, представления, сохраняемые процедуры. 6. Да.
7. OLE DB. 8. Через программу Data Links.
9. Нет.
10. adp. 11. Имя сервера или его IP-адрес, имя пользователя, под которым он зарегистрирован на сервере, и пароль (возможен вход по имени и паролю Windows), имя базы данных на сервере. 12. Файл|Подключение (File|Connection). 13. В момент создания нового проекта. 14. В базу данных сервера, к которой подключен проект.
15. Нет. 16. Нет.
456
Часть II. Многопользовательские технологии баз данных
17. Да.
18. Да. 19. В режиме конструктора.
20. Нет. 21. Да. 22. В свойствах таблицы.
23. Нет.
24. Внутреннее INNER JOIN, левое LEFT OUTER JOIN, правое RIGHT OUTER JOIN, ПОЛНОе FULL OUTER JOIN.
25. Нет. 26. Да.
Глава 12
Публикация данных в Интернете и корпоративной сети В настоящее время практически любой программный продукт включает средства, в той или иной мере ориентированные на использование его документов в Интернете. Все компоненты Microsoft Office 2003 еще в большей мере, чем предыдущие версии, ориентированы на работу в сети, Интернеттехнологии, основанные на публикации документов на Web-страницах и гиперссылках, которые ведут от одного документа к другому, позволяют пользователю, находясь в среде браузера, например, Internet Explorer, использовать документы, подготовленные в различных программах и форматах. В результате пользователь без значительных усилий расширяет рабочее информационное пространство. Базы данных широко используются в Интернете — публикациях и системах электронной коммерции. Access включает средства распределения данных базы в сети, а также средства, позволяющие пользователю из приложения Access создавать и работать с документами, размещенными в Интернете. Для разработки Web-доку ментов используется стандартный язык гипертекстовой разметки HTML (Hypertext Markup Language). Он является языком описания и отображения Web-страниц. HTML использует теги и атрибуты, значения которых определяют для Web-браузеров способ отображения элементов страниц, таких как текст и рисунки, а также способ отклика на действия пользователя. Расширение языка HTML— динамический HTML (DHTML) дополняет язык средствами, которые позволяют сделать Web-страницы интерактивными, в том числе за счет доступа к базам данных. Язык HTML, хорошо подходящий для описания внешнего вида Webстраницы и отображения текста и рисунков в Web-браузерах, имеет ограниченные возможности по определению данных и их структуры. Это делает затруднительной передачу структурированных данных через Интернет и между различными приложениями, работающими с разными форматами и структурами данных.
458
Часть It. Многопользовательскиетехнрлогии базданных
Стандартным языком описания и передачи данных в Интернете является язык XML (Extensible Markup Language — язык наращиваемой разметки). XML представляет собой набор правил и соглашений для описания форматов и структур данных и обеспечивает способ создания файлов. Такие файлы легко создаются и читаются разными компьютерами и приложениями. XML описывает стандартным согласованным способом содержимое Webдокумента, а не способ его отображения, как HTML. Причем этим содержимым могут быть данные различных приложений. Интерпретация данных XML осуществляется в приложениях, которые читают эти данные. Язык XML поддерживается в Access. Access включает средства экспорта данных из базы Jet или SQL Server в файлы формата XML и импорта в эти базы данных, а также средства преобразования данных в форматы и из форматов, используемых файлами XML. Средства преобразования данных основываются на языке XSL, используя который, можно изменять формат экспортируемых данных или создавать для них новое представление. Таким образом обеспечивается простой механизм перевода документов из одного формата в другой. Например, данные, экспортированные из приложения Access, можно преобразовать в формат, совместимый с корпоративной информационной системой. XML используется и для сохранения страниц доступа к данным.
Типы Web-страниц, создаваемых в Access Microsoft Access позволяет создавать Web-страницы нескольких типов. Для просмотра статического набора записей возможно использование формата статических файлов HTML, Статические HTML-страницы могут создаваться путем экспорта таблиц, запросов, форм и отчетов. Таблицы, запросы и формы отображаются Web-браузером в формате таблиц. Отчеты отображаются в формате отчетов. Опубликованная на такой Web-странице информация является снимком данных на момент ее создания. Поскольку такие страницы не имеют непосредственной связи с базой, отображаемые данные могут быть недостаточно актуальными. Для просмотра динамически формируемых из базы текущих данных, доступных только для чтения, возможно использование файлов IDC/HTX или ASP. Эти файлы могут создаваться путем экспорта таблиц, запросов и форм. Динамические Web-страницы обеспечивают просмотр данных, которые получаются из базы именно в момент открытия страницы. Получение таких актуальных данных обеспечивается Web-сервером Microsoft Internet Information Server (IIS), который обращается к базе за данными через интерфейс ODBC. Получив данные, сервер преобразует их в формат HTML и отправ-
Глава^^^Публикация данных в Интернете и корпоративной сети
459,
лист Web-браузеру клиента. Генерируемые сервером файлы HTML отображаются в браузере в табличном формате. Со статическими и динамическими HTML-файлами работают любые Webбраузеры, поддерживающие HTML версии 3.2 или более поздней, в любой операционной системе. Чтобы обеспечить согласованный вид Web-страниц, применяются файлы шаблонов HTML. Для просмотра, добавления, изменения, удаления, отбора, группировки и сортировки данных, хранящихся в базе данных Access или SQL Server, в интерактивном режиме применяют страницы доступа к данным, впервые появившиеся и Access 2000. Страница доступа к данным создается в Access, как и другие объекты базы данных, с помощью мастера или в режиме конструктора. На странице определяется подключение к базе данных. Страницы доступа к данным могут также содержать данные из других источников, таких как Microsoft Excel. Сохраняется страница доступа к данным в HTMLфайле, вне базы данных Access. Объект, представленный в окне базы данных, является ссылкой на соответствующую страницу. Страницу доступа к данным можно рассматривать как форму или отчет, опубликованные в корпоративной сети или Интернете и позволяющие с помощью программы просмотра Web-страниц — браузера -- осуществлять интерактивный доступ к данным базы. Для просмотра страниц доступа к данным Web-браузер должен поддерживать DHTML версии 4.0 или более поздней. К браузерам, использующим аппарат связывания данных DHTML, относится Microsoft Internet Explorer версии 5.0 и выше.
Создание Web-страницы путем экспорта данных Самым простым способом создания в Access Web-страниц является экспорт объектов базы данных. Экспортировать можно таблицы, запросы, формы и отчеты. Таким способом можно создавать статические и динамические HTML-страницы. Статические страницы используются, когда данные изменяются нечасто, динамические — при частом изменении данных или необходимости просматривать текущие данные в таблицах, подключенных к источнику данных ODBC. Эти страницы генерируются сервером при каждом обращении к ним, но не позволяют изменять данные в базе. Любые Webбраузеры под управлением любой операционной системы отобразят содержимое таких страниц. Файлы HTML вне зависимости от того, из какого объекта они были экспортированы, отображаются в браузере в табличном
Часть II. Многопользовательские технологии баз данных
460
формате. Исключением являются статические отчеты, которые сохраняют свой формат.
Создание статических Web-страниц Создание статической Web-страницы на основе таблицы Для создания статической Web-страницы путем экспорта таблицы базы данных нужно выполнить следующие действия. 1. В окне базы данных выбрать таблицу, которую нужно экспортировать, и выполнить команду меню Файл|Экспорт (File|Export). Команда Экспорт (Export) доступна и для открытой таблицы. 2. В окне Экспорт объекта: таблица 'имя таблицы1 как (Export Table <имя таблицы> То) в раскрывающемся списке Тип файла (Save as type) выбрать значение Документы HTML (*.html;*.htm) (HTML Documents (*.html;*.htm)) (рис. 12.1). Экспорт объекта: Таблица'ТОВАР* как Папка:
a* Сервис -
jj Test ПОКУП ATEflb.html
Мои последние документы
Рабочий стоп
Мои документы
Мой компьютер Имя файла: Мое сетевое окружение
Тип файла:
IТОВАР [документы HTML (*. html;*, htm)
"71 К* JCogpaHWTb формат! Г Аи то загрузка"" '
Экспорт
Рис. 12.1. Окно экспорта объектов базы данных
3. В списке Папка необходимо выбрать диск и папку, в которую будет экспортирован объект. 4. В списке Имя файла (File Name) по умолчанию записано имя экспортируемого объекта. При необходимости его можно изменить.
Глава 12. Публикация данных в Интернете и корпоративной сети
481
5. Флажок Сохранить формат (Save formatted) позволяет определить в НТМфайле формат таблицы, аналогичный виду объекта в режиме таблицы. Неформатированная таблица не имеет заголовков столбцов, и в ней используются стандартные разделительные линии.
Замечание Файлы, содержащие неформатированные таблицы HTML, имеют значительно меньший размер, чем форматированные файлы.
После установки флажка Сохранить формат (Save formatted) становится доступным и флажок Автозагрузка (Autostart). Этот параметр позволяет автоматически загрузить Internet Explorer или другой браузер, используемый в системе, и открыть в нем созданную в результате экспорта страницу. 6. Для того чтобы начать процесс экспортирования, нужно щелкнуть на кнопке Экспорт (Export). 7. Если был установлен флажок Сохранить ся окно Параметры вывода в формате (рис. 12.2). Если оставить в нем все без дет создана без использования шаблона темной кодировке компьютера.
формат (Save formatted), появитHTML (HTML Output Options) изменений, страница HTML будокумента и в стандартной сис-
ЛГдьзэ
Параметры вывода в формате HTML
ок
Г" выберите шеблон HTML:; [
1
Обзор,..
|
Выберите кодировку для сохранения файла: f* по умолчанию *"" ЕНИКОД Г Юникод (UTF-8)
Рис. 12.2. Диалоговое окно выбора параметров
На рис. 12.3 и 12.4 Internet Explorer отображает отформатированную и неотформатированную страницы HTML, созданные в результате экспорта таблицы ТОВАР. Поле с фотографией товара на странице HTML остается пустым в первом случае и вообще не отображается во втором. В таблице ПОКУПАТЕЛЬ имеется поле с гиперссылкой, оно сохранится на странице HTML. Щелкнув на любой из ссылок, можно убедиться, что они работают. Следует иметь в виду, что гиперссылка на локальный файл мо-
Часть II. Многопользовательские технологии баз данных
462
жет не содержать пути к нему. Поэтому, если HTML-файл и файл, на который указывает гиперссылка, размещены в разных папках, гиперссылка может не работать. Чтобы изменить такие гиперссылки, следует открыть страницу HTML в исходном коде и откорректировать адрес файла. Исходный код страницы HTML отобразится в текстовом редакторе Блокнот, если выполнить в Internet Explorer команду меню Вид|Просмотр HTML-кода (View|Source). '3 ТОВАР - Microsoft Internet Explorer -[Автономная работа] Файл Правка Вид Избранное Сервис Справка ** з! '.
' Поиск
г
: Избранное %Лр Медиа
Ссыпки Перепад
:\Test\TQBAP, html ТОВАР "•; Наименование товара Монитор 17LG FDD3.5 HDD Maxtor'20GB Корпус MiniTower
Код
товара Т001 Т002 ТООЗ TD04
Еднницл измерения Б 587,00р. штука ЗВЗ.ООр коробка 1 280,00р. штука j 916.00р штука
Ставка
Цен л
НДС
Фото товара
6%
16% 8%
POTOBQ
Мой компьютер Рис. 12.3. HTML-страница, созданная посредством экспорта таблицы с использованием форматирования
-3 ТОВАР - Microsoft Internet Explorer - [Автономная работа] Файл
Правка
-^j -'*•;. ...
Вид >w
Избранное
Сервис
*] j£] !-'';
.) Поиск
Справка -! Избранное i$ Медиа
\дрее; j^] O:\Test\TOBAP.html
T001 Монитор 17LG
6587,00р. штука
,0,05
363,00р. коробка 0,06 ТООЗ HDD Maxtor 20GB
1280,00р. штука
:Q,16
!Т004 ;Корпус MmiTower
916,00р. штука
0,08
;
О Готово
-J/ Мой компьютер
Рис. 12.4. HTML-страница, созданная посредством экспорта таблицы без использования форматирования
*•
Глава 12. Публикация данных в Интернете и корпоративной сети
463
Гиперссылки в исходном коде оформляются в виде тега формата <А нзЕГ="АдресСтраницы">. Найти такой тег несложно. Если в адресе отсутствует путь, например: <А HREF=". ./компьютер лэнд.бос">, его можно вписать: <А HREF="E:/Книга_2004/Test/Компьютер лэнд.(3ос">. После ДОПОЛНСния относительного адреса префиксом пути гиперссылка будет работать вне зависимости от местоположения Web-страницы на вашем компьютере. Для придания Web-страницам, например, одной фирмы единообразного внешнего вида применяются шаблоны. Шаблоны позволяют без особых усилий одинаково оформить страницы. Файл шаблона должен иметь формат HTML. Файл с шаблоном содержит теги, определяющие структуру страницы. При этом в шаблон включаются теги, замещаемые содержимым основного файла, к которому применяется шаблон. Замещаемый тег определяет включение на страницу таблицы, созданной в результате экспорта, и обязательно должен присутствовать в шаблоне. Замещаемый тег <TITLE> определяет вывод имени экспортируемого объекта в строке заголовка окна браузера. Кроме того, в шаблон включаются теги для оформления страницы: например, для отображения логотипа организации, ее выходных данных. Для добавления на создаваемую страницу рисунка и текста могут быть использованы теги: 3flECb РАЗМЕСТИТЬ РЕКВИЗИТЫ ВАШЕЙ ОРГАНИЗАЦИИ
Тег
позволяет провести разделительную линию. Следует иметь в виду, что в приведенном примере рисунок, используемый в шаблоне, должен находиться в той же папке, что и созданный HTML-файл. Если HTML-файл и файл с рисунком размещены в разных папках, рисунок не будет отображаться на странице. Для упрощения поиска и управления графическими файлами при создании Web-страниц целесообразно хранить их в отдельной папке. А чтобы рисунки открывались на страницах, следует дополнить адрес, указывающий на них, путем. Если папка с графическими объектами размещена в папке с HTML-фай лам и, адрес достаточно дополнить именем этой папки. Например:
Чтобы использовать шаблон для экспортируемых из объекта данных, в диалоговом окне Параметры вывода в формате HTML (HTML Output Options) установите флажок Выберите шаблон HTML (HTML Template) (рис. 12.5).
Часть II. Многопользовательские технологии баз данных
464
Через кнопку Обзор (Browse) или вручную определите местоположение файла шаблона. При экспортировании следующих объектов этот адрес файла шаблона будет отображаться по умолчанию.
Параметры вывода в формате HTML fv* |Вь|6ерите ща6понНТМ1:| [D! \TEST\PROBA. HTM
Обзор,..
Отмена
Выберите кодировку для сохранения файла: Г ..... пчэни
Рис. 12.5. Окно выбора шаблона для экспортируемого объекта
ВЕН
'Ш ТОВАР - Microsoft Internet Explorer Файл
Правка
iyj -"AMI,
'
Вид
Избранное
0- • [И ,2]
>'i
Сервис
Справка
/•-' Поиск
"«-Избранное ^J1 Медиа „V,!
D:\TE5T\TOBAP, html
РЕКВИЗИТЫ ВАШЕЙ ОРГАНИЗАЦИИ ТОВАР Код
то вард
Наименование товара
Цена 6587,00р. штука ЗбЗ.ООр ;коробка
HDD^Maxip£2EGI3
1 280,00р. штука
'Корпус MiniTower
916.00р. штука
Рис. 12.6. Web-страница с экспортированной таблицей, созданная на основе шаблона
Переход
j
Глава 12. Публикация данных в Интернете-и корпоративной сети
465
На рис, 12.6 представлена Web-страница, полученная в результате экспорта таблицы ТОВАР с использованием следующего простейшего шаблона: <TITLE>''>FIRSTPAGE — ТСГ ГфИ-
вязки первой страницы; П <А
HREF^"">NEXTPAGE -
Т6Г При-
вязки следующей страницы; П <Л HREF="">PREVIOUSPAGE -- ТСГ
привязки предыдущей страницы; G
HREF="">LASTPAGE -- Т6Г ПрИ-
вязки последней страницы. Для отображения номера текущей страницы используется распознаваемый Access замещаемый тег: < ! — ACCESSTEMPLATE_PAGENUMBER — >
Использование при экспорте отчета шаблона с тегами формирования переходов позволит изменить стандартную схему переходов и включить текущий номер страницы. <TITLE>< ! —ACCESSTEMP1ATE_TITLE~>< /TITLE > РЕКВИЗИТЫ ВАШЕЙ ОРГАНИЗАЦИИ
< ! — -ACCESSTEMPLATE_BODY— > 16 Зак. 835
468
Часть II. Многопользовательские технологии баз данных
CTpaHHua ">СледующаяА> "> Предьщущал А>
РЕКВИЗИТЫ ВАШЕЙ ОРГАНИЗАЦИИ
ОТГРУЗКА
ТОВАРА
Код товара Наименование товара Цена Единица измерения Ставка НДС
Т001 Монитор 17LG
6 557, 00р.
штука 5%
Код склада Январь 2004
СОЗ
Код товара
Количество Количество
Т001
Количество отгруженного:
Число отгрузок: 1 Март 2004
Т001 Т001 Т001 Т001 Количество отгруженного: С01 С01 001 СОЗ
Число отгрузок : 4 Апрель 2004
СОТ
TG01
Количество отгруженного:
Число отгрузок: 1 ИТОГО ОТГРУЖЕНО 15 марта 2004г.
Дата Дата
-' 2
20.01.2004
т • ••;
10.032004 11.032004 25.03 2004 24.03 2004
19 / 2 Z3
27.04.2004
Страница 1 из 10
Страница1)
Спедуоща_я
Предыдущая
Рис. 12.9, Отчет на Web-странице
Для экспорта отчета Товар (см. главу 8) в статическую HTML-страницу выполните следующие действия. I. В окне базы данных выберите отчет Товар и выполните команду меню Файл [Экспорт.
Глава 12. Публикация данных в Интернете и корпоративной сети
469
2. В окне Экспорт объекта в списке Тип файла выберите значение Документы HTML 3. В списке Папка определите папку, в которую будет экспортирован отчет. 4. Оставьте сформированное по умолчанию Имя файла без изменения. 5. Установите флажок Автозагрузка, чтобы отобразить результаты в браузере сразу после завершения экспорта. 6. В диалоговом окне Параметры вывода в формате HTML установите флажок Выберите шаблон HTML и введите адрес размещения шаблона. Если не выбрать файл шаблона, содержащий описатели переходов, Access создаст стандартную схему переходов. Web-страница с номером 1, созданная на основе отчета Товар с использованием приведенного выше шаблона, показана на рис. 12.9. Отчет на Web-странице сохраняет форматирование по умолчанию и имеет вид, аналогичный виду в режиме предварительного просмотра и на бумаге. При экспортировании обрабатывается большинство элементов управления и возможностей отчетов, включая подчиненные отчеты; не обрабатываются линии, прямоугольники и графические объекты. Для включения рисунков в заголовок или примечание отчета можно использовать файл шаблона.
Создание динамических Web-страниц Динамической называется HTML-страница, генерируемая Web-сервером на основе данных из базы при каждом обращении к ней пользователя. В Access путем экспорта таблиц, запросов, форм и отчетов создаются динамические страницы в форматах HTX/IDC или ASP. Связь страницы с базой данных осуществляется через интерфейс ODBC.
Экспорт объектов в Web-страницу формата HTX/IDC Для того чтобы экспортировать объект в Web-страницу формата HTX/IDC, выполните следующие действия. 1. В окне базы данных выберите имя таблицы, запроса, которые нужно экспортировать, и выполните команду меню Файл|Экспорт. 2. В окне Экспорт объекта в списке Тип файла выберите значение Microsoft IIS 1-2 (*.htx;.*.idc). 3. В поле Папка выберите папку, в которой будет сохранен результат экспортирования. В поле Имя файла по умолчанию записано имя экспортируемого объекта, при необходимости его можно изменить. 4. Нажмите кнопку Экспорт. При экспорте в формат HTX/IDC флажки Сохранить формат и Автозагрузка недоступны.
Часть II. Многопользовательские технологии баз данных
470
5. В диалоговом окне Настройка вывода файлов НТХ и IDC (рис. 12.10) введите сведения об используемом шаблоне и источнике данных ODBC. Сведения об источнике данных хранятся в DSN системного типа на Webсервере (Data Source Name — имя источника данных). В DSN указывается, где в сети расположена база данных, к которой будет подключаться сервер в момент получения текущих данных для HTML-страницы. В поле название источника вводится имя DSN. Оно уникально для локального компьютера. Источник данных, настроенный с DSN системного типа, доступен для системы и всех приложений баз данных, запускаемых на сервере.
Настройка вывода файлов НТХ и IDC Шаблон HTML:
;D:\TE5Т\PROBА.НТМ
. Сведения об источнике данных название источника:
,DSN_BD_2004
вход под именем:
:NVP
пароль:
Рис. 12.10. Определение шаблона динамической HTX/IDC-страницы и ее связи с базой данных
6. Для предоставления с Web-страниц доступа к объектам базы данных только определенным пользователям или группам пользователей в поля вход под именем и пароль вводятся имя пользователя и пароль: •
если источником данных является база данных Access (MDB-файл), введите имя пользователя и пароль системы безопасности на уровне пользователей. По умолчанию будут использоваться имя пользователя Admin и пустой пароль. Это позволит получить доступ к базе данных с Web-страницы любому пользователю, который по умолчанию имеет привилегии администратора;
• если источником данных является база данных Microsoft SQL Server, введите имя пользователя и пароль, обеспечивающие доступ определенных пользователей к базе данных Microsoft SQL Server с Webстраницы. По умолчанию будут использоваться имя пользователя SA и пустой пароль. Это позволит получить доступ к базе данных с Webстраницы любому пользователю, который по умолчанию имеет привилегии администратора.
Глава 12. Публикация данных в Интернете и корпоративной сети
471
Права доступа к таблицам, запросам, формам, отчетам и макросам базы данных Access предоставляет пользователям или группам пользователей администратор базы данных или владелец объекта, если в базе данных активизирована защита на уровне пользователей. 7. Для завершения процедуры экспорта в окне Настройка вывода файлов НТХ и IDC нажмите кнопку ОК. HTX/IDC был первым и наиболее простым методом создания динамических Web-страниц, допускающих только чтение новых данных из базы. При экспорте объектов в этот формат Access создает два файла с расширением hl.x и idc. На основе этих файлов Web-сервер генерирует HTML-страницу и передает ее браузеру. НТХ-файл (рис. 12.11) является основой для оформления HTML-страницы. IDC-файл (рис. 12.12, 12.13) используется для определения источника данных и запроса SQL, который выполняется для заполнения HTML-страницы новыми данными. Я ТОВАР Файл
Правка
Вид
Избранное !_*]
•V: '.->
у\
,
Сервис _
Поиск
Справка • Избранное %^ Медиа
^
v: •ЙЯ Переход ;
И) D:\TEST\TGBAP.hb:
РЕКВИЗИТЫ ВАШЕЙ ОРГАНИЗАЦИИ
ТОВАР ара|Ценд|Единшдл'изме|)«ння|Ставка НДС]Фото товара
Готово
Мой компьютер
Рис. 12.11. Отображение браузером НТХ-файла, созданного при экспорте таблицы ТОВАР
Из рис. 12.12, 12.13 видно, что в IDC-файле сохранены имя DSN, имя файла с расширением htx, инструкция SQL, такая же, как в запросе в режиме
Часть II. Многопользовательские технологии баз данных
472
SQL, а также имя и пароль, в соответствии с которыми пользователь с Webстраницы получает доступ к объектам базы данных.
ТОВАР.ЮС -Блокнот Файл
Правка
Формат
Вид
Справка
Datasource:DSN_BD_2QQ4 Tempi atе:товдр.htx w SQLStatement:SELECT FROM [ТОВАР] Password:urwrapQ4 username:WVP
Рис. 12.12. Содержимое IDC-файла, созданного при экспорте таблицы ТОВАР
Заказано. IDC - Блокнот Файл Правка
Формат
Вид
Справка
Datasource:DSN_BD_2004 Tempi ate:заказано.htx SQLStatement:SELECT ТОВАР.НАИМ_ТОВ, ПОКУПАТЕЛЬ.ндим_пок,
ДО ГОВОР.НОМ_ДО Г, ПОСТАВКА_ПЛАН.КОЛ_ПОСТ 4-FROM ТОВАР INNER JOIN (ПОКУПАТЕЛЬ INNER JOIN (ДОГОВОР INNER 3OIN ПОСТАВКА_ПЛАН ON ДОГОВОР. НОМ_ЛОГ=ПОСТАВКА_ПЛАН.НОМЛОГ) ON ПОКУПАТЕЛЬ. КОД_ЛОК=ДОГОВОР. КОД_ПОК) ОМ ТОВАР. КОД_ТОЗ=ПОСТАВКА_ПЛАН. КОД_ТОВ +WHERE (((ТОВАР.НАИМ_тов)=%[Наименование тоеара]3в));
password:unwrapQ4 usernamerNVP
Рис. 12.13. Содержимое IDC-файла, созданного при экспорте запроса Заказано
Очевидно, что просмотр страниц формата IDC/HTX через браузер возможен только после размещения файлов с расширениями idc и htx на Web-сервере, т. к. только в момент получения запроса от браузера сервер выполняет запрос к базе данных, формирует HTML-страницу и передает ее браузеру.
Экспорт объектов в Web-страницу формата ASP При экспорте в формат ASP создается файл с расширением asp. В соответствии с указаниями, сохраненными в этом файле, US-сервер создает HTMLстраницу, которая может отображаться любым браузером клиента. Если ASP-файл содержит сценарий, написанный в VBScript или Jscript, процессор сценариев сервера выполняет его. HTML-страница, созданная из файла формата ASP, предоставляет пользователю самые новые данные из базы и доступна только для чтения.
Глава 12. Публикация данных в Интернете и корпоративной сети
473
Для того чтобы экспортировать объект в Web-страницу формата ASP, выполните следующие действия. 1. В окне базы данных выберите имя таблицы, запроса, которые нужно экспортировать, и выполните команду меню Файл|Экспорт (File|Export). 2. В окне Экспорт объекта в списке Тип файла выберите из списка пункт Microsoft Active Server Pages (*.asp). 3. В поле Папка выберите диск и папку, в которой будет сохранен результат экспортирования. В списке Имя файла по умолчанию записано имя экспортируемого объекта, при необходимости его можно заменить. 4. Нажмите кнопку Экспорт. При экспорте в формат ASP флажки Сохранить формат (Save Formatted) и Автозагрузка (Autostart) недоступны. 5. В диалоговом окне Настройка вывода файлов ASP (рис. 12.14) введите в поле Шаблон HTML путь к используемому шаблону HTML и задайте значения в полях Сведения об источнике данных ODBC, к которому н>жно подключаться в момент получения сервером текущих данных для HTML-страницы. Аналогично экспорту в формат IDC/HTX, в поле название источника вводится имя DNS системного типа.
Настройка вывода файлов ASP Шаблон HTML:
D: \TEST\PROBA .НТМ
Обзор.
. Сведения об источнике данных • ! „___„„_„.„.._ название источника: DSM_SD_2004
г
~
вход под именем:
JNVP
пароль;
unwapCK
Вывод файпое ASP адрес (LJRL) сервера;
http;\\myserv
период ожидания (мин): ;5
Рис. 12.14. Выбор для ASP-страницы шаблона, параметров связи с БД и свойств размещения на Web-сервере
6. В иоле адрес (URL) сервера (Server URL) введите http://. Имя сервера — это сетевое имя Web-сервера, на котором хранятся ASPфайлы.
474
Часть II. Многопользовательские технологии баз данных
7. В поле период ожидания (мин): (Session timeout) введите время ожидания в минутах. 8. Для обеспечения защиты объектов базы данных от несанкционированного доступа с Web-страниц введите в поля вход под именем и пароль имя пользователя и пароль. 9. Для того чтобы экспортированный в формат ASP файл был доступен пользователям Интернета, необходимо разместить его на Web-сервере.
Публикация Web-страниц Для предоставления доступа к статической или динамически генерируемой сервером Web-странице пользователям корпоративной сети или Интернета, необходимо сохранить соответствующие файлы форматов HTML, IDC/HTX или ASP на Web-сервере, таком как Microsoft IIS. Сохранять файлы на Webсервере можно только с разрешения Web-администратора организации или поставщика интернет-услуг, которые должны предоставить доступ к Webсерверу и его URL-адрес. При экспортировании объектов в формат документа HTML, IDC/HTX или ASP можно сразу сохранять соответствующие файлы на Web-сервере. Для этого в левой части окна Экспорт объекта на панели адресов нужно нажать кнопку Мое сетевое окружение в Windows ME/2000/XP или кнопку Webпапки в Microsoft Windows 98/NT 4.0 и дважды щелкнуть на ярлыке для папки на Web-сервере. Кроме того, сохранение файлов на Web-сервере можно выполнить вводом в поле Имя файла Web-адреса: http:///[<имя папки>]/<имя файла>. Если ярлык для папки на Web-сервере еще не создан, его необходимо создать. Создать новый ярлык для папки на Web-сервере можно и в окне Экспорт объекта. Для этого, если Access работает под управлением Windows ME/2000/XP, нужно выполнить следующие действия. 1. На панели адресов нажмите кнопку Мое сетевое окружение. 2. Дважды щелкните по значку Новое место в сетевом окружении или на кнопке Создать папку. 3. В окне мастера добавления в сетевое окружение щелкните на пункте Выберите другое сетевое размещение и нажмите кнопку Далее. 4. Введите URL-адрес Web-сервера в формате Шр://<ш«я сервера/[имя папки/>. 5. Введите имя ярлыка для Web-сервера и нажмите кнопку Готово.
Глава 12. Публикация данных в Интернете и корпоративной сети
475
Если Access работает под управлением Windows 98/NT 4.0, выполните следующие действия. 1. На панели адресов нажмите кнопку Web-папки. 2. Дважды щелкните по значку Добавление Web-папки. 3. Выберите параметр Создание ярлыка для Web-папки и нажмите кнопку Далее. 4. В окне мастера введите URL-адрес Web-сервера. 5. Введите имя ярлыка для Web-сервера и нажмите кнопку Готово. После того как ярлык будет успешно добавлен, его значок появится в папке Мое сетевое окружение. !v
Замечание
j
Web-сервер, на котором будут размещаться документы или папки, должен поддерживать протоколы Web Folders или WebDAV, вместе со службой IIS, либо протокол WEC (Web Extender Client) и расширения FrontPage. Кроме того к Web-серверу необходимо иметь доступ с правами чтения и записи. При работе в сетевой среде обратитесь к администратору сети и выясните, какие Webсерверы доступны и как с ними связаться.
Если страница сохранена в другой папке, можно переместить соответствующий файл и связанные файлы в папку на Web-сервере с помощью команды Access Файл [Сохранить как. Замечание При сохранении любой Web-страницы в папках Web-сервера Access автоматически сохраняет сопутствующие файлы, такие как рисунки, таблицы стилей, связанные файлы, а также папки, в которых содержатся эти файлы.
При работе с папками на Web-сервере следует иметь в виду, что стандартн ы м и корневыми каталогами Web-сервера являются \Webshare\Wwwroot для Personal Web Server и \Inetpub\Wwwroot для Internet Information Server. To есть если при создании ярлыка для папки на Web-сервере в URL-адресе указать только имя сервера, то будет создан ярлык для папки корневого каталога. Указанная в URL-адресе папка размещается в папке Wwwroot. Ранее сохраненные на локальном диске файлы Web-страниц могут быть скопированы в папки на Web-сервере. Создать ярлыки для папок на Web-сервере можно с помощью мастера в Моем сетевом окружении или Проводнике Windows. Для публикации файлов Web-страницы на сервере можно скопировать их, а также все сопутствующие файлы, например: рисунки, стили страниц, связанные файлы, и все папки, которые могут содержать эти файлы, в папку Web-сервера.
476
Часть II. Многопользовательские технологии баз данных
Откройте скопированную Web-страницу в браузере и убедитесь, что вспомогательные файлы обнаружены Web-сервером. Файлы форматов ASP или IDC/HTX подключаются к базе данных Access или Microsoft SQL Server. Для правильного использования файлов форматов ASP или IDC/HTX на Web-сервере база данных должна быть доступна пользователям этих страниц. При этом на Web-сервере должны быть выполнены следующие действия: П на компьютере, который будет Web-сервером, установлена соответствующая программа; П в корневом каталоге Web-сервера для Internet Information Server по умолчанию в \Inetpub\Wwwroot создана папка для хранения файлов форматов ASP или ЮС/НТХ; П скопированы в созданную папку файлы форматов ASP или IDC/HTX и вспомогательные файлы; П для папки, содержащей файлы форматов ASP или IDC/HTX, заданы необходимые свойства совместного доступа, включая свойство Выполнение для Internet Information Server и Выполнение сценариев для личного Webсервера; П скопирована база данных Access или Microsoft SQL Server в созданную папку или определено ее расположение в сети с помощью DSN системного типа с уникальным для локального компьютера именем (см. главу 10). Имя источника данных должно совпадать с именем, введенным в поле название источника в диалоговом окне Настройка вывода файлов ASP (или IDC/HTX). Создание новых источников данных возможно, если установлены необходимые драйверы ODBC; П если определена защита базы данных для источника данных ODBC, должна быть сохранена возможность доступа пользователей к этому источнику данных. Имя пользователя и пароль должны совпадать со значениями, вводимыми в поля вход под именем и пароль диалоговых окон Настройка вывода файлов ASP (или HTX/IDC), которые отображаются при экспорте объектов в файлы форматов ASP или IDC/HTX.
Страницы доступа к данным базы Страницы доступа к данным (Data Access Page) создаются как объекты и представляют собой специальный тип Web-страниц, подключенных к источнику данных OLE DB — базе данных Access или Microsoft SQL Server. Они позволяют пользователям по сети с помощью браузера Internet Explorer работать с данными базы в интерактивном режиме. Страницы доступа к данным обеспечивают просмотр, изменение, добавление и обработку данных, сохраняемых в базе.
Глава 12. Публикация данных в Интернете и корпоративной сети
477
Созданная в Access страница доступа к данным сохраняется в отдельном файле с расширением htm вне базы данных. В окне базы данных на вкладке Страницы (Pages) Access автоматически создает ярлык, используемый для перехода к соответствующему файлу HTML. Страницы доступа к данным Access используются подобно формам для ввода и редактирования данных, подобно отчетам Access — для отображения иерархически сгруппированных записей. Страницы могут использоваться в приложении базы данных наряду с формами и отчетами. Пользователь может открыть страницу доступа к данным и работать через нее с подключенной базой данных с помощью программы Microsoft Internet Explorer, или непосредственно в Access, не открывая базы данных. Для того чтобы страница работала правильно, база данных должна быть доступна пользователям этой страницы. Набор инструментов для создания страниц доступа к данным позволяет легко и быстро вывести базу данных в Web-пространство корпоративной сети или сети Интернет, что помогает пользователям быстрее и эффективнее обмениваться информацией. Для создания, просмотра и работы со страницами доступа к данным в Access, а также для работы с этими страницами в сети достаточно иметь браузер Microsoft Internet Explorer версии 5.01 с пакетом обновления SP2. Этот браузер поддерживает HTML, DHTML, CSS, XML, ActiveX, DirectX, большинство стандартов World Wide Web Consortium (W3C), а также соответствующие технологии Microsoft. В зависимости от используемой на компьютере версии Internet Explorer различаются режимы конструктора страницы доступа к данным. Следует заметить, что Internet Explorer 5.5 обеспечивает дополнительные возможности разработки и просмотра, а также более высокое быстродействие страниц. Если на странице доступа к данным должна обеспечиваться работа в интерактивном режиме со сводными таблицами, диаграммами и другими элементами управления, разработанными специально для использования в сетевых приложениях, требуется установка Web-компонентов Microsoft Office (Office Web Components). Web-компонентам и Microsoft Office называют набор элементов ActiveX, которые устанавливаются вместе с Microsoft Office XP.
Сохранение объекта как страницы доступа к данным Наиболее простым и быстрым способом создания страницы доступа к данным является возможность сохранить таблицу, запрос (на выборку, управляющий или перекрестный), форму или отчет из базы данных Access в виде
Часть Я. Многопользовательские технологии баз данных
4 78
страницы доступа к данным. Таблицы, представления, сохраненные процедуры или формы в проекте Access также могут быть сохранены в виде страниц доступа к данным.
Сохранение формы как страницы доступа к данным Откройте однотабличную форму СПРАВОЧНИК ТОВАРОВ (см. главу 6) в режиме формы. Выполните команду Файл|Сохранить как. В окне Сохранение (рис. 12.15) выберите в списке Как значение Страница доступа к данным. Сохранение Сохранение объекта Ферма 'СПРА,.,' в: СПРАВОЧНИК ТОВАРОВ
OK
Отмена
Как
J
Страница доступа к данным
Рис. 12.15. Сохранение формы как страницы доступа к данным
Укажите, где должна разместиться страница. Используя кнопку Мое сетевое окружение и ярлык Web-папки, можно сразу сохранить страницу на Webсервере. Созданная таким образом страница доступа к данным, открытая в браузере, представлена на рис, 12.16. Поле с фотографией товара, имеющее тип OLE-объекта, на странице доступа к данным остается пустым. Страница доступа к данным непосредственно связана-с базой данных. При просмотре в браузере отображается копия страницы. Поэтому любой отбор данных, сортировка и другие изменения способа отображения данных влияют только на копию страницы. Однако изменения в самих данных: изменение значений, добавление или удаление данных — сохраняются в исходной базе данных и поэтому доступны всем, кто просматривает страницу. Панель перехода по записям содержит кнопки, позволяющие осуществлять переход по записям, добавлять, удалять, сохранять, сортировать и фильтровать записи. Кнопка Восстановить запись позволяет отменить все изменения, внесенные в запись. Внимание Кнопка Справка в конце панели перехода по записям позволяет вывести справку по работе с данными на странице доступа к данным.
479
Глава 12. Публикация данных в Интернете и корпоративной сети
•Э СПРАВОЧНИК ТОВАРОВ - Microsoft Internet Explorer Файл
Правка
Вид Су
Избранное K
I ] .2"
V.
Сервис
Справка
у ' Поиск
"г Избранное ^jf Медиа
Щрес, #]0:\Те51\СПРАВОЧНИК ТОВАРА.htrn
V
1
Переход
СПРАВОЧНИК ТОВАРОВ Наименование jKopn/C MiniTower
Код Фотография roBsps
f~
Цена
Единица измерения
pl6,DOp. (ш'тц'ка
20,00%
Ставка НДС
TOBAP40F12
>
Товар сертифицирован Готово
.14
Мой компьютер Рис. 12.16. Страница доступа к данным, полученная сохранением формы
Сохранение очета как страницы доступа к данным В окне базы данных выберите отчет Договоры, созданный на основе данных многотабличного запроса (см. главу 8), и выполните команду Файл [Сохранить как. Отчет в режиме предварительного просмотра не может сохраняться как страница доступа к данным. Отчет на рис. 12.17 сохранил свой внешний вид и функциональность. На странице, так же как в отчете, предусмотрены группировка и вывод итоговых данных, маркер развертывания группы позволяет открыть список товаров, указанных в договоре. При сохранении формы или отчета как страницы доступа к данным элементы управления, поддержка которых не может быть обеспечена, игнорируются. К таким элементам относятся переключатели и наборы вкладок, списки
Часть II. Многопользовательские технологии баз данных
480
и поля со списками, которые содержат несколько столбцов, и некоторые другие. Рисунки в форме или отчете преобразуются в точечные рисунки и помешаются в папку Изображения. Подчиненные формы и отчеты из формы и отчета не преобразуются при выполнении команды Сохранить как. Включение их на страницу требует дополнительных действий. 3 Договоры_СД - Microsoft Internet Explorer Файл
Прэвкэ
Е^д
'•О
В
^бранное 5
,*.! М
Договор N2
Г»=-
СЕРВИС
^правка
S' * П***
•' Избранное
tjf Медиа
Д111
Покут1лте.!а> Компьютер маркет ИНН
778957651111
Банк
Мост
Адре£ Мпскэа, Тверская 34
Телефон
3123452345
763585097б32«53оМ7 Срок HIKI.WMI
Стониисть
Мм. (1,1(11 ИЯ
НДС
'
FDD 3,5
; ' 1,00
Монитор 17LG
2,00
5
.!
б 587,00р. штука
5,00%
Монитор 1TLG
3,00
5
:
6 587,00р штука
5,00%
FDD 15
3.00
5
И
Монитор 17LG
Особое внимание Ш
Договор №
'
100
•
6 537,00р. щтука
6,00%
ЗбЗ,ООр корсбка
363,00р. неробка
6,00%
ОБЩАЯ CVHHA:
Д222
Поктлтель Компьютер маркет
5,00%
от
Москва. Тверская 34
Телефон
29.12 ММ
8123452345
*£ Мой корльютер
Рис. 12.17. Страница доступа к данным, созданная сохранением отчета
При сохранении объекта, открытого в режиме таблицы, будет получена страница, элементы управления на которой упорядочены в виде таблицы.
Глава 12. Публикация данных в Интернете и корпоративной сети
481
Сохранение сводной таблицы как страницы доступа к данным Откройте запрос Отгрузка товаров в режиме сводной таблицы, созданной в главе 7. Сохраните эту сводную таблицу как страницу доступа к данным. Результатом будет страница, использующая Web-компонент сводной таблицы Microsoft Office (рис. 12.18). Вид этой страницы ничем не отличается от исходного. ,™Ч #WI
5 Отгрузи* товаров - Microsoft Internet Explorer Файл 1
Правка
О "'' ' '-
Вид *3
Избранное ;
3 *1 '*'>:
Сервис J"
Помск
[- §У
Справка
f
-..''Избранное *5* Медиа
^
(. '1~ ,"&
\J$ '
,..; Щ.
• Ссылки
Mfc
.у г рЗ Переход
Длв«с; j^Sj D:\Testl От грузка товаров.НЬт
Дот.1 отгруши по месяцлм | 2004
НАИМ ПОК- НОН_ДОГ" а Компьютер маркет
В Перспектива
.Обшие итоги
ДЗЗЗ Итоги .> ..." ."..«' - . '*.-. '.'.'.'Г .'.""'• Н.кшснов.ише товарл Сумма "Кол Сумма "Кол Сумма "Ко п Сумма "Кол Сумма "КсяСумма "Кол; 'CD-ROM Panasonic IDE ! 24 16 А 40 DIMM64MPC10Q ! 5 5 1 1 6 : FDD 3^5 ! 15 15 15 HDD Maxtor 20GB "It 8 8 3 3 1 1 "Зв. Карта Genius Liv £ 10 10 3 3 13 Монитор 17LG ! 12 7 19 4 4 23 СканерАсег 1 10 1 Значение: 19 |Д111
;
Д222
i
Итоги
т
_____.„_
„т__„.^,.^_„^_,
Итог; Сумма 'Количество отгружен?" Компонент стропи; Монитор 17LG Компонент столбца: Компьютер маркет - Итоги Фильтр: Дата отгрузки по месяцам = 2004
j
Рис. 12.18. Страница доступа к данным, созданная сохранением запроса
Если открыть объект в режиме сводной диаграммы и выполнить сохранение его как страницы доступа к данным, получим страницу, использующую Web-компонент сводной диаграммы Microsoft Office.
Режим автономного доступа к странице Если страница доступа к данным и связанная с ней база данных сохраняются на локальном компьютере, для просмотра ее в браузере необходимо обеспечить режим автономного доступа к странице. Для того чтобы установить режим автономного доступа к странице доступа к данным, подключитесь к Интернету. В меню Файл флажок Работать автономно должен быть снят. В меню Избранное выберите команду Добавить в
482
Часть II. Многопользовательские технологии баз данных
избранное. В диалоговом окне Добавление в избранное установите флажок Сделать доступной автономно.
Создание страниц доступа к данным Разработка страницы доступа к данным ведется в интерактивном режиме средствами, похожими на те, что используются при конструировании форм или отчетов, однако в разработке и но взаимодействии со страницами имеются значительные отличия. Могут быть созданы страницы различного типа. Одни страницы позволяют только просматривать информацию из баз данных, обеспечивая при этом их группировку, сортировку и фильтрацию. Другие обеспечивают не только просмотр актуальной информации, но и ее редактирование, удаление и добавление записей в базу данных,
Подключение страницы к базе данных При создании страницы из открытой базы данных Access или проекта Access, подключенного к базе данных Microsoft SQL Server, для нее автоматически определяется в качестве источника данных открытая база данных. Это может быть как локальная, так и сетевая база данных. Путь к этой базе д а н н ы х сохраняется в свойстве Строка подключения (Connection String) страницы доступа к данным, доступном в режиме конструктора. Если при разработке страницы доступа к данным база данных находилась на локальном диске, Access использует локальный путь, что делает невозможным подключение к данным страницы для пользователей сети. Чтобы сделать базу данных доступной по сети, ее необходимо переместить или скопировать в сетевую папку, доступную пользователям, и изменить значение свойства страницы Строка подключения (Connection String), указав сетевой путь (в формате UNC) к новому расположению. Обновление свойства Строка подключения (Connection String) каждой страницы в базе данных по отдельности неудобно. Если создать файл для сохранения сведений о подключении страницы, и на страницах, связанных с одним источником, ссылаться на этот файл, то при перемещении базы данных в другое место достаточно будет исправить сведения о подключении в файле. Файл, сохраняющий информацию о подключении, на который могут ссылаться разные страницы, называется файлом подключения донных (расширение ode — Office Database Connection). При открытии страницы доступа к данным, использующей файл подключения, на основе информации из этого файла выполняется подключение к базе данных. Создать страницу можно, не открывая базы данных. В области задач на панели Создание файла выберите пункт Пустая страница доступа к данным (Data Access Page). При этом открывается окно Выбор источника данных
Глава^2. Публикация данных в Интернете и корпоративной сети
483
(рис. 12.19). Если область задач не выведена на экран, выполните команду Файл|Создать (File|New).
Выбор источника данных Папка:
Мои источники данных
X
Wgl
..„> ^Jj * Сервис
одключение к SQL-серверу, ode ^+Подкпючение к новому источнику данных,ode Мои последние документы
?ш] Поставка, ode
Рабочий стоп
Мой компьютер __$ Мое сетевое экружение
Ммяфайпа: Тип файлов:
•
ж! , "" bee источники данных (*.ode; *, т [
Создать.
Открыть Отмена
Рис. 12.19. Окно подключения страницы к источнику данных
В этом окне можно создать новый файл подключения данных с расширением ode или выбрать для использования уже существующий. Создав файл подключения данных однажды, его можно использовать неоднократно при создании страниц доступа к данным, связанных с указанным в файле источником. Для выбора ранее созданного файла подключения данных нажмите кнопку Открыть. Файлы подключения данных по умолчанию сохраняются в папке Мои источники данных; нажав кнопку Обзор, можно выбрать другое место для их хранения. Для создания нового файла подключения данных дважды щелкните Подключение к новому источнику данных или нажмите кнопку Создать. Откроется окно Мастер подключения данных (рис. 12.20) со списком всех обнаруженных на жестком диске поставщиков OLE DB. Для подключения страницы к базе данных Microsoft SQL Server выберите соответствующую строку. Для подключения к другому источнику данных OLE DB выберите строку Дополнительно. Следует заметить, что выбор последней строки позволяет
484
Часть II. Многопользовательские технологии баз данных
подключить страницу как к базе данных Access, так и к базе данных Microsoft SQL Server.
Мастер подключения данных Мастер подключения данных Мастер поможет подключить удаленный источник данных.
Выберите тип источника данных, к которому нужно подключиться,
Отмена
Далее >
Рис. 12.20. Выбор типа источника для страницы доступа к данным
При выборе строки Дополнительно открывается окно Свойства связи с данными (Data Link Properties) (рис. 12.21). Определите в нем источник данных OLE DB, выбрав провайдера, обеспечивающего связь с создаваемым источником данных (вкладка Поставщик данных (Provider)), и определите параметры подключения к источнику данных — конкретной базе данных — на вкладке Подключение (Connection). При размещении базы данных на SQLсервере укажите имя или IP-адрес сервера. При размещении базы данных Access в сети укажите UNC-адрес. Для проверки подключения нажмите кнопку Проверить подключение (Test Connection). Более подробно вопросы подключения базы данных рассмотрены в главах 10 и //. В следующем окне, если необходимо, выберите базу данных в качестве источника и нажмите кнопку Далее. В окне, представленном на рис. 12.22, дайте имя новому файлу подключения данных и сохраните его, нажав кнопку Готово. Для файла можно указать описание или ключевые слова, которые затем можно использовать для выполнения поиска, нажав кнопку Сервис в диалоговом окне Выбор источника данных.
Глава 12. Публикация данных в Интернете и корпоративной сети
485
Свойства связи с данными Поставщик данным
Подключение j Дополнительно | Все
Укажите сведения для подключения к. данным Access: 1. Выберите или введите имя базы данных: (ОЛПоставка ToeapoB.mdb 2. Введите сведения для внода в базу данных: Пользователь: (Admin
Пустой пароль
I51 Разрешить сохранение пароля
Проверить подключение ]
Отмена
Справка
Рис. 12.21. Окно определения источника данных
Для страницы, создаваемой вне базы данных, после подключения к источнику данных открывается единственный доступный для нее в этом случае режим создания — режим конструктора. При этом открывается окно Список полей (Field List), в котором отображаются имя подключенной базы данных и объекты, доступные при конструировании страницы (рис. 12-23). Ссылка на файл подключения данных хранится в строке свойств страницы Файл подключения (Connection File). Для того чтобы при создании страниц доступа к данным базы данных или проекта Access использовать файл подключения данных, нужно выбрать его в окне Параметры на вкладке Страницы (рис. 12.24). Окно Параметры открывается соответствующей командой меню Сервис. Даже если файл подключения будет указывать на текущую базу данных, использование файла позволит при перемещении этой базы не менять сведения о подключении на всех страницах, а подкорректировать только один файл. Создавая страницы в базе данных, можно подключать их к разным источникам данных. Таким образом через страницы доступа к данным может
Часть II. Многопользовательские технологии баз данных
486
быть организована работа с данными из различных источников в одном приложении. Мастер подключения данных Сохраните файл подключения данных и завершите работу Введите имя и описание файла подключения данных, а затем нажмите кнопку 'Готово" для его сохранения. Имя файла; juments and SettJngs\WVP\MoH документы\Мои источники данных\Поставка,с^с
Обзор
Г" Сохранить пароль в файле Описание: (Чтобы помочь другим пользователям понять, к чему выполняется подключение)
Поиск ключевых слов:
Рис. 12.22. Окно сохранения файла подключения данных Список полей L^JJ '^ ^Добавить на страницу Ч^ 0;\Поставка TOBapoB.mdb ;-! ipj Таблицы чл |Щ| ДОГОВОР + [Г] НАКЛАДНАЯ + [ГЦ Накладные склада :
^ [Г] ОТГРУЗКА +• Q Отгрузка полная + fJ3 Отгрузка склада +, [Л] ПОКУПАТЕЛЬ +! ГЦ ПОСТАЕКА_ПЛАН +: [3 Стоимость накладной
.
1+1- ^3 ТОВАР
+ J Запросы
Рис. 12.23. Список полей подключенного источника данных
Глава 12. Публикация данных в Интернете и корпоративной сети
487
Параметры Другие
Международные Общие
[
Правка и поиск
Проверка ошибок ]
Клавиатура
Орфография
Режим таблицы
Таблице! и запросы Формы и отчеты Страницы
Стандартные свойства конструктора 0_тсгуп для раздела:
ДбЗбсм
Дополнительный цвет строк: :whitesmoke
.
,,,!
Стиль раздела заголовка;
BACKGROUND-COLOR; steelblue; COLOR: white; FONT-WEIGHT: bold
Стиль раздела примечаний:
BORDER-TOP; steelblue Ipx solid; FONT-WEIGHT; bold
Стандартные свойства БД или проекта 'V Стандартная папка для страниц Папка для страниц; D:\Test V
Обзор,.,
Стандартный файп подключения Файл подключения: 5 \NVP\Mon док у мент Ы\Мои источники данмых\Поставка.о^с
Обзор,,,
II
Отмена
I
При]денить
Рис. 12.24. Окно определения параметров страницы
В этом же окне указывается папка, в которой должны сохраняться страницы. Указывая на странице для подключения к источнику данных абсолютный путь к файлу базы данных, вы лишаете возможности других пользователей сети работать с этими страницами. Access при сохранении такой страницы выдает сообщение, напоминающее о том, что страница является средством доступа к данным базы с любого компьютера сети (рис. 12.25). Microsoft Office Access строка подключения для страницы содержит абсолютный путь. Это не позволит подключаться к данным страницы по сети. Чтобы иметь возможность подкпюченин по сети, измените строку подключения и укажите сетевой путь (в формате UNC). Г" |ояыие ие ПОК-ЭЗЫБ-ЭТЬ это предупреждение!
'•
Справка
Рис. 12.25. Сообщение при сохранении страницы
При просмотре страницы в режиме страницы можно определить, какая база данных является источником данных для нее. Для этого необходимо выпал-
488
Часть II. Многопользовательские технологии баз данных
нить команду Файл (Свойства страницы. На вкладке Состав в свойстве Строка подключения (Connection String) отображаются сведения об используемой базе данных. Список полей (Field List) позволяет добавлять поля таблиц и запросов на страницу доступа к данным. Для этого достаточно выбрать имя поля в списке и перетащить его на страницу. Каждое поле страницы поддерживает прямую динамическую ссылку, которая связывает страницу доступа с реальными данными в базе. Если необходимо изменить сведения о подключении страницы к базе данных, например, при изменении местоположения базы, на странице доступа к данным в режиме конструктора откройте Слисок полей (Field List) и щелкните на кнопке Свойства подключения для страницы. В контекстном меню выберите строку Подключение (Connection). В открывшемся окне Свойства связи с данными (Data Link Properties) укажите новые сведения о подключении страницы к базе данных.
Создание страницы доступа к данным мастером Одним из удобных способов создания страниц доступа к данным является использование мастера. Рассмотрим, как создавать страницы доступа на основе различных данных. Создание страницы доступа к данным одной таблицы В базе данных Access страница доступа к данным так же, как и форма или отчет, может быть создана с помощью мастера или в режиме конструктора. Создайте страницу доступа к данным для работы с таблицей ТОВАР с помощью Мастера автостраниц. Этот мастер, не вступая в диалог с пользователем, создает страницу на основе всех полей только одной таблицы. 1. Откройте базу данных "Поставка товаров". 2. В окне базы данных в списке Объекты выберите объект Страницы (Pages) и нажмите кнопку Создать (New). 3. В диалоговом окне Новая страница доступа к данным (New Data Access Page) выберите Автостраница: в столбец (AutoPage: Columnar). 4. Выберите таблицу ТОВАР, на данных которой должна быть основана страница, и нажмите кнопку ОК. Созданная мастером страница доступа к данным будет иметь вид, показанный на рис. 12.26. Мастер автостраниц создает на основе выбранного объекта базы страницу доступа к данным, содержащую все поля (кроме полей, в которых хранятся рисунки).
Глава 12. Публикация данных в Интернете и корпоративной сети
489
Внимание На панели перехода по записям доступны все кнопки. Эта страница позволяет изменять, добавлять и удалять записи из таблицы, а также производить фильтрацию записей по значению выделенного поля.
Код товара Наименование
Монитор 17LG
Цена Единица Ставка НДС ТОВАР 1 из 10
Панель перехода по записям
> И
VJK.
Кнопки перемещения по записям Кнопки изменения данным Кнопки сортировки и фильтрации
Рис. 12.26. Страница доступа к данным таблицы ТОВАР в режиме просмотра
Перейдите в режим конструктора. Введите название страницы и исправьте надписи полей, как показано на рис. 12.27, воспользовавшись средствами, аналогичными тем, что были в конструкторе форм. Щелкнув на значке списка в разделе Заголовок: ТОВАР, отметьте флажок в строке Подпись. Для создания в открывшемся разделе новой надписи используйте соответствующую кнопку панели элементов. Добавьте в таблицу ТОВАР поле с типом данных Логический, в котором будет храниться пометка о прекращении поставок. Обновите список полей, щелкнув по соответствующей кнопке на его панели. Новое поле ПОМЕТКА отобразится в списке полей. Перетащите это поле в раздел Заголовок: ТОВАР. Добавьте новую запись в таблицу, для чего нажмите на панели перехода по записям кнопку Новый /;** \. Для завершения операции добавления и сор-н
хранения записи в таблице нажмите кнопку Сохранить (\*?,щ. Можно отменить начатую операцию добавления записи, нажав кнопку Отменить но только до выполнения команды сохранения записи. Заметим, что поле, не обведенное рамкой, не будет выделяться на странице в режиме добавления записи, что неудобно в работе. Для удаления записи в таблице ТОВАР нажмите кнопку Удалить
Часть II. Многопользовательские технологии баз данных
490
Слисок товаров фирмы Код товара Наименование товара Цена
6587,DOD,
Единица измерения
(штука
Ставка НДС
Тоо%^
Поставки прекращены:
f?
ТОВАР 1 ИЗ 10
Рис. 12.27. Страница доступа к данным таблицы ТОВАР после редактирования в режиме конструктора
Сохраните созданную страницу доступа к данным. Если в параметрах страницы указана стандартная папка для сохранения страниц (см. рис. 12.24), Access предлагает сохранить страницу в этой папке, в противном случае — в текущей папке. Страница сохраняется в виде HTML-файла, имеющего расширение htm. Автоматически Access добавляет ярлык для этой страницы в окно базы данных. Чтобы узнать путь к файлу страницы, наведите указатель на ярлык страницы в окне базы данных и подождите появления всплывающей подсказки. Закройте Access. Откройте вновь созданную страницу в Internet Explorer, например, дважды щелкнув по файлу страницы в Проводнике Windows. Убедитесь, что и в среде браузера страница позволяет производить просмотр, в том числе с применением фильтра, изменение, добавление и удаление записей в таблице подключенной базы данных. Можно открыть страницу в режиме страницы из меню Microsoft Access с помощью команды Фай л | Открыть (File|Open). При этом Access открывает страницу без открытия базы данных, к которой подключена страница, поэтому мастера, построители и надстройки будут недоступны. Использование фильтра на странице доступа к данным При просмотре на странице данных из больших таблиц удобно сокращать число отображаемых записей. 1. Для того чтобы отобрать для вывода записи о товарах, поставка которых прекращена, установите курсор в соответствующее поле и щелкните по кнопке Фильтр по выделенному (Filter By Selection) (L^J) на панели перехода по записям. В результате будут отобраны только нужные записи. Отфильтрованные записи также можно изменять, добавлять и удалять из таблицы.
Глава 12. Публикация данных в Интернете и корпоративной сети
491
2. Для того чтобы отобрать записи о товарах с нужным значением станки НДС, установите курсор в поле Ставка НДС и снова щелкните по кнопке Фильтр по выделенному (Filter By Selection). Новые условия фильтрации применяются к группе записей, выбранных по предыдущему фильтру. 3. Щелкните по значку Кнопка фильтра (LLJ), чтобы отменить фильтрацию. После удаления фильтра вновь выведутся все записи. 4. Для повторного применения фильтра снова щелкните по значку Кнопка фильтра. Фильтр будет потерян только при переходе к фильтрации по новому полю. 5. Отсортируйте записи о товарах по цене. Для сортировки данных на странице доступа к данным установите курсор в поле Цена, которое будет использоваться для сортировки записей. Для сортировки по возрастанию П^Т] нажмите кнопку Сортировка по возрастанию (Sort Ascending) (LEil). Для сортировки по убыванию нажмите кнопку Сортировка по убыванию (Sort [zTI Descending) (1411). Создание страницы доступа к данным нескольких таблиц Создайте страницу доступа к данным для работы со списками договоров, используя таблицы ДОГОВОР, ПОКУПАТЕЛЬ, ПОСТАВКА_ПЛАН и ТОВАР. Воспользуйтесь мастером дли создания основы такой страницы. 1. Начните создание страницы с двойного щелчка мышью на строке Создание страницы доступа к данным с помощью мастера (Create data access page by using wizard) в рабочем пространстве объектов Страницы (Pages). 2. В окне мастера выберите таблицы ДОГОВОР, ПОКУПАТЕЛЬ, ПОСТАВКА_ПЛАН и ТОВАР и необходимые поля.
Внимание Поля объектов OLE не могут размещаться на страницах доступа к данным. Поле оото с таким типом данного даже не отображается в списке полей таблицы ТОВАР.
3. Для того чтобы спецификация договора открывалась при щелчке на маркере развертывания, добавьте уровень группировки по полю ном_дог. Для создания одного уровня группировки мастер предлагает выбор только одного поля, хотя в данном примере, как мы выясним позже, к полям группировки неплохо бы отнести все необходимые поля таблицы ДОГОВОР И ПОКУПАТЕЛЬ.
Внимание Добавление уровней группировки приводит к созданию страницы, доступной только для чтения данных из таблиц.
Часть //. Многопользовательские технологии баз данных
492
4. Далее выберите поля, по которым будет производиться сортировка записей на странице, и установите флажок Применить тему к странице? (Do you want apply a theme to your page?). Нажмите кнопку Готово (Finish). Откроются созданная страница в режиме конструктора и окно с большим списком тем. Каждая тема может быть просмотрена, а подходящая — выбрана для оформления страницы. Созданная мастером страница доступа к данным в режиме конструктора будет иметь вид, показанный на рис. 12.28.
Г СтраницаЗ : страница доступа к данным
УИК
Заголовок: ТОВАР-НОМ_ДОГ
КОД_ГКЖ; СУММА_ДОГ; HAMMJlOKi"'" АДРЕС J1OK: • НОМ_РСЧ: Мин. партия Количество СУММА_ПОСТ: Наименование Денз
:
:Стэвкз НДС Поставки
!
КнолкиПерехода: flOFOBOPWiz }М
4
AQfOBOPWiz |0 из |2
КнопкиПерехода : ТО8 АР-НОМ _ДОГ М ; •<
ТОВАР-НОМ_ДОГ|Оиз|2
V
Рис. 12.28. Страница в режиме конструктора, созданная мастером
5. Для перехода в режим просмотра страницы щелкните по кнопке панели инструментов Вид (View). Убедитесь, что редактировать данные на странице с группировкой невозможно.
Глава 12. Публикация данных в Интернете и корпоративной сети
493
Access при размещении на странице полей автоматически создает запрос SQL, который и становится источником ее записей. С помощью запроса на страницу из базы доставляются указанные в нем данные. На странице, созданной мастером, отображается по одной записи запроса. Основным средством мастера для организации записей запроса на странице является группировка. Для каждого уровня группировки на странице предусмотрена панель перехода по записям. Работа мастера страниц мало отличается от работы мастера отчетов. Еще раз заметим, что размещение на странице с помощью мастера полей из нескольких таблиц или многотабличного запроса, а также добавление уровней группировки делают невозможным редактирование данных на странице. Только страница, для которой источником записей является одна таблица и не применена группировка, позволяет изменять данные. 6. Доработайте страницу в режиме конструктора. Вид отредактированной страницы в режиме конструктора представлен на рис. 12.29.
Договоры фирмы : страница доступа и данным • Заголовок: ТОВАР-НОМ_ДОГ '
ДОГОВОР Дата заключения договора
ПОКУПАТЕЛЬ Код Номер расчетного счета if ',
"
Г" ~"
:
Общая сумма "
'"
Спецификация договора Срок поставки
Наименование товара
Количество
Ставка
КнопкиПереходэ: ТОБЙР-НОМ_ДОГ И
Ч
ТОВАР-НОМ_ДОГ JO из |2
и
Рис. 12.29. Доработанная страница в режиме конструктора
НДС
Стоимость
494
Часть II. Многопользовательские технологии баз данных
7. Переместите поля таблицы ПОКУПАТЕЛЬ в раздел Заголовок: ТОВАРНОМ_ЛОГ. Это позволит отображать все данные о договоре и при необходимости с помощью маркера развертывания открывать его спецификацию. Оформите раздел, как показано на рис. 12.29. (
Замечание
i
Чтобы выделить несколько элементов управления, достаточно очертить мышкой рамку вокруг них.
8. Для изменения вида маркера развертывания выберите в строке Src его свойств вместо значения Черный плюс/минус (Black Plus/Minus) (см. рис. 12.28) новое значение, например, Папка (Folder) ( I). 9. Чтобы записи о товарах одного договора (они образуют группу записей) отображались на странице списком, в конструкторе уберите раздел кнопок перехода по записям группы. На странице (см. рис. 12.28) он имеет имя Кнопки Переход а: ДОГОВОР\\Чг. Для удаления достаточно выделить этот раздел и нажать кнопку . 10. Для добавления строки подписей столбцов в списке товаров спецификации щелкните на стрелке в конце строки Заголовок: ДОГОВОР\¥1г и отметьте строку Подпись (Caption). В этом же меню можно добавить или убрать Кнопки перехода (Record Navigation), Верхний и нижний колонтитулы (Footer) и перейти к просмотру свойств уровня группы. 11. Щелкните на кнопке панели инструментов Вид (View). Страница с соответствующими доработками будет иметь вид, представленный на рис. 12.30.
ДОГОВОР
ДЩ
Дата заключения договора ПОКУПАТЕЛЬ Код
[Поэт
м" 02200*
Компьютер Адрес
[Мйскеа, Тверская 34
Номер расчетного счета I763585Q97632W5
Общ;.я сумма
Спецификация договора *
г~
ТОВАР-НОМJJOM Hi 3
J-
{
t
L3
И *"* ^К м_? *":
Рис. 12.30. Страница после доработки в конструкторе
Глава 12. Публикация данных в Интернете и корпоративной сети
495
12. Если установить курсор в одно из полей с информацией о договоре, станут доступными кнопки фильтра. Кнопки редактирования записей на этой странице всегда будут оставаться недоступными. 13. Щелчком мыши на маркере развертывания открывается спецификация договора (рис. 12.31).
if: Договоры фирмы
.ОГОВОР
|
Д111
Дата заключения договора
Код
11.02.2004
(Компьютер маэкет
ПОКУПАТЕЛ Ь fnooT™
Адрес
П^Йоа^ваТтТёоа^ая^""
Общая сумма [~
1 IOS 830.000
Спецификация договора Срок поставки 1
Наименование товара
Цена
Количество
C
™f"a
Стоимость
[Монитор 17LG
1
[FDD з,5
2
]Монитор17LG
. 3
н- 4
I FDD 3,5
I
363, DOp
3630,00р.
ТОВАР-НОМ_ДОГ 1 из З
Рис. 12.31. Страница, отображающая спецификацию договора Если необходимо, чтобы на странице отображался список всех договоров, уберите КнопкиПерехода: ТОВАР-НОМЛОГ. При этом запись каждого договора будет иметь маркер развертывания, позволяющий просмотреть список товаров. Откройте список полей, щелкнув по соответствующей кнопке на панели ИНСТрумеНТОВ. СПИСОК ПОЛеЙ ПОДКЛЮЧеННОЙ базы ДаННЫХ Поставка товаров, mdb представлен на рис. 12.32. Этот список отображает папки, .содержащие все таблицы и запросы, доступные в базе данных. Из списка полей можно перетаскивать на страницу одно поле, несколько полей из таблицы или запроса, а также таблицу или запрос целиком.
496
Часть И. Многопользовательские технологии баз данных
Кнопки отображения сведений о подключении страницы,обновления списка полей и добавления выделенного элемента в раздел База данных, к которой подключена страница -
Список полей !
Ц| * т) ^Добавить на страницу 0:\Поставка товаров, mdb
а Щ ДОГОВОР -^ Связанные таблицы Таблицы, связанные с таблицей ДОГОВОР
Поля таблицы ДОГОВОР
Е'01 НАКЛАДНАЯ !*> Ш ПОКУПАТЕЛЬ Ш-Щ ПОСТАВКА_ПЛДН Ц? НОМ_ДОГ Гд ДАТА^ДОГ [Г] КОД_ПОК Jfj СУММА _Ж>Г •±j Ц НАКЛАДНАЯ Ф -Щ| Накладные склада $ Ш ОТГРУЗКА Ш Щ Отгрузка полная V ЕВ Отгрузка склада >: ГП] ПОКУПАТЕЛЬ +, О ГЮСТАВКА_ПЛДН Si ЩО Стоимость накладной
rii Щ ТОВАР ^J Запросы
Рис. 12.32. Окно списка полей базы данных, доступных для размещения на конструируемой странице
При добавлении полей, определении уровней группировки на странице доступа к данным Access, используя существующие отношения, определенные между источниками записей, автоматически создает запрос, загружающий выбранные данные, и представляет их в виде модели данных страницы. Модель данных страницы можно отобразить на экране, щелкнув на кнопке Структура данных (Data Outline) на панели инструментов конструктора страницы доступа к данным, (рис. 12.33). Если поля добавляются из источников записей, не имеющих отношений. Access запускает мастер создания отношений, который помогает пользователю са(угостоятельно определить отношение. Модель данных показывает, какие источники записей используются для страницы и каким образом связаны данные. Список полей страницы отображает все содержимое подключенного источника данных. Значительно удобнее просматривать модель данных страницы. которая отображена в отдельном окне структуры данных и представляет только данные, добавленные на страницу. В окне структуры данных можно
Глава 12. Публикация данных в Интернете и корпоративной сети
497
выбирать объекты, задавать их свойства, определять и изменять связи между источниками данных, а также удалять поля и источники записей. ^Н Структура данным
т
х
И Модель данных
Уровень группировки
!т Ш ТОВАР-НОМ ЛОГ 5F Группа_ТОВАР-НОМЛОГ ; i^f Группа _НОМ_РСЧ [?f Группа_АДРЕС_ПОК
Поля уровня группировки
:
[?f Группа_НАИМ_ПОК L? Группа_СУММАЛОГ
. Г^ Группа _КОД_ПОК L [? Группа ЛАТА ЛОГ
Источник записей страницы
-НИ
.
ЛЛГ»ЛГЬЛГМ L I -
Ц] ДАТА ЛОГ
Е код.пок ; -Я СУММА лог : -Ц НАИМ_ПОК Ш ДДРЕС.ПОК
: ИЗ НОМ_РСЧ . Щ СРОК^ПОСТ
-..Ц] кол_пост ГП НАИМ_ТОВ И ЦЕНА Я
СТАБКА_НДС
гд СУММА^ПОСТ Рис. 12.33. Модель данных страницы
Создание страницы доступа к данным в режиме конструктора 1. Создайте страницу доступа к данным для просмотра, ввода и редактирования записей о заказанных в договорах товарах. Данные о покупателе и товаре представьте не ключевыми полями из таблиц ДОГОВОР и ПОСТАВКА_ГШАН, а наименованиями из связанных таблиц ПОКУПАТЕЛЬ и ТОВАР. Используйте режим конструктора. 2. В окне со списком страниц открытой базы данных дважды щелкните на строке Создание страницы доступа к данным в режиме конструктора (Great data access page in Design view). 3. Откройте список полей базы данных поставка товаров.mdb, щелкнув на соответствующей кнопке панели инструментов (рис. 12.32). Подключение
498
Часть II. Многопользовательские технологии баз данных
базы данных выполняется автоматически, т. к. создание страницы было начато в ее окне. 4. Выделите в списке полей таблицу ПОСТАВКА_ПЛАН и перетащите ее на страницу в несвязанный раздел, обозначенный заголовком с указанием Перетащите мышью поля из списка и поместите их на страницу (Drag fieldsfrom the Field List and drop them on the page). В окне Мастер макета (Layout Wizard) отметьте флажок В столбец (Columnar). На странице будет создан раздел заголовка, в котором разместились все поля таблицы, и раздел кнопок перехода. При добавлении поля Access автоматически создает элемент управления подходящего типа, основанный на типе данных, хранящихся в поле. 5. Добавьте из таблицы ДОГОВОР поле код_пок, а из таблицы ПОКУПАТЕЛЬ НАИМ_ПОК. Включение поля ксд_пок из таблицы ДОГОВОР позволит конструктору найти нужные связи в схеме (ПОСТАВКА_ПЛАН.НОМ_ДОГ ДОГОВОР.ном_дог и ДОГОВОР.код_пок — ПОКУПАТЕЛЬ.код_пок) и автоматически использовать их при создании запроса. Пользователю не надо будет самому указывать отношения — связь между таблицами. Замечание
j
Если включить только поле из таблицы ПОКУПАТЕЛЬ, выведется окно для определения связей пользователем, но поскольку таблицы ПОКУПАТЕЛЬ и ПОСТАВКА_ПЛАН непосредственно не связаны, установить связь не удастся.
6. Удалите поле код__пок со страницы. 7. Откройте модель данных страницы, щелкнув на значке Структура данных (Data Outline) панели инструментов. Здесь представлены все источники записей, которые используются для страницы, и их связи. Информацию о связи можно получить, воспользовавшись командой контекстного меню Отношения (Relationships) для строки ПОКУПАТЕЛЬ или ДОГОВОР (рис. 12.34). При добавлении поля на страницу Access автоматически добавляет его в модель данных страницы, отображаемую в окне Структура данных (Data Outline). 8. Для того чтобы при добавлении новых записей было удобно вводить значения в поля, по которым таблица ПОСТАВКА_ПЛАН связана с главными таблицами ДОГОВОР и ТОВАР, замените поля номер договора — ном_дог и код товара — код_тов на поля со списком. Каждый список создайте на основе соответствующей таблицы. Включите в поле код_тов не только ключевое поле, но и поле с названием товара. Для полей со списками рассматриваемого примера должно быть установлено свойство, не допускающее ввода значений, отличных от включенных в список. Нельзя вводить подчиненные записи, если для них отсутствует связанная главная запись, не нарушая целостности.
Глава 12. Публикация данных в Интернете и корпоративной сети
499
Структура данных ОЩ Модель данных -
D ПОСТАВКА_ПЛАН - Ш ГЮСТАВКА_ПЛАН
ff^ ном_дог - i=$ КОД_ТОВ "f? CPOKJ1OCT
т мин_пост !Т кол_пост - Щ ДОГОВОР
ff код_по
Отношения,
ft; НАИМ_ПО
Удалить
!Т НОМ_РСЧ — i -
Свойства...
Щ ТОВАР *Я? КОД_ТОБ1 Т
ЦЕНА
?1? Выражение! П KOД_TOB_Li£tRo^vsoutce "-'. dP KOfl_TOB_ListRowsource
Т код_тов ft; HAMMJOB
™ НОМ^ДОГ
Рис. 12.34. Модель данных страницы Ввод и корректировка спецификаций договоров
Замечание Если поля со списком были определены при конструировании таблицы, они будут представлены в таком виде на странице автоматически.
9. Для создания поля со списком щелкните на соответствующей кнопке на панели элементов. Отвечая на вопросы мастера, несложно создать эти поля. Подробно работа этого мастера была рассмотрена при создании полей со списком в формах. 10. Разместите поля таблицы, как показано на рис. 12.35. i 1. На странице доступа к данным, так же как в форме, могут быть созданы вычисляемые поля. Создайте вычисляемое поле Стоимость, указав в ка17
. 835
Часть II. Многопользовательские технологии баз данных
500
честве источника данных в его свойстве Controisource выражение: =КОЛ ПОСТ*ЦЕНА.
Ввод и корректировка спецификации договоров : страница доступа к данным
Договор № Дата заключения договора
Заголовок: ПОСТАВКД_ПЛАН ^
Покупатель Счет
Адрес
Товар
Тппг
поставки.
тн
-
П
?РТ"
Цена:
Количество
Стоимость
ВНИМАНИЕ! '
При добавлении новой записи обязательно заполните не подсвеченные поля КнопкиПерехода; ПОСТАБКА_ПЛАН
И
ПОСТАБКД_ПЛАН |0из |2
И
V
Рис. 12.35. Страница доступа к данным в режиме конструктора
12. Добавьте на страницу бегущую строку и запишите в нее: "Внимание! Длина пробега текста строки будет равна ширине элемента управления". 13. Откройте страницу в браузере и убедитесь, что созданная из нескольких таблиц страница допускает редактирование (рис. 12.36). Добавьте в таблицу ПОСТАВКА_ПЛАН несколько записей. 14. Для перехода к созданию новой записи щелкните на кнопке Новый на панели кнопок перехода по записям. Заполните поля Договор № и Товар, выбрав нужные значения из списков, и Срок поставки. Эти поля составляют ключ таблицы и должны обязательно заполняться при добавлении записи. Введите количество заказываемого товара и минимальную партию поставки. Щелкните на кнопке Сохранить ( •...#) на панели кнопок перехода. После этого в записи отобразятся: дата заключения договора, наименование, адрес и счет покупателя, связанного с договором, а также цена товара и вычисленное значение стоимости. Запись может быть сохранена и при переходе к другой записи на
Глава 12, Публикация данных в Интернете и корпоративной сети
странице. Кнопка Отменить сохранена.
501
) доступна до тех пор, пока запись не
'3 Ввод и корректировка спецификаций договоров - Microsoft Internet Explorer Файл
Правка
Вид О
Избранное Э :'й
'>'•
Сервис Поиск
>•"
L,
Справка '>V Избранное ф Медиа
дрес^ \&\ D:\Tesl:\BBOA новых договоров.htm
^&
(''i -
» :
; Ссылки
. У i jjrj Перехол
Договор №
ДШ Дата заключения договора \
11.02.2004
Покупатель Адрес
| Москва, Тверская 34
Гппн
Тоеар
поставки
Мин.
паптия
Счет
Количество
Монитор 17LG
(76358939763264
Цена; "б537,00р.
Стоимость |
656 700,00р.
ВНИМАНИЕ!
При добавлении новой записи обязательно заполните не подсвеченные поля ПОСТАВКА ПЛАН 1 из 19 Мой компьютер
Рис. 12.36. Страница для просмотра, редактирования и ввода новых записей в таблицу ПОСТАВКА ПЛАН
Режим ввода для страницы доступа к данным Для страницы доступа к данным, так же как для формы, может быть установлен режим ввода данных. Этот режим открывает страницу только для добавления новых записей. Ранее введенные записи недоступны для просмотра. Откройте страницу доступа к данным в режиме конструктора, щелкните правой кнопкой мыши и выберите в контекстном меню Свойства страницы. На вкладке Данные для свойства DataEntry выберите значение истина. Перейдите в режим просмотра данных и убедитесь, что страница обеспечивает только ввод новых записей.
502
Часть II. Многопользовательские технологии баз данных
Создание страниц с многоуровневой группировкой Страницы доступа к данным часто используются для публикации объединенных и сгруппированных сведений, хранящихся в базе данных. Например, для рассматриваемой базы данных можно создать страницу, которая позволит просматривать договоры покупателей, раскрывать списки накладных, выписанных по договорам, и списки товаров, отгруженных по этим накладным. С помощью индикаторов развертывания можно перейти от общего списка покупателей к списку заключенных договоров, и далее к подробностям по отгрузкам отдельных товаров по каждому договору. Страница доступа к данным может также содержать кнопки панели инструментов, позволяющие сортировать и фильтровать данные, а также добавлять, редактировать и удалять данные на некоторых или всех уровнях группировки. На странице доступа к данным с группировкой каждая группа может содержать панель перехода по записям, расположенную в нижней части развернутой труппы. Создайте страницу доступа к данным, используя средства конструктора. 1. Дважды щелкните в окне списка страниц открытой базы данных на строке Создание страницы доступа к данным в режиме конструктора (Creat data access page in Design view). 2. Откройте список полей, щелкнув по соответствующей кнопке панели инструментов. 3. Выделите в списке полей таблицу ПОКУПАТЕЛЬ и добавьте на страницу ее поля НАИМ_ПОК и код_пок. Выделите таблицу ДОГОВОР и добавьте на страницу ее поля ном_дог и ДАТА_ДОГ. На вопрос мастера о макете раздела выберите Ленточный. Из таблицы НАКЛАДНАЯ добавьте поля НОМ^НАК, код__ск, ДАТА_ОТГР, из таблицы ОТГРУЗКА — код_тов, КОЛ__ОТГР. Для поля код тов мастер перейдет к созданию поля со списком. Укажите, что список должен создаваться на основе таблицы ТОВАР и включать поля с кодом и наименованием товара. Обратите внимание, что по мере добавления данных из таблиц заголовок все время обновляется. После добавления всех нужных полей он получит имя Заголовок ОТГРУЗКА. 4. Для того чтобы сгруппировать записи по накладным, создайте уровень группировки по полю ном НАК. Выделите его и щелкните на панели инструментов по кнопке Группировать по таблицам (Group by Table) (1 • I) В результате в заголовке группы НАКЛАДНАЯ разместятся все поля соответствующей таблицы, добавленные на страницу.
Глава 12. Публикация данных в Интернете и корпоративной сети
503
5. Для создания уровня группировки по договорам выделите поле ном_дсг и щелкните на кнопке Группировать ло таблицам (Group by Table). Для создания уровня группировки по покупателям выделите поле код_пок и щелкните на кнопке Группировать по таблицам (Group by Table). Удалить уровень группировки можно, щелкнув на кнопке Понизить уро) в поле группировки. Кнопка Повысить уровень (Рго-
вень (Demote) (
mote)
) приводит к созданию ноной группы.
Отгрузка товаров покупателям : страница доступа и данным
Отгрузка товаров покупателям Подписи: ПОКУПАТЕЛЬ
Заголовок: ДОГОВОР т Ш
Подписи: НАКЛАДНАЯ
[Номер накладной Кодскпада
'Дата отгрузки
Заголовок: НАКЛАДНАЯ •*
|в Подписи: ОТГРУЗКА
Заголовок: ОТГРУЗКА
КнопкиПерехода: ОТГРУЗКА '
N
4
J У# V 0?1
ОТГРУЗКА |0-|1из|2
КнопкиПерехода: НАКЛАДНАЯ 14
А
НАКЛАДНАЯ |0-[1 из |2
КнопкиПерехода: ДОГОВОР И
<
ДОГОВОР |0-|1 из |2
КнопкиПерехода: ПОКУПАТЕЛЬ И
ПОКУПАТЕЛЬ|0-|1из|2
Н X
Z|
Рис. 12.37. Страница с уровнями группировки в режиме конструктора
Часть II. Многопользовательские технологии баз данных
504
6. Оформите подписи уровней группировки. При выборе ленточного макета раздел подписей группы автоматически включается на страницу. Чтобы самим включить в макет страницы подпись уровня, отметьте соответствующую строку в списке, открываемом кнопкой в заголовке уровня. 7. В окончательном виде сконструированная страница с тремя уровнями группировки представлена на рис. 12.37. 8. Перейдите в режим просмотра страницы (рис. 12.38). С помощью индикаторов развертывания перейдите от общего списка покупателей к списку заключенных договоров, и далее к подробностям по отгрузкам товаров по договору.
*£ Отгрузка товаров покупателям
Отгрузка товаров покупателям ПОКУПАТЕЛЬ | Компьютер маркет Перспектива
Номер договора
Дата заключения
I
12.12.2002 Номер накладной Код склада
Дата отгрузки
Н002 IHQQ3
СО]
Товар
Количество отгружено
ОТГРУЗКА 1-2 из 2 I
НАКЛАДНАЯ 1-2 из 3
f^iis™ И
4
ДОГОВОР 1-2 ИЗ 4 ПОКУПАТЕЛЫ-2из6
>
I
Рис. 12.38. Страница с уровнями группировки по покупателям, договорам и накладным
Глава 12. Публикация данных в Интернете и корпоративной сети
505
9- Убедитесь, что на странице есть возможность просмотра, добавления, удаления и корректировки данных, представленных на всех уровнях. Очевидно, что добавление записи возможно только при размещении на странице ключевых полей таблицы. 10. Выполните сортировку по любому из полей любой группы. Для этого нужно щелкнуть на поле и затем на кнопке сортировки на панели перехода по записям. 11. Подпись в заголовке окна открытой страницы Отгрузка товаров покупателям введена в свойство страницы Title на вкладке Другие (More). Имя ярлыка, ссылающегося на файл, в котором сохраняется страница, отображается в заголовке окна страницы в режиме конструктора и может отличаться от имени файла. Если на странице имеются дополнительные элементы, сохраняемые в файлах, например, рисунки, по умолчанию они помешаются во вспомогательную папку. По умолчанию вспомогательной папке присваивается имя, состоящее из имени страницы доступа к данным, точки "." и слова files. Режим добавления, удаления и редактирования данных группы Для каждого уровня группировки конструктор по умолчанию устанавливает свойства, допускающие добавление, удаление и редактирование данных группы. Отменить или снова установить режим добавления (AllowAdditions), удаления (AllowDeletions) или редактирования (AllowEdits) данных в группе можно, открыв через контекстное меню окно Свойства уровня группы (GroupLevel) и изменив значения соответствующих свойств. При большом числе записей в группе целесообразно ограничить число одновременно выводимых на странице записей. Устанавливается это число в свойстве группы DataPageSize. По умолчанию свойство принимает значение Все. При установке любого числового значения на панели перехода по записям становятся доступными кнопки перемещения. Работа с гиперссылками на страницах доступа к данным В Access гиперссылки могут храниться в полях таблиц базы данных и элементах управления форм. Гиперссылки можно также добавлять в элементы управления отчетов. Однако при просмотре отчета в Microsoft Access гиперссылки работать не будут. Для их использования отчет необходимо вывести в формате Word, Microsoft Excel или создать на их основе страницу в формате HTML. Самым естественным образом гиперссылки вписываются на страницы доступа к данным. Однако гиперссылки, сохраненные в полях базы, на страницах доступа к данным не работают, если только на эти поля не сделаны ссылки в связанных гиперссылках страниц. Гиперссылки в полях должны быть записаны как URL- или UNC-адреса. Связанная гиперссылка может быть присоединена также к текстовому полю, содержащему адрес.
506
Часть II. Многопользовательские технологии баз данных
На страницах доступа к данным гиперссылка хранится в объекте Гиперссылка (Hyperlink).
Создание гиперссылки на другую страницу базы данных 1. Откройте одну из созданных ранее страниц доступа к данным, например, Покупатель, в режиме конструктора. 2. Щелкните на кнопке панели элементов Гиперссылка (Hyperlink) и вставьте ее в нужное место страницы. 3. В диалоговом окне Добавление гиперссылки (Insert Hyperlink) в разделе Связать с (Link to) щелкните на пункте страницей в базе данных. 4. В поле Текст (Text) введите текст, который должен отображаться на странице. Если оставить это поле пустым, то Access в качестве текста будет выводить имя ярлыка страницы, которую мы выберем для создания на нее ссылки. Ярлык содержится в окне базы данных и ссылается на файл со страницей. 5. Нажмите кнопку Подсказка (Screen to) и введите текст, который должен появляться при наведении указателя мыши на гиперссылку. Если не вводить подсказку, Access в качестве подсказки будет показывать адрес гиперссылки — адрес размещения страницы. 6. Выберите в списке страницу доступа к данным, ссылку на которую нужно создать, например, страницу Договоры. На странице доступа к данным будет создан элемент управления Гиперссылка (Hyperlink). 7. Чтобы проверить действие этой ссылки, переключитесь в режим страницы и щелкните на гиперссылке, которая отображается именем Договоры. Access откроет страницу в Web-браузере. 8. Создайте на странице Договоры в разделе подписей гиперссылку на страницу Покупатель. 9. Закройте базу данных и Access. Откройте Internet Explorer и в нем страницу Покупатель. Щелкнув по гиперссылке Договоры, перейдите на соответствующую страницу. По гиперссылке на этой странице вернитесь на страницу Покупатель. Переход между просмотренными страницами может быть осуществлен по кнопкам панели инструментов браузера Назад (Back) и Вперед (Forward). 10. Для добавления гиперссылки на страницу в сети щелкните в разделе Связать с (Link to) на значке файлом, веб-страницей (Existing File or Web page). Нажмите кнопку Интернет (Web-page), чтобы найти нужную страницу. После открытия нужной страницы переключитесь из Internet Explorer в Access. Заголовок и URL-адрес текущей открытой Webстраницы подставился в поля Текст (Text) и Адрес (Address). Если ссыл-
Глава 12. Публикация данных в Интернете и корпоративной сети
507
ка на интересующую вас страницу уже использовалась ранее, можно попробовать найти ее в списках, открывающихся кнопками просмотренные страницы {Browsed Pages).
Создание гиперссылки на существующий файл Рассмотрим создание на странице доступа к данным Покупатель гиперссылки на текстовый файл. 1. Откройте страницу доступа к данным Покупатель в режиме конструктора. 2. Выполните команду Вставка|Гиперссылка (Insert|Hyperlink). В открывшемся диалоговом окне Добавление гиперссылки (Insert Hyperlink) в pasделе Связать с (Link to) щелкните на пункте файлом, веб-страницей (Existing File or Web page). 3. В поле Текст (Text) введите текст, который должен отображаться на странице. Если нужно, введите подсказку. В противном случае будет отображаться адресная ссылка. 4. В поле Адрес введите путь к файлу. Чтобы не выполнять ввод вручную, можно просмотреть последние вставленные объекты и выбрать н у ж н ы й . Для этого нажмите кнопку последние файлы (Recent Files) и выберите объект из списка. Для поиска объекта на локальном или любом доступном сервере сети нажмите кнопку Поиск файла. 5. При необходимости перехода в определенное место текстового файла нажмите кнопку Закладка (Bookmark) и выберите закладку из списка. Закладки должны быть определены в файле заранее. 6. Переключитесь в режим страницы и щелкните по гиперссылке. Access откроет текстовый файл в Web-браузере.
Добавление гиперссылки для создания сообщений электронной почты 1. Откройте страницу доступа к данным Покупатель в режиме конструктора и с помощью кнопки панели элементов Гиперссылка (Hyperlink) начните создание гиперссылки. 2. В диалоговом окне Добавление гиперссылки (Insert Hyperlink) в области Связать с (Link to) щелкните на пункте электронной почтой (E-Mail). 3. В поле Текст (Text) введите текст: "Здесь вы можете отправить письмо поставщику". Если оставить это поле пустым, то Access в качестве текста выведет адрес электронной почты получателя. Если нужно, введите подсказку. 4. В поле Адрес эл. почты (E-Mail) введите адрес электронной почты получателя, например: [email protected]. Адрес можно также выбрать из списка Недавно использовавшиеся адреса электронной почты.
508
Часть II. Многопользовательские технологии баз данных
5. В поле Тема введите текст, который должен появляться в почтовом сообщении в поле Тема. 6. Переключитесь в режим страницы и щелкните по гиперссылке. Access откроет установленную почтовую программу, например, Outlook Express, и окно нового сообщения с заполненными полями Кому и Тема. В заголовке окна сообщения почтовой программы также отобразится текст темы.
Создание многостраничного Web-узла Интерактивные страницы доступа к данным базы позволяют пользователям работать непосредственно с документами и содержащейся в них информацией в среде браузера. При этом информация может быть размещена на любой компьютерной платформе и в любом месте — на локальном компьютере, в локааьной или корпоративной сети или Интернете. Используя гиперссылки, несложно органично вписать страницы доступа к данных! базы в общую паутину страниц предприятия. В качестве простейшего средства создания Web-узла может быть выбран Microsoft Word, включающий мастер Web-страниц. 1. Откройте Microsoft Word и на панели задач Создание документа в разделе Создание с помощью шаблона выполните команду Общие шаблоны. 2. В окне Шаблоны выберите вкладку Web-страницы (Web-Page) и щелкните на значке Мастер Web-страниц (Web-Page Wizard). 3. Следуя указаниям мастера: •
введите заголовок Web-узла;
• укажите папку для его размещения; •
мастер предложит разнообразные шаблоны, соответствующие наиболее часто используемым видам Web-страниц; выберите вертикальную рамку, которая позволит одновременно слева видеть ссылки — оглавление узла, а справа — содержимое выбранной страницы;
• добавьте существующие страницы, созданные в примерах книги, на Web-узел, и, если необходимо, предусмотрите названия новых пустых страниц, адреса которых могут быть изменены на странице позже; • если необходимо, измените имена и порядок страниц в оглавлении Web-узла; • выберите тему для придания узлу нового вида (шрифта, маркеров, фона). 4. Доработайте открывшуюся страницу Web-узла: •
создайте рамки сверху и снизу — для ссылок на общую информацию;
• вставьте рисунки;
Глава 12. Публикация данных в Интернете и корпоративной сети
509
•
создайте гиперссылки, выбрав для их обозначения не только текстовые строки, но и рисунки;
•
связывая гиперссылки со страницами доступа к данным баз, можно указать режим открытия страниц: в новом окне, во весь экран.
Разнообразные и простые средства Word позволяют разработать страницы с современным дизайном. Таким образом можно обойтись без написания HTML-кодов при создании Web-страниц и формировании среды, в которой с помощью простой программы просмотра Web-страниц пользователь получает возможность работать в диапоговом режиме с актуальной информацией в базе данных. Контрольные вопросы 1. К каким базам данных может подключаться страница доступа к данным? 2. Какой интерфейс используется для доступа к данным базы через Webстраницы? 3. Какая версия Microsoft Internet Explorer необходима для работы со страницами доступа к данным? 4. Можно ли, не открывая базы данных, открыть в Access страницу доступа к данным? 5. Можно ли создать страницу доступа к данным, не открывая базы данных в Access? 6. Где отображается имя базы данных, к которой подключена создаваемая страница? 7. Как определить, к какой базе данных подключена открытая страница? 8. Можно ли через страницу доступа к данным не только просматривать данные в базе, но и изменять их? 9. Можно ли через страницу доступа к данным, содержащую уровни группировки, изменять данные в базе? 10. Можно ли изменять данные в базе через страницу, созданную мастером автостраниц на основе таблицы? 1 1 . Можно ли фильтровать данные в базе через страницу, созданную мастером автостраниц? 12. В каком окне добавляются или удаляются Раздел кнопок перехода, Раздел подписей, Примечание группы? 13. Где можно просмотреть все источники записей, которые используются для страницы, и их связи? 14. Можно ли через страницу доступа к данным, содержащую поля со списками, изменять данные в базе?
510
Часть II. Многопользовательские технологии баз данных
15. Может ли конструктор страниц разместить в заголовке группы псе поля таблицы, по полю которой выполняется группировка? 16. Может ли гиперссылка открывать документы Word и Excel? 17. В окне какой программы открывается страница доступа к данным по гиперссылке с другой страницы доступа к данным, открытой и Access? 18. Какое окно открывается при щелчке по гиперссылке, содержащей адрес электронной почты? 19. Как записывается URL-адрес Web-сервера с именем mysei-ver.finec.ni? Ответы 1. Базе данных Access или Microsoft SQL Server.
2. OLE DB. 3. Microsoft Internet Explorer 5.0 или более поздняя.
4. Да. 5. Да. 6. В Списке полей (Field List). 7. Выполнив команду Файл|Свойства страницы и открыв вкладку Состав. 8. Да.
9. Нет. Ю. Да. П. Да. 12 Сортировка и группировка. 13. В Списке полей на вкладке Страница. 14. Да.
15. Да, командой Группировать по таблицам.
16. Да. 17. Microsoft Internet Explorer. 18. Окно создания сообщения в почтовой программе. 19. http://myserver.finec.ru.
ЧАСТЬ РАЗРАБОТКА ПРИЛОЖЕНИЯ ПОЛЬЗОВАТЕЛЯ
Глава 13
Проектирование задач приложения Приложение пользователя, как правило, образуется объединением некоторого множества взаимосвязанных задач предметной области. Задача может быть определена как совокупность действий по формированию выходной информации на основе входной информации. Выходной информацией являются печатные документы, видеограммы, файлы, сообщения, содержащие результаты решения и имеющие определенное назначение в данной предметной области. Входная информация задачи представлена в виде данных входных документов, сообщений, файлов базы данных и входных параметров решения задачи. При реализации задач широко используются объекты Access: формы, запросы, отчеты, Web-страницы, позволяющие конечному пользователю, не являющемуся программистом, создавать приложения. Технология разработки названных объектов Access рассмотрена в предыдущих главах. Эти средства обеспечивают обработку таблиц базы данных и выполняют различные операции, которые необходимы для решения задачи и, как правило, с их помощью реализуется некоторая ее часть — подзадача, Для того чтобы решить задачу пользователя средствами СУБД, необходимо сначала спроектировать эту задачу. При проектировании задачи необходимо выполнить постановку и алгоритмизацию задачи в соответствии с проектной или созданной базой данных. В процессе постановки определяется характеристика задачи, входная и выходная информация. В характеристике задачи, в частности, определяются цель, назначение и сущность задачи, регламент решения, общая технология обработки данных. Алгоритм задачи — это совокупность формальных действий и проверочных условий, выполнение которых осуществляется* в определенной логической последовательности и позволяет решить поставленную задачу, т. е. на основе входных данных получать выходные данные. Описание алгоритма включает назначение и характеристику алгоритма; структуру входных и выходных
514
Часгь ///. Разработка приложения пользователя
данных; математическое описание алгоритма — формулы, выражения, методы; словесное или формальное описание алгоритма; контрольный пример, содержащий данные для всестороннего тестирования алгоритма. При разработке алгоритма необходимо обеспечить его выполнимость, т. е. для любой допустимой совокупности исходных данных должен быть получен искомый результат после выполнения конечного числа шагон. Процесс алгоритмизации заключается в разработке совокупности конкретных действий — операций, при реализации которых выполняется переработка входных данных в выходные, являющиеся результатом решения задачи. Можно выделить следующие этапы алгоритмизации задач: D разбиение — декомпозиция общей задачи на более простые — элементарные подзадачи, реализуемые каким-либо инструментальным средством СУБД; О разработка блок-схемы задачи, определяющей взаимосвязи подзадач и другие действия; П конкретизация и формализация выполнения каждой подзадачи, определение се входных и выходных данных, описание ее алгоритма. Контрольный пример должен содержать набор необходимых и достаточных данных для тестирования разработанных алгоритмов. Для формального описания алгоритма задачи могут использоваться различные способы: словесный — последовательность действий описывается на естественном языке; графический •- действия и их последовательность отображаются функционально-технологической схемой и блок-схемой алгоритма. Широкое распространение получил графический способ. Он отличается наглядностью и простотой восприятия. Функционально-технологическая схема отражает технологию преобразования входных данных в выходные и общий алгоритм такого преобразования. На блок-схеме каждое действие алгоритма описывается более детально и отображается определенным графическим символом. Внутри графического символа дается его краткое описание. Все действия связаны в логическую последовательность. Блок-схемой задачи можно представить взаимосвязь всех подзадач, на которые была разделена задача пользователя. При разработке алгоритмов с ориентацией на средства создания форм, запросов, отчетов и Web-страниц рассматриваются укрупненные операции обработки данных, например, операции, которые реализуются одним запросом. Описание этих алгоритмов, как правило, не содержит структур типа циклон и может быть достаточно полно представлено функциональнотехнологической схемой. Такой алгоритм может быть разработан пользователем, хорошо знающим предметную область и возможности инструментальных средств СУБД.
Глава 13. Проектирование задач приложения
515
При использовании названных выше средств Access важным этапом является декомпозиция задачи на подзадачи, легко реализуемые одним из таких средств, например, запросом, отчетом. На рис. 13.1 приведена иллюстрация декомпозиции приложения пользователя в процессе проектирования. Блок-схемы задач и описание их алгоритмов
Концепции приложения и его функции
I Блок-схемы задач и описание их алгоритмов
Разработка функциональнотехнологических схем подзадач
Состав входных и выходных данных подзадач и их алгоритмы
Таблицы БД
Выходные документы Видеограммы
.. Рис. 13.1. Декомпозиция приложения и задач пользователя на подзадачи
При разработке функционально-технологической схемы задачи (подзадачи) конкретизируются содержание процесса обработки данных, его алгоритм, а также определяются состав и структура входных и выходных данных (перечень таблиц, видеограмм, отчетов и их структура). Функциональнотехнологическая схема с конкретизацией входных и выходных данных может быть представлена графически в виде, показанном на рис. 13.2. Наряду с такими объектами, как формы, запросы, отчеты и Web-страницы, для реализации практических задач пользователя приходится использовать средства программирования — язык макросов и язык Visual Basic for Application — VBA. Макросы и модули на VBA оперируют этими объектами и объединяют разрозненные действия в единую задачу пользователя. Завершающим этапом создания приложения является конструирование интерфейса приложения пользователя, объединяющего всю технологию обработки данных предметной области, которая включает загрузку, ведение базы данных и решение всего комплекса задач. Следует обратить внимание на универсальный интерфейс взаимодействия с данными базы, обеспечиваемый Web-страницами, который позволяет обращаться к данным базы с по-
Часть III. Разработка приложения пользователя
516
мощью браузеров из любой программно-аппаратной среды. На рис. 13.3 приводится иллюстрация основных этапов создания приложения от конструирования объектов Access до формирования целостного приложения пользователя. г-х
Ввод данных из документа, ввод
параметров
L
r
-r-^
Ьидеограмма с результатами
__
17Ж1
Имя о описание подзадачи
;| I.UUJ |
Таблицы БД
"^
п
документ
£^ "
Таблица БД с выходными результатами
данными
г fi&\ .V'
^
1 — _J
.. •— ря-t-. Hifj^kjlr
Рис. 13.2. Общий вид функционально-технологической схемы подзадачи Функционально-технологические схемы подзадач
Создание в Access форм, запросов и отчетов подзадач
-^П
данных
*v->
Формы
[ (Ж)]
Запросы и f~g gn их схемы 1 Q
Схема данных
Блок-схемы задач и описание их алгоритмов
"Ёр?\й
Отчеты Формы
Отчеты
I
ощ
Программирование задач на языке макросов и Visual Basic
Макросы и модули задач
Конструирование приложения из объектов Access
Интерфейс С Ж приложения ЛЫЯ
Запросы и их схемы
Макросы, моду л и и другие объекты Структура лрилс жения пользователя
,
Рис. 13.3. Технология от создания объектов Access, реализующих задачи, до конструирования приложения пользователя
Глава 13. Проектирование задач приложения
517
На этой иллюстрации слева от каждого блока с названием этапа перечислены основные источники, которыми необходимо располагать для выполнения соответствующего этапа. Справа от этапа показаны результаты его выполнения. В главе 14 описывается создание макросов, позволяющих реализовать проектную технологию обработки данных, в которой предусматривается последовательность действий, соответствующая алгоритму решения задачи. В последующих главах будет рассмотрена техника программирования процедур в приложении пользователя на языке VBA, а также конструирование форм, через которые осуществляются управление приложением и настройка окна-интерфейса приложения пользователя.
Глава 14
Создание макросов Как было показано в предыдущих главах книги, база данных Access — это не только набор таблиц, хранящих взаимосвязанные данные, но и набор средств для работы с данными базы, таких как запросы, формы, отчеты, страницы доступа к данным. При разработке приложения с помощью Access эти объекты составляют его основу и могут быть названы объектами приложения. При этом формы составляют основу интерфейса, обеспечивая интерактивный ввод, просмотр, изменение данных. С помощью кнопочных форм может быть создана панель управления приложением, представляющая все его подзадачи и обеспечивающая пользователя простым доступом ко всем его функциям. В приложении от пользователя должна быть скрыта вся внутренняя структура приложения, и даже окно базы данных. Добиться такого уровня автоматизации без использования средств программирования практически невозможно. Простейшим языком программирования, позволяющим автоматизировать выполнение ряда операций, связать различные объекты, является язык макросов. Использование макросов для автоматизации управления реакцией приложения на действия пользователя позволяет создавать полноценные интерактивные приложения. В первоначальных версиях Access макросы были главным средством автоматизации. Начиная с Access 2000, макросы стали уступать свои позиции языку Visual Basic for Applications (VBA). Тем не менее, простой язык макросов обеспечивает возможность выполнения многих задач, не прибегая к программированию на VBA. Кроме того, изучение языка макросов может рассматриваться как хороший способ введения в программирование на языке VBA. Макрос — это программа, состоящая из последовательности макрокоманд (макрос от слова "макрокоманда"). Макрокоманда — это инструкция, ориентированная на выполнение определенного действия над объектами Access и их элементами. \ Например, макрокомандой можно открыть форму, отчет, напечатать отчет, запустить на выполнение запрос, применить фильтр, присвоить значение, создать свое меню для формы или отчета. Макрокоманда выполнить команду (RunCommand) позволяет выполнить любую встроенную команду Access, ко-
Глава 14. Создание макросов
519
торая есть в меню, на панели инструментов или в контекстном меню. Имеющийся в Access набор макрокоманд (более 50) реализует практически любые действия, необходимые для решения задачи. Язык макросов обеспечивает возможность выполнения большинства задач без программирования на Visual Basic for Applications, Макросы, являясь надстройкой над VBA, обеспечивают пользователя средствами решения задач, не требующими знания детального программирования. Язык макросов является языком более высокого уровня, чем VBA. Макрос является объектом Access, который наряду с другими объектами представлен в окне базы данных. Макросы могут запускаться на выполнение прямо из окна базы данных. Возможно решение задач с помощью ряда взаимосвязанных макросов, первый из которых будет запускаться на выполнение из окна базы данных. Пользователь запускает главный макрос на выполнение, и далее все управление выполнением задачи осуществляется изнутри макроса. Макрос сам открывает нужные объекты, выбирает и обрабатывает данные, вызывает другие макросы, следуя алгоритму, приводящему к решению задачи. При необходимости из макроса может быть инициирован диалог с пользователем. Для перехода по различным ветвям макроса в строке макрокоманды используется условие. В Access макрос может выполняться не только при непосредственном его запуске из окна базы данных, а й в ответ на многочисленные виды событий. Событиями наделены многие объекты Access. Они наступают при выполнении определенных действий с объектами, к которым относятся, прежде всего, действия пользователя. Примерами событий являются изменение данных в поле, открытие или закрытие формы или отчета, нажатие кнопки в форме и просто передача фокуса от одного поля к другому. Связь макросов с событиями позволяет автоматизировать приложения, используя макросы для открытия форм, печати отчетов, выполнения последовательности запросов, осуществления действий, зависящих от значений некоторого поля в базе данных, вывода пользовательских сообщений или отключения предупреждающих сообщений во время выполнения запросов действия и многого другого. Программы на языке макросов реализуют алгоритмы решения отдельных задач приложения. Механизм связывания макросов с событиями в объектах позволяет объединить разрозненные задачи приложения в единый комплекс, управляемый пользователем. Пользователь, выполняя различные действия в формах, инициирует выполнение макросов, автоматизирующих решение связанных с действиями пользователя задач.
520
Часть III. Разработка приложения пользователя
Конструирование макроса Создание макросов осуществляется в диалоговом режиме и сводится к записи в окне макроса последовательности макрокоманд, для которых задаются параметры. Каждому макросу присваивается имя. При выполнении макроса макрокоманды выполняются последовательно в порядке их расположения. При этом используются объекты или данные, указанные в аргументах макрокоманд. Имеется возможность изменить порядок выполнения макрокоманд, определяя условия их выполнения. Выполнение макросов инициируется простой операцией и может сводиться к его открытию, как это делается и для других объектов базы данных. Помимо этого, Access предоставляет возможность автоматически инициировать выполнение макроса при наступлении некоторого события. Для связи макроса с событием достаточно в бланке свойств объекта или его элемента управления внести в строку этого события имя макроса. События, с которыми можно связать макрос, определяются в свойствах форм и отчетов и их элементов управления. Создание макроса начинается в окне базы данных, где надо выбрать вкладку Макросы (Macros) и нажать кнопку Создать (New). После этого открывается окно макроса.
Формирование макрокоманд в окне макроса Макрокоманды, составляющие макрос, вводятся в столбец Макрокоманда (Action) (рис. 14.1). Для ввода макрокоманды можно нажать в этом столбце кнопку раскрытия списка макрокоманд и выбрать нужную из них. Можно ввести имя макрокоманды с клавиатуры. В нижней части окна выводятся Аргументы макрокоманды (Action Arguments). Значения аргументов задаются выбором их из списка, открывающегося в строке аргумента. В поле справа от строк аргументов выводится сообщение с пояснениями для выбранного аргумента. В строки столбца Примечание (Comment) вводят необязательный комментарий, описывающий результат выполнения макрокоманды. Каждая новая макрокоманда макроса добавляется в следующую строку бланка. Порядок размещения макрокоманд в бланке определяет последовательность их выполнения. После ввода всех макрокоманд в макрос его надо сохранить, воспользовавшись командой меню Файл|Сохранить (FilejSave) или кнопкой панели инструментов макроса. Для выполнения макроса можно нажать кнопку панели инструментов Запуск (Run). Если макрос уже закрыт, то для его выполнения надо в окне ба-
Глава 14. Создание макросов
521
зы данных выбрать макрос и нажать кнопку Запуск (Run) в этом окне Таким образом, по инициативе пользователя задача может решаться многократно. Для просмотра и редактирования существующего макроса надо выбрать его в окне базы данных и нажать кнопку Конструктор (Design).
Макрос! : макрос Макрокоманда
Примечание
ОткрытьМодуль ОткрытьОтчет ОткрытьПредставпение ОткрытьСохраненнуюПроцедуру ОткрытьСтраницуДосгупаКДанным ОткрытьСхему ОткрытьТабпицу ОткрытьФориу Аргументы макрокоманды
Столбец для ввода макрокоманд.
Рис. 14.1. Окно конструирования макроса с открытым списком макрокоманд
Формирование макроса с помощью мыши Создание макрокоманды в макросе или задание значений их аргументов может быть выполнено путем переноса с помощью мыши объекта базы данных из окна базы данных в окно макроса.
Формирование макрокоманды Для включения в макрос макрокоманд достаточно перетащить с помощью мыши объект из окна базы данных в строку макрокоманды. Макрокоманда по умолчанию создается со значениями аргументов, соответствующими выбранному объекту. Например, при перетаскивании таблицы создается макрокоманда ОткрытьТаблицу (ОрепТаЫе), открывающая таблицу в режиме таблицы со значением Изменение (Edit) для аргумента Режим данных (Data Mode).
522
Часть III. Разработка приложения пользователя
Возможно перемещение любых объектов, представленных в окне базы данных. Соответственно перемещаемому объекту могут быть созданы макрокоманды ОткрытьТаблицу (ОрепТаЫе), ОткрытьФорму (OpenForm), Открыть Запрос (OpenQuery), ОткрытьОтчет (OpenReport), ОткрытьСтраницуДоступа КДанным (OpenPage), ОткрытьМодуль (OpenModule) ИЛИ ЗапускМакроса (RunMacro). Если объект переносится в строку макроса, уже содержащую макрокоманду, то над этой строкой создается новая пустая строка, в которую вводится макрокоманда, соответствующая перемешаемому объекту.
Формирование значений аргументов макрокоманды Перетаскивание объектов в строки аргументов позволяет формировать аргументы в макрокомандах, которые не могут создаваться перетаскиванием объектов в строки макрокоманд. Для формирования значений аргументои макрокоманды нужно переместить объект с помощью мыши из окна базы данных в строку аргумента, для которого задается значение, В большинстве макрокоманд при переносе объекта в любую из строк аргументов автоматически формируются значения всех или части аргументов. Например, при переносе таблицы в строку аргумента Тип объекта (Object Туре) макрокоманды Закрыть (close) аргумент получает знамение Таблица (Datasheet). Аргумент Имя объекта (Object Name) в качестве значения получает имя перетаскиваемой таблицы. При переносе любого объекта в поле аргумента Тип объекта (Object Type) макрокоманды переименовать (rename) будут заполнены поля аргументов Тип объекта (Object Type) и Старое имя (Old Name).
Создание группы макросов Группа макросов создается как один макрос, в котором содержится несколько поименованных макросов, например, связанных с решением одной задачи или используемых при работе с одной формой. Работать с группой часто оказывается удобнее, чем с несколькими отдельными макросами. Для создания группы в макросе нужно вызвать столбец Имя макроса (Macro Name). Он появляется, если нажать кнопку Имена макросов (Macro Names) на панели инструментов или выполнить аналогичную команду в меню Вид (View). В ячейку столбца Имя макроса (Macro Name) надо ввести имя первого макроса, входящего в группу макросов, а затем записать макрокоманды, выполняемые в первом макросе. Аналогичным образом нужно ввести имена других макросов и их макрокоманды. Все макросы, созданные в одном окне, будут составлять одну группу макросов.
Глава 14. Создание макросов
523
Имя, указанное при сохранении такой группы макросов, будет именем группы. Имя сохраненной группы макросов выводится в списке макросов в окне базы данных. Для ссылок на макросы, которые вошли в группу макросов, используется следующий синтаксис: ИмяГруппыМакросов.ИмяМакроса
Вызов макроса из другого макроса Если некоторый набор макрокоманд будет использоваться в нескольких макросах, то вместо того, чтобы включать эти команды в каждый макрос, пользователь имеет возможность создать макрос, содержащий эти макрокоманды, и вызывать его из других макросов. Вызов макроса выполняется макрокомандой ЗапускМакроса (RunMacro). Макрокоманду вводится в той позиции макроса, из которой должен вызываться другой макрос. Аргументы макрокоманды ЗапускМакроса (RunMacro):
D Имя макроса (Macro Name). Если запускаемый макрос входит в группу макросов, имя задается с указанием имени группы: ИмяГруппыМакросов.ИмяМакроса
О Число повторов {Repeat Count) вызова макроса. Если этот аргумент и аргумент Условие повтора (Repeat Expression) не заданы, вызванный макрос выполняется один раз; О Условие повтора (Repeat Expression) — логическое выражение. При значении Ложь (False) повторное выполнение вызванного макроса не производится и возобновляется выполнение вызывающего макроса. Если заь даны значения обоих аргументов: Число повторов (Repeat Count) и Условие повтора (Repeat Expression), вызываемый макрос будет выполняться до тех пор, пока выражение, заданное аргументом Условие повтора (Repeat Expression), не получит значение Ложь (False), либо пока не исчерпается число указанных повторов. Макрокоманда ЗапускМакроса (RunMacro) с помощью аргументов Число повторов (Repeat Count) и Условие повтора (Repeat Expression) позволяет реализовать циклы в программах на языке макросов. При запуске исходного макроса его макрокоманды выполняются поочередно до тех пор, пока не наступит очередь макрокоманды ЗапускМакроса (RunMacro). В этот момент происходит вызов второго макроса. После завершения выполнения макрокоманд вызванного макроса выполнение вызывающего макроса возобновляется со следующей макрокоманды. Допускается выполнение макрокоманды ЗапускМакроса (RunMacro) из вызванного макроса. Это означает, что сначала вызывается макрос А, из кото-
Часть III. Разработка приложения пользователя
524
рого в свою очередь вызывается макрос В, и т. д. В каждом случае по завершении вызванного макроса выполняются следующие макрокоманды вызывающего макроса.
Использование условий в макросе Для реализации алгоритма в программах необходим механизм, обеспечивающий выполнение различных действий в зависимости от заданных условий. В языке макросов можно организовать выполнение макрокоманды или набора макрокоманд только при выполнении некоторых условий. Условия позволяют определить порядок передачи управления между макрокомандами в макросе и обеспечивают выполнение определенных ветвей алгоритма. Например, если в макросе проверяется значение поля в форме на соответствие заданным условиям, то для одних значений может потребоваться вывести сообщение, а для других значений — произвести вывод отчета.
Структурирование программы с помощью условий Условие вводится в строку макрокоманды в столбец Условие (Condition). Столбец Условие вызывается в окне макроса нажатием соответствующей кнопки на панели инструментов. Условие задается логическим выражением. Для создания набора макрокоманд, которые нужно связать с выполнением условия, в условии каждой из них записывается многоточие (...)- Если выражение истинно, выполняется макрокоманда, находящаяся в той же строке, и все следующие за ней макрокоманды с многоточием в столбце Условие. Если выражение ложно, то макрокоманда, находящаяся в той же строке, и все следующие за ней макрокоманды, у которых вместо условия проставлено многоточие, будут пропущены. Следующей будет выполняться макрокоманда с новым условием или с пустой ячейкой условия (см. блоксхему на рис. 14.2). Ввод в столбец условия значения False (Нет) также позволяет пропустить выполнение макрокоманды. Этот прием может использоваться при отладке макросов. Таким образом, условие позволяет пропускать или выполнить связанный с этим условием набор макрокоманд из последовательности макрокоманд макроса и перейти к проверке следующего условия. Для организации ветвлений в программе наряду с условиями можно использовать макрокоманду ОстановитьМакрос
(stopMacro).
Макрокоманда
ЗапускМакроса
позволяет создавать циклы в программах. Пример макроса с условиями приведен на рис. 14.3.
(RunMacro)
Глава 14. Создание макросов
525
Условие 1
Макрокоманда 5
Рис. 14.2. Блок-схема выполнения макрокоманд с условиями 9 Макрос2 : макрос Условие [ДДРЕС_ПрК] Is Null
Макрокоманда Примечание ОткрытьШорму Дпя ввода записей в таблицу Покупатели f ез адреса НаЗапись Сделать текущей новую запись Заполнить поля новой записи кодом и ЗадатъЗначение ЗадатьЗначение , наименованием покупателя Ост аиови тьМак ро с [АДРЕС_ПОК]='Москва' Закрыть ОткрытьОтчет Договора текущего покупателя Печать Сообщение Ос т анов и тьМакр о с .Закрыть ОткрытьЯюрму Дпя просмотра и изменения договорсе ЗадатьЗначение Аргументы макрокоманды Имя формы Режим Имя фильтра Условие отбора Режим данных Режим окна
ДОГОВОР (Dopna [КОД_ПОК]=[Формы]![ПО1О Изменение Обычное
Столбец для задания условных выражений,
Рис. 14,3. Пример макроса с условием для пропуска набора макрокоманд
526
Часть III. Разработка приложения пользователя
Выполнение представленного на рис. 14.3 макроса связано с событием Текущая запись в форме просмотра сведений о покупателях. В макросе в зависимости от значения поля с адресом покупателя выполняется одна из ветвей программы: запись сведений об отсутствии адреса, просмотр и печать отчета или открытие формы. Условие в первой строке макроса проверяет, заполнено ли поле АДРЕС_ПОК в текущей записи формы. Если условие истинно, т. е. адрес покупателя содержит пустое значение, выполняются только пять первых макрокоманд, обеспечивающих добавление записи в таблицу покупатели без адреса и завершение работы макроса. В противном случае указанные макрокоманды пропускаются и выполняется проверка выражения во втором условии. Если оно истинно, т. е. адресом покупателя яаляется город Москва, выполняются только пять макрокоманд другой ветки, связанных с этим условием, в противном случае эти макрокоманды опускаются и выполнение макроса начинается с первой не помеченной многоточием ветки в столбце условий макрокоманды. Заметим, что на момент получения управления макросом форма ПОКУПАТЕЛЬ является текущим объектом. После открытия другого объекта текущим становится открытый объект.
Примеры логических выражений в условии выполнения макрокоманды Рассмотрим примеры логических выражений в условии выполнения макрокоманды. П Проверка в текущей записи формы, из которой запускается макрос: • значения в поле ЦЕНА: ЦЕНА>=2000;
• нахождения значения в поле даты заключения договора (ДАТА дог) в интервале не раньше 2 февраля 95 г. и не позже 2 марта 1995 г.: [ДАТА_ДОГ] Between #2-фев-Э5# And #2-мар-95#
• значения в поле СУММА на равенство пустому (ыиИ) значению: Is Null([СУММА]) или [СУММА] Is Null
П Проверка одновременного выполнения двух условий на равенство заданным значениям в полях НАИМ_ТОВ и кол_пост текущей записи: [НАЙМИТОВ]="Монитор"
And
[КОЛ_ПОСТ]>15
В УСЛОВИЯХ МОГуТ ИСПОЛЬЗОВатЬСЯ фуНКЦИИ, Например, Dcount, Dmax, MsgBox:
П подсчет числа выписанных накладных и сравнение его с заданным: DCount(Формы![НАКЛАДНАЯ]! [НОМ_НАКП]; 'НАКЛАДНАЯ')>50 или DCount ( ' * ' ; 'НАКЛАДНАЯ')>50
Глава 14. Создание макросов
527
П выбор максимальной цены товара и сравнение ее с заданным значением; DMax{Формы![ТОВАР]![ЦЕНА];'ТОВАР')>500
П Функция MsgBox может быть использована для вывода на экран окна диалога, содержащего нужное сообщение, и кнопок ОК и Отмена (Cancel), нажатие которых формирует одно или другое значение функции. Сравнение значения, сформированного функцией MsgBox, с заданным значением позволяет выбрать пользователю вариант действий: MsgBox("Выдать справку?";1}=1
Первый параметр функции задает выводимое на экран сообщение, единица на месте второго параметра определяет отображение в окне диалога кнопок ОК и Отмена (Cancel). Если пользователь нажимает кнопку ОК, функция возвращает значение 1. Если нажимает кнопку Отмена (Cancel), функция возвращает значение 2. В условиях могут использоваться значения элементов управления из объектов, которые не являются текущими в данный момент: П сравнение значения поля код_пок в текущей записи формы ПОКУПАТЕЛЬ со значением аналогичного поля в открытой форме ДОГОВОР: Forms![ДОГОВОР]![КОД_ПОК]=[КОД_ПОК]
Использование в макросах ссылок на объекты В программах на языке макросов, как и на языке VBA, при обработке данных в базе необходимо уметь правильно ссылаться на эти данные. В Access определен ряд объектов, через которые предоставляется возможность получить доступ к данным базы. К таким объектам относятся формы, отчеты, страницы доступа к данным. Ссылки на формы, отчеты, их элементы управления и свойства формируются по определенным правилам. Построитель выражений позволяет сформировать такие ссылки простым выбором объекта, элемента управления и свойства в списках. Следует отметить, что, оперируя свойствами объектов, можно также запрограммировать элементы интерфейса приложения. К моменту выполнения в макросах выражения со ссылкой на объект этот объект должен быть открыт.
Ссылки на объекты Ссылаться на объекты можно по имени, но нужно учесть, что в Access объекты объединяются в семейства. Формы объединены в семейство Формы
528
Часть III. Разработка приложения пользователя
(Forms), отчеты — в семейство Отчеты (Reports). Поэтому ссылка на объект включает имя семейства и, через восклицательный знак, имя объекта. Если имя включает пробелы или специальные символы, его нужно заключить в квадратные скобки. Например, для ссылки на форму используется запись: Forms![ДОГОВОР С ПОКУПАТЕЛЕМ;.
Ссылки на свойство объекта В ссылке на свойство объекта после имени объекта через точку записывается имя свойства. Перечень свойств формы или отчета можно посмотреть, открыв объект в режиме конструктора и вызвав окно его свойств. Многие свойства названы несколькими словами с пробелами между ними. Истинное имя свойства таких пробелов не имеет, поэтому в ссылках оно записывается без них. Например, имя свойства Область выделения (Record Selectors) должно записываться как область выделения (RecordSelectors), имя свойства Полосы прокрутки (Scroll Bars) — как полосыПрокрутки (ScrollBars). Ссылка на свойство формы выглядит так: Forms![ДОГОВОР С ПОКУПАТЕЛЕМ].ScrollBars
В русифицированной версии Access в строках окна свойств указаны русские имена свойств. При вводе выражений в аргументах макрокоманд следует использовать их английские имена.
Ссылки на элементы управления и их свойства В ссылке на элемент управления вслед за именем объекта через восклицательный знак записывается имя элемента управления, заключенное в квадратные скобки. Для ссылки на свойство элемента управления ссылка на элемент управления дополняется через точку именем свойства. Различные типы элементов управления имеют различные свойства. В общем виде правило записи ссылок может быть сформулировано следующим образом: оператор ";" указывает, что следующий за ним элемент является элементом, определяемым пользователем. Например, оператор " i " ставится перед ссылкой на открытую форму, на открытый отчет или элемент управления в открытой форме или отчете. Оператор "." обычно указывает, что следующий за ним элемент определен в Access. Например, оператор "." ставится перед ссылкой на свойства форм, отчетов и элементов управления. В форме ДОГОВОР С ПОКУПАТЕЛЕМ ссылку на элемент управления Надпись (Caption) с именем ЦЕНА_Надпись нужно оформить следующим образом: Forms![ДОГОВОР С ПОКУПАТЕЛЕМ]![ЦЕНА Надпись]
Глава 14. Создание макросов
529
Обратите внимание, что имя элемента управления не совпадает с подписью, выводимой в форме. Имя записывается в свойстве элемента управления на вкладке Другие (Other) в строке Имя (Name) (рис. 14.4). В форме ДОГОВОР С ПОКУПАТЕЛЕМ элемент управления Надпись (Caption) с именем ЦЕНА_Надпись отображается как ЦЕНА. Это значение записано на вкладке Макет (Format) в свойстве Подпись.
||Г Надпись: Ц[НА_Надпись [цЕНА^Надпись Макет ] Данные | События Имя По вертикали Всплывающая подсказка Идентификатор справки Контекстное меню Дополнительные сведения
Другие
Все
ЦЕНА_Надпись Нет О DetachedLabel
Рис. 14.4. Окно свойств элемента управления Надпись (Caption)
В ссылке на свойство Выводнаэкран, которое соответствует строке Вывод на экран (Visible) на вкладке Макет (Format) (рис. 14.5), необходимо использовать английский вариант этого имени: visible: Forms![ДОГОВОР С ПОКУПАТЕЛЕМ]![ЦЕНА Надпись].Visible
'Надпись: ЦЕНА_Надпись
Макет
Данные | События
Подпись Адрес гиперссылки Дополнительный адрес Вывод на экран Режим вывода От левого края
Другие ]
Все
., Цена
Да Всегда 5,64см
Рис. 14.5. Отображение свойства ВыводНаЭкран (Visibl< в окне свойств
Ссылка на подчиненную форму или отчет Подчиненная форма (или отчет) рассматривается в Access как элемент управления формы (отчета). Форма после внедрения содержится в элементе управления Подчиненная форма (Subform), отчет — в элементе управления
Часть III. Разработка приложения пользователя
530
Подчиненный отчет (Subrepoit). Поэтому ссылка на подчиненную форму (или отчет) записывается как ссылка на элемент управления формы (отчета). Элемент управления Подчиненная форма/отчет (Subform/Subreport) имеет специальное свойство Форма (Form) или соответственно Отчет (Report). Это свойство позволяет ссылаться на элементы управления подчиненных объектов и их свойства. Таким образом, полная ссылка на свойство элемента управления в подчиненной форме имеет, в общем виде, следующую структуру: Forms![Имя формы]![Элемент Подчиненная форма].Form![Элемент подчиненной формы].Имя Свойства
Заметим, что при ссылках на элемент управления в подчиненной форме или подчиненном отчете не обязательно указывать свойства Form или Report. Ниже приведен идентификатор, который определяет ссылку на элемент управления - поле СУММА_ПОСТ в подчиненной форме ПЛАНОВАЯ ПОСТАВКА, встроенной в форму ДОГОВОР С ПОКУПАТЕЛЕМ: Forms![ДОГОВОР С ПОКУПАТЕЛЕМ]![ПЛАНОВАЯ ПОСТАВКА]![СУММА_ПОСТ]
Для расчета стоимости товара в текущей записи формы ПЛАНОВАЯ ПОСТАВКА и его сохранения в поле СУММА_ПОСТ достаточно записать в аргументах макрокоманды задатьЗначение: в строке Элемент (Item) имя [CYMMAJTOCT], а в строке Выражение (Expression) [КОЛ_ПОСТ]*[ЦЕНА; (рис. 14.6).
и Расчет стоимости : макрос Макрокоманда ЗадатьЗначение
Примечание
Аргументы макрокоманды Элемент Выражение
[СУММА JTOCT] [КОЛ_ПОСТ]*[ЦЕНА]
Установка значения для элемента управления, поля или свойства
Рис. 14.6. Ссылки на имена элементов управления при вызове макроса из формы ПЛАНОВАЯ ПОСТАВКА
Если макрос вызывается при наступлении некоторого события, например, при обновлении пользователем полей кол_пост или ЦЕНА в форме ПЛАНОВАЯ ПОСТАВКА, то при передаче управления в макрос текущим объектом остается эта форма. Поэтому в макросе для ссылок достаточно использовать только имена полей. Для вызова макроса, обеспечивающего расчет значения поля СУММА_ПОСТ, при обновлении значений в полях кол_пост или ЦЕНА нужно в свойствах
Глава 14. Создание макросов
531
этих полей на вкладке События (Event) в строке После обновления (After Update) выбрать имя макроса: Расчет стоимости (рис. 14.7).
СПоле:КОЛПОСТ кол пост Макет
) Данные
События
До обновления После обновления Внесены изменения . . . .
Другие
.
Расчет стоимости
Рис. 14.7. Связь макроса с событием После обновления
После выполнения макрокоманды задатьЗначение результат вычисления выражения сохраняется в таблице ПОСТАВКА_ПЛАН в поле CVMMAJIOCT.
Создание ссылок построителем выражений Ссылки на объекты, элементы управления и свойства удобно создавать с помощью построителя выражений. Чтобы вызвать построитель выражений, надо выбрать в окне макроса строку аргумента макрокоманды, в которую требуется ввести выражение, и нажать появившуюся кнопку построителя LiJ. В открывшемся окне Построитель выражений (Expression Builder) в поле записи выражений необходимо сформировать выражение. Для этого в левом поле в нижней половине окна построителя раскройте двойным щелчком кнопки мыши папку, содержащую объекты. Затем укажите папку необходимого объекта. В среднем поле выберите нужный элемент управления объекта, а в правом — укажите пункт Значение (Value), если ссылка формируется на элемент управления, или нужное свойство. Дважды щелкните кнопкой мыши на выбранном элементе или нажмите кнопку Вставить (Paste). Закончив создание выражения, нажмите кнопку ОК. Access скопирует созданное выражение в ту строку, из которой был вызван построитель выражений. Если в данной строке уже содержится выражение, то оно будет заменено новым. Если строка аргумента, из которой вызывается построитель выражений, уже содержит выражение, то оно автоматически копируется в поле выражений, где может быть отредактировано. Заметим, что если нужный объект или свойство не появляются в нижней части окна построителя выражений, это означает, что их нельзя использовать в том контексте, в котором был вызван построитель выражений. I S Зак
Часть ///. Разработка приложения пользователя
532
Организация выполнения макросов При запуске макроса выполнение начинается с первой макрокоманды и следует по алгоритму, реализуемому макросом. В процессе работы проверяются условия, и в зависимости от результата выполняются те или иные макрокоманды, вызываются другие макросы. При вызове другого макроса управление передается ему. Вызванный макрос может выполняться несколько раз. После завершения работы вызванного макроса управление возвращается к вызывающему макросу и продолжается выполнение его макрокоманд. При этом, следуя алгоритму, макрос выполняется по одному из заранее определенных путей из множества возможных. Таким образом, макрос сам выбирает этот путь в зависимости от выполнения условий. Существует возможность организовать выполнение макросов, используя механизм расширенной обработки событий. Access распознает определенные события, к которым может привязываться запуск макроса, или процедуры обработки событий. Событиями, например, являются открытие отчета, изменение данных в поле формы или перевод фокуса на другую запись или поле в форме, щелчок мышью на элементе управления. Для формы определены события формы, раздела формы, записи и элемента управления.
Замечание Для отчета определены только события отчета и раздела отчета.
Порядок выполнения макросов зависит от порядка возникновения событий, и в значительной степени определяется действиями пользователя в формах. Таким образом, управление программой в основном осуществляется пользователем, который выполняет действия, а программа только реагирует на них.
Запуск макроса Для запуска макроса из его окна надо нажать кнопку Запуск (Run) на панели инструментов. Для запуска макроса из окна базы данных необходимо на вкладке Макросы (Macros) установить курсор на имя макроса и дважды щелкнуть кнопкой мыши или нажать кнопку Запуск (Run). Для запуска макроса из любого окна Access требуется выполнить команду меню Сервис|Макрос| Выполнить макрос (Tools| Macro] Run) и в окне диалога Запуск макроса (Run Macro) ввести имя макроса в поле Имя макроса (Macro Name) (рис. 14.8).
Глава 14. Создание макросов
533
Условие с функциеи Формирование таблиць
Рис. 14.8. Окно выбора запускаемого макроса
В поле Имя макроса (Macro Name) можно ввести имя макроса, входящего в группу, с помощью записи ИмяГруппымакросов.ИмяМакроса. В диалоговом окне Запуск макроса (Run Macro) в поле со списком Имя макроса (Macro Name) отображаются не только имена макросов, представленных в окне базы данных, но и имена макросов, входящих в группу макросов. Пользователь имеет возможность создать макрос, автоматически запускающийся при каждом открытии базы данных. Этот макрос должен иметь имя АиьоЕхес. В процессе открытия базы данных Access осуществляет поиск макроса с этим именем и, если такой макрос существует, автоматически запускает его. В макрос AutoExec целесообразно поместить макрокоманды, которые подготовят нужную рабочую среду для пользователя, откроют формы и, если необходимо, другие объекты базы данных, разместят их на экране в удобном виде. Этот макрос создается как любой другой макрос и сохраняется под именем AutoExec. При следующем открытии базы данных Access автоматически запустит его. Цели требуется открыть базу данных, не выполняя при этом макрос Au-оЕхес, нужно открывать базу данных при нажатой клавише <Shift>. Клавиша <Shift> позволяет отключать макрос AutoExec, если в окне диалога Параметры запуска (Startup), вызываемого командой меню Сервис] Параметры запуска (TooIs(Startup), установлен флажок Специальные клавиши Access {Use Access Special Keys).
Выполнение макроса с наступлением события Наряду с рассмотренными способами запуска макросов в Access предусмотрена возможность автоматического запуска макроса при возникновении некоторого события в форме, ее элементах или отчете. Имя макроса указывается в строке определенного события в окне свойств элемента. Связь события с программой позволяет организовать взаимодействие различных компонентов приложения. Причем, поскольку события чаще всего возни-
Часть ///. Разработка приложения пользователя
534
кают в результате действии пользователя, управление приложением осуществляется по его инициативе. Допустим, необходима обработка данных при добавлении записей через форму. Если эта обработка реализуется некоторым макросом, то для автоматического запуска этого макроса можно использовать события До вставки (Before Insert) и После вставки (After Insert), которые являются событиями формы. Событие До вставки (Before Insert) наступает при вводе пользователем первого символа в новую запись, но до фактического добавления записи в базу данных. Событие После вставки (After Insert) наступает после добавления новой записи в базу данных. Для обработки этих событий необходимо в свойствах формы в соответствующую строку ввести имя макроса (рис. 14.9).
Форма Макет 1 Данные Текущая запись До вставки После вставки
События
Другие ]
Все
Макрос!.Ml
Рис. 14.9. Окно свойств событий формы
Рассмотрим случай обработки данных при обновлении значения в гголе записи через форму. Для автоматического запуска макроса, выполняющего такую обработку, можно использовать события До обновления (Before Update) и После обновления (After Update), которые определены как для формы, так и для ее элементов управления. Событие До обновления (Before Update) наступает, когда пользователь приступает к обновлению данных в элементе управления или записи. Событие После обновления (After Update) наступает после обновления данных в элементе управления или записи. Данное событие возникает при потере фокуса элементом управления, т. е. при переходе к другому элементу, или после сохранения записи. Сохранение записи выполняется при переходе к другой записи или выборе пользователем команды меню Записи|Сохранить запись (Records|Save Record). Событие возникает для новых и существующих записей. Для обработки этих событий необходимо в свойствах элемента управления формы в строку соответствующего события ввести имя макроса (рис. 14.10).
Глава 14. Создание макросов
535
И* Поле: КОЛ ОТГР КОЛ_ОТГР Макет
{ Данные
События
Другие
Все
До обновления . . , После обновления . Внесены изменения
Рис. 14.10. Окно свойств событий элемента управления
Порядок выполнения макросов, вызываемых событиями Для правильного определения порядка выполнения макросов, которые запускаются при возникновении событий, необходимо понимание того, когда и в какой последовательности возникают события. Каждое отдельное действие, например, переход на другой элемент управления, может явиться причиной ряда других событий, возникающих в определенной последовательности. Если созданы макросы, которые требуется выполнять в определенном порядке, пользователь должен быть уверен, что события, вызывающие эти макросы, возникают в том же порядке. Поясним последовательность возникновения событий при закрытии формы и при переходе с одного элемента управления на другой. Когда пользователь закрывает форму, для текущего элемента управления возникают события Выход (Exit) и Потеря фокуса (Lost Focus), а также события формы, такие как Выгрузка (Unload), Отключение (Deactivate) или Закрытие (Close). Порядок возникновения событий будет следующим: Выход =э Потеря фокуса =*Выгрузка => Отключение => Закрытие
Когда пользователь переводит курсор (фокус) на другой элемент управления, для элемента, с которого переводится курсор, сначала возникает событие Выход (Exit), а затем — Потеря фокуса (Lost Focus); для элемента, на который переводится курсор, сначала возникает событие Вход (Enter), а затем — Получение фокуса (Got Focus).
Создание кнопки запуска макроса в форме Можно предусмотреть запуск макроса пользователем из формы путем нажатия к н о п к и . Для связи кнопки с макросом в свойствах кнопки на вкладке События (Event) в строке Нажатие кнопки (On Click) задается имя макроса.
Часть III. Разработка приложения пользователя
536
Создание кнопки запуска макроса с помощью мыши Для создания кнопки запуска макроса с помощью мыши надо в окне базы данных выбрать вкладку Макрос (Macros) и перетащить макрос, который необходимо запустить при нажатии кнопки, из окна базы данных в форму, открытую в режиме конструктора. В форму будет помещена кнопка, связанная с данным макросом. Кнопка будет иметь подпись, соответствующую имени макроса. Если в макросе содержится группа макросов, при использовании этого метода запускается только первый макрос из группы и нельзя запустить другой макрос, входящий в группу. Для создания кнопки, запускающей конкретный макрос из группы макросов, необходимо, находясь в форме п режиме конструктора, установить курсор мыши на кнопку и вызвать ее свойства. В свойствах на вкладке События (Event) в строке Нажатие кнопки (On Click) надо дополнить имя макроса группы именем макроса (рис. 14.11). Кнопка: КнопкаВ Кнопкав
V
Макет | Данные Вход Выход Получение фокуса Потеря фокуса Нажатие кнопки
События | Другие \
Все
Макрос!.М2
Рис. 14.11. Окно свойств кнопки, вызывающей выполнение макроса
Создание кнопки запуска макроса мастером Кнопка для запуска макроса может быть создана в форме с помощью мастера. Для этого надо нажать на панели элементов кнопку Мастера (Control Wizards) и затем Кнопка (Command Button). После вычерчивания кнопки в форме открывается диалоговое окно Создание кнопок (Command Button Wizard), в котором требуется указать категорию Разное (Miscellaneous) и действие Выполнить макрос (Run Macro). Затем нужно выбрать макрос, который будет запускаться при нажатии кнопки. Мастер позволяет задать рисунок или текст подписи на кнопке, ввести имя кнопки запуска макроса. Заметим, что мастер позволяет привязать к кнопке помимо запуска макроса множество других стандартных действий, реализованных в Access с помощью процедур обработки событий.
Глава 14. Создание^ макросов
537
Использованиемакросов при решении задач Создание макроса для решения задачи, использующей запросы Допустим, необходимо рассчитать общую стоимость товара, отгруженного по накладной, и внести ее в поле СУММА_НАКЛ таблицы НАКЛАДНАЯ. Для решения этой задачи пользователю нужно последовательно выполнить следующие запросы (см. главу 4): 1. Запрос на обновление Расчет стоимости, вычисляющий стоимость каждого товара, указанного в спецификации накладной — в записях таблицы ОТГРУЗКА.
2. Запрос на создание таблицы Расчет стоимости накладной, вычисляющий общую стоимость всех товаров, отгруженных по накладной. 3. Запрос на обновление Обновление стоимости накладной, сохраняющий общую стоимость товаров, отгруженных по накладной, в поле СУММА_НАКЛ таблицы НАКЛАДНАЯ. Создадим макрос, который последовательно выполнит эти запросы. Кроме того, включим в макрос макрокоманды* обеспечивающие отображение результатов решения задачи на экране в удобном виде. 1. Чтобы начать создание макроса, выберите в окне базы данных вкладку Макросы (Macros) и нажмите кнопку Создать (New). Откроется окно макроса (см. рис. 14.1). 2. Макрокоманды, составляющие макрос, вводятся в столбец Макрокоманда (Action). Для ввода макрокоманды нажмите кнопку раскрытия списка макрокоманд и выберите макрокоманду открытьЗапрос (openQuery), чтобы выполнить первый запрос. 3. Имя запроса Расчет стоимости выберите из списка в разделе Аргументы макрокоманды (Action Arguments) в нижней части окна макроса (рис. 14.12). 4. В столбец Примечание (Comment) введите текст, описывающий результат выполнения макрокоманды, например: "Вычисление стоимости каждого товара, указанного в спецификации накладной". 5. Для выполнения запросов Расчет стоимости накладной и Обновление стоимости накладной введите следующую макрокоманду ОткрытьЗапрос (openQuery). Порядок размещения макрокоманд в бланке определяет последовательность их выполнения.
Часть HI. Разработка приложения пользователя
53S
6. Воспользуйтесь для включения в макрос макрокоманды перетаскиванием объектов с помощью мыши. В окне базы данных выберите запрос, например, Расчет стоимости накладной, и перетащите его в строку макрокоманды. Сформируется макрокоманда ОткрытьЗапрос (OpenQuery), В аргументах которой автоматически будут заданы имя открываемого запроса, режим отображения запроса и режим работы с его данными (см. рис. 14.12).
Ж Макрос? : макрос __| Макроко манда ^ ОткрытьЗапрос
I Примечу *.] Вычисление стоимости каждого товара, УКазанного в спецификации накладной Аргументы макрокоманды
Имя запроса Режим Режим данных
Расчет стоимости Таблица Изменение
Открытие запроса на выборку пли перекрестного запроса или запуск запроса на изменение, Допускается режим конструктора, табгмцы или просмотри. Для справки нажмите F1.
Рис. 14.12. Макрокоманда ОткрытьЗапрос
7. Сохраните макрос под именем Общая стоимость накладной, воспользовавшись кнопкой панели инструментов макроса Сохранить (Save). 8. Выполните макрос, нажав кнопку панели инструментов Запуск (Run). 9. Во время выполнения макроса на экран выводятся предупреждающие сообщения, выдаваемые выполняющимися запросами. Для временного отключения вывода на экран окон сообщений дополните макрос макрокомандой УстановитьСообщения (setWarnings). В строке аргумента Включить сообщения (Warnings On) выберите значение Нет (No). После прекращения выполнения макроса вывод предупреждений восстанавливается автоматически. Для возобновления вывода сообщений задается значение Да (Yes). 10. Организуйте вывод на экран таблиц НАКЛАДНАЯ и стоимость накладной, чтобы сделать наглядным процесс работы макроса и обновления таблицы. Для этого дополните макрос, как показано на рис. 14.13. В представленном макросе не используются условия отбора и макрокоманды выполняются последовательно одна за другой. Порядок их размещения определяется алгоритмом решения задачи. 11. Закройте макрос и выполните его из окна базы данных, воспользовавшись кнопкой Запуск (Run).
Глава 14. Создание макросов
539
Общая стоимость накладной : макрос Макрокоманда Свернуть Сообщение ОткрытьТабпмцу СдвигРазмер Установить Сообщения ОткрытьЗапрос ОткрытьЗапрос ОткрытьТаблицу СДБ иг Размер Сообщение ОткрытьЗапрос Закрыть ОткрытьТаблицу СдвигРазмер Сообщение Закрыть Закрыть Восстановить
Примечание Выполнение запроса будет наглядным, если обнулить значения поля СУММА_НАКП Открыть таблицу НАКЛАДНАЯ Сдвинуть окно таблицы НАКЛАДНАЯ Отключить вывод сообщений Вычисление стоимости каждого товара, указанного е спецификации накладной Создание таблицы с общей стоимостью товаров, отгруженных по накладной Открыть таблицу Стоимость накладной, созданную запросом
i
Таблица Стоимость накладной создана Сохранение общей стоимости товаров в таблице НАКЛАДНАЯ Таблицу НАКЛАДНАЯ НАКЛАДНАЯ Сдвинуть окно таблицы НАКЛАДНАЯ Таблица НАКЛАДНАЯ обновлена Таблицу НАКЛАДНАЯ Таблицу Стоимость накладной Аргументы макрокоманды
Представление текущего окна в виде значка в нижней части окна Microsoft office Access. Для справки нажмите клавишу F1,
Рис. 14.13. Макрос задачи в режиме конструктора
12. Ход и результаты выполнения запроса по обновлению поля СУММА_НАКЛ отображаются в выводимых на экран сообщениях и таблицах (рис. 14.14). 13. Создайте в любой форме кнопку запуска макроса с помощью мыши. Для этого в окне базы данных выберите макрос Общая стоимость накладной, который необходимо запускать при нажатии кнопки. Перетащите его в форму, открытую в режиме конструктора. В форму будет пометена кнопка, связанная с данным макросом. Кнопка будет иметь подпись, соответствующую имени макроса. Используемые в программе макрокоманды имеют следующее назначение: П макрокоманда Свернуть (Minimize) позволяет свернуть окно, которое было активным в момент запуска макроса на выполнение. Если макрос запускается на выполнение из окна базы данных и кроме этого окна нет открытых окон, на экране будет отображено только свернутое окно базы; О макрокоманда ОткрытьТаблицу (орептаЫе) открывает таблицу НАКЛАДНАЯ. Имя таблицы и режим ее открытия указываются в аргументах макрокоманды. Открытая таблица НАКЛАДНАЯ будет отображаться на экране до
Часть III. Разработка приложения пользователя
540
выполнения макрокоманды Закрыть. Это позволит просмотреть содержимое таблицы до и после выполнения запросов;
01
HQQ2 Запись; И ]
Дата отгрузки 09.03.2004 11.03.2004 04.02.2004 ! _11.03.2004
.
Номер договора [Общая сумма по наю Д111 Д111 Д111 Д222
MjHjt] ю 12
31 268,00р 4 612,00р
CQ2
сю.
I \
Таблица Стоимость накладной создана
i'soo'nop
СО'Г."
2935,00р
Рис. 14.14. Результаты выполнения макроса после вывода второго сообщения
П макрокоманда сдвигРазмер (Movesize) позволяет задать размер и местоположение окна активного объекта. Выполнение макрокоманды после открытия таблицы изменяет параметры окна таблицы; П макрокоманда сообщение (мздВох) выдает сообщение, указанное в аргументах макрокоманды; П макрокоманда восстановить (Restore) позволяет восстановить окно, свернутое перед решением задачи; О макрокоманда УстановитьСообщекия (setwamings) отключает вывод на экран окон сообщений с предупреждениями на время выполнения макроса.
Замечание Допускается использование в макросе еще не созданных объектов. Например, в аргументе Имя таблицы (Table Name) макрокоманды Открыть Таблицу (ОрепТаЫе) указано имя еще несуществующей таблицы Стоимость накладной. Однако к моменту выполнения макрокоманды эта таблица должна быть создана в базе данных. В рассматриваемом примере таблица Стоимость накладной создается запросом в ходе выполнения макроса до выполнения макрокоманды, открывающей ее.
Глава 14. Создание макросов
541
Макрос синхронной обработки данных двух форм Рассмотрим как с помощью группы макросов, которые запускаются при инициировании пользователем событий в одной форме, можно отфильтровать записи в другой форме. Допустим, при просмотре данных о договорах необходимо иметь возможность отображать информацию о накладных, по которым отгружался товар в соответствии с просматриваемым договором. Для решения задачи используем формы ДОГОВОР С ПОКУПАТЕЛЕМ и НАКЛАДНАЯ, созданные ранее (см. главу 6). Обе формы имеют поле с номером договора ном_дог. При работе с формой ДОГОВОР С ПОКУПАТЕЛЕМ должна открываться форма НАКЛАДНАЯ, в которой представлены только соответствующие просматриваемому договору накладные. Создайте группу макросов с именем Накладные, включающую макросы Ml и М2. Пусть макрос Ml выполняется при открытии формы ДОГОВОР С ПОКУПАТЕЛЕМ, открывает форму НАКЛАДНАЯ и определяет ее местоположение на экране. Макрос М2 фильтрует записи с накладными по значению поля ном_дог, взятому из текушей записи формы ДОГОВОР С ПОКУПАТЕЛЕМ. Макрос М2 должен выполняться, когда пользователь, работая в форме с договорами, инициирует событие Двойное нажатие кнопки или Вход для поля с номером договора. Создание группы позволяет объединить макросы, предназначенные для решения одной задачи, и упростить сопровождение приложения. 1. Для создания макроса выберите в окне базы данных вкладку Макросы (Macros) и нажмите кнопку Создать (New). 2. Для того чтобы дополнить окно макроса столбцом, позволяющим создать группу макросов, щелкните на панели инструментов Конструктор макросов на кнопке Имена макросов (Macro Names). 3. Запишите макрокоманды макросов Ml и М2, как показано на рис. 14.15, и сохраните группу макросов под именем Накладные. Это имя будет выводиться в списке макросов в окне базы данных. 4. Для запуска макроса Ml установите связь события Открытие (On Open) формы ДОГОВОР С ПОКУПАТЕЛЕМ с макросом. Откройте форму в режиме конструктора, щелкните по кнопке Свойства (Properties), на вкладке События (Eventbi) в качестве значения свойства Открытие (On Open) выберите имя макроса Накладные.Ml (рис. 14.16). 5. Для запуска макроса М2 в свойствах поля ном_дог формы ДОГОВОР С ПОКУПАТЕЛЕМ в качестве значения события Двойное нажатие кнопки (On Dbl Click) установите Накладные.М2 (рис. 14.17).
Часть III. Разработка приложения пользователя
542
С Накладные : макрос Макрокоманда Имя макроса
Примечание^
СдвигРазмер Окна формы ДОГОВОР С ПОКУПАТЕЛЕМ ОткрытьФорму НАКЛАДНАЯ СдвигРазмер Окна формы НАКЛАДНАЯ ПоказатьВсеЗаписи Снять фипьтр с текущей формы НАКЛАДНАЯ ВыделитьОбъект Форму НАКЛАДНАЯ Применитьфильтр _jj [НОМ_ДОГ]=[Формы] [[ДОГОВОР СПОКУПАТЕПЕМ]![НОМ_ДОГ]
"
"
Аргументы макрокоманды Имя фильтра Условие отбора
[НОМ_ДОГНФормы]![ДОГС Применение фильтра, запроса и пи предложения WHERE (SQL) к таблице, форме или отчету для отбора или сортировки записей таблицы, формы или базовой таблицы/запроса отчета, Для травки нажмите F1,
Рис. 14.15. Макрос, организующий синхронный просмотр данных в двух формах
Форма Макзт
j Данные
События
После подтверждения Del Открытие Загрузка Изменение оазмеоа . . .
Другие |
Все
Накладные,Ml
Рис. 14.16. Окно свойств формы ДОГОВОР С ПОКУПАТЕЛЕМ со ссылкой на макрос
ном^дог Макет
Данные
События [ Другие |
Двойное нажатие кнопки
Все
Накладные. М2
-lUl v
Рис. 14.17. Окно свойств поля НОМ_ДОГ со ссылкой на макрос в событии Двойное нажатие кнопки
Глава 14. Создание макросов
543
Событие Двойное нажатие кнопки (On Dbl Click) для элемента управления ном_дог возникает, когда пользователь дважды нажимает и быстро отпускает левую кнопку мыши в тот момент, когда курсор мыши установлен на поле ном__дог или присоединенной к нему надписи. 6. Чтобы проверить работу макросов, откройте форму ДОГОВОР С ПОКУПАТЕЛЕМ. На экране будет отображен результат работы макроса M l — открытая форма НАКЛАДНАЯ. Причем в форме будут доступны записи обо всех накладных. 7. Выполните двойной щелчок по полю с номером договора в форме ДОГОВОР С ПОКУПАТЕЛЕМ. Результат выполнения макроса М2 отобразится в форме НАКЛАДНАЯ. К ней применен фильтр, в котором в качестве условий отбора записано [ном_дог]=чюрмы![ДОГОВОР с ПОКУПАТЕЛЕМ] ! [ном_дог] и доступны только записи со значением номера договора из формы ДОГОВОР С ПОКУПАТЕЛЕМ. 8. Чтобы макрос М2 выполнялся, когда пользователь, работая в форме ДОГОВОР С ПОКУПАТЕЛЕМ, входит в поле ном_дог: • удалите связь макроса М2 с событием Двойное нажатие кнопки (On Dbl Click) для элемента управления ном_дог (см. рис. 14.17); • установите его связь с событием Вход (Enter) этого же элемента управления. Событие Вход (Enter) наступает при перемещении курсора в поле ном_дог, при переходе к другой записи, если текущим является поле ном_дог. Кроме того, при открытии формы наряду с событием Открытие для текущего элемента управления формы наступает событие Вход (Enter). При открытии формы текущим элементом управления является поле, которое стоит первым в списке, определяющем последовательность перехода по элементам управления области данных. Если поле ном_дог размещено в области данных формы и стоит на первом месте в списке, то оно будет текущим и для него наступит событие Вход (Enter). В результате при открытии формы выполнятся оба макроса. Просмотрите последовательность перехода по элементам управления в форме ДОГОВОР С ПОКУПАТЕЛЕМ, выполнив команду Последовательность перехода (Tab Order) в контекстном меню формы или элемента управления.
Внимание Одно действие пользователя может приводить к возникновению нескольких событий. При этом важно знать последовательность наступления этих событий, т. к. это определяет и последовательность выполнения макросов.
544
Часть III. Разработка приложения пользователя
9. Откройте форму ДОГОВОР С ПОКУПАТЕЛЕМ и убедитесь, что при переходе от записи к записи синхронно отображаются соответствующие записи формы НАКЛАДНАЯ. Курсор должен оставаться в поле ном__дог.
Макрос для оперативных расчетов при вводе данных в базу При разработке практических приложений часто при вводе данных документов необходимо решать простейшие задачи, позволяющие отслеживать изменения ситуации по текущим процессам. Например, в процессе ввода данных накладной целесообразно оперативно подсчитывать текущее суммарное количество отгруженных товаров по покупателям для аналитической оценки выполнения плана поставки товаров. Для сохранения рассчитываемого количества товаров создадим таблицу отгрузки покупателям, которая включает поля код_пок — код покупателя, код_тов — код товара, СКОЛ_ОТГР — суммарное количество отгруженного. Таблицы имеют составной ключ код_пок+код_тов. Ключ в таблице исключает повторный ввод записи с одинаковыми значениями ключа. В процессе ввода данных строки накладной должно осуществляться обновление таблицы Отгрузки покупателям. При вводе данных по отгрузке покупателю товара, не представленного в таблице, в нее добавляется новая запись. В противном случае в записи с соответствующим ключом код_пок+код_тов к значению в поле СКОЛ_ОТГР прибавляется количество товара (поле КОЛ_ОТГР) из загружаемой строки накладной. Ввод данных накладной производится через форму НАКЛАДНАЯ (см. главу 6). Основная часть формы в соответствии с подсхемой (см. рис. 6.30 главы 6) позволяет ввести запись в таблицу НАКЛАДНАЯ, при этом отображаются связанные данные из главных по отношению к ней таблиц СКЛАД, ДОГОВОР и ПОКУПАТЕЛЬ. Подчиненная форма (с именем ОТГРУЗКА_ПФ) позволяет ввести связанные с таблицей НАКЛАДНАЯ записи в таблицу ОТГРУЗКА, сохраняющую сведения из спецификации накладной, при этом отображаются связанные данные из главной по отношению к ней таблицы ТОВАР. 1. Для решения задачи создайте группу макросов Суммарные отгрузки (рис. 14.18), включающую следующие макросы: •
ОтКрЫТЬ, КОТОРЫЙ будет ОТКрЫВатЬ форму Отгрузки
покупателям В
начале работы с накладными; •
ОбнОВИТЬ, КОТОРЫЙ будет ЗаПОЛНМТЬ Таблицу Отгрузки
покупателям
через соответствующую однозаписевую форму; • Отчет, который будет распечатывать отчет с анализом выполнения плана поставки товаров покупателям по завершении ввода данных накладных.
Глава 14. Создание макросов
545
Суммарные отгрузки : майрос Имя макроса]
Отчет
Имя фильтра Условие отбора
Условие
Макрокоманда Примечание ОткрытъФорму Отгрузки покупателям ВыделитьОбъект Обновляемую форму Отгрузки покупателям ПрименитьФильтр|_^ [КОД_ПОК]=[Формы]1 [НАКЛАДНАЯ]![КОД_ПОК] And [Формы]![Отгрузки ЗадатьЗначение Если отгрузка товара покупателю производится ЗадатьЗначение впервые, сформировать ключевые пц.ля ЗадатьЗначение Прибавить количество отгружаемого Закрыть Форму Отгрузки покупателям ОткрытьОтчет Напечатать отчет с анализом выполнения поставок Аргументы макрокоманды [КОД_ПОК]=[Формы]![НАКГ
Применение фильтра, запроса или предложения WHERE (SQL) к таблице, форме или отчету для отбора или сортировки записей таблицы, формы или базовой та блицы/за проса отчета. Для справки нажмите F1.
Рис. 14.18. Макрос формирования суммарного количества отгружаемых товарок при вводе накладных
Замечание Отчет может быть создан на основе таблиц с данными о покупателях, договорах, плановых поставках или соответствующих запросах и таблицы Отгрузки покупателям, содержащей данные о фактически поставленном количестве товара
2. В первом макросе с именем Открыть введите макрокоманду сткрытьформу (openForm) Отгрузки покупателям, которая используется для заполнения соответствующей таблицы во втором макросе. 3. Если форма не должна отображаться на экране, введите после макрокоманды ОткрытьФорму (OpenForm) макрокоманду Свернуть (Minimize), применяемую к окну текущего объекта. Если вы хотите наблюдать синх р о н н ы й процесс ввода данных и заполнения таблицы, можно не сворачивать форму, а дополнить макрос макрокомандами, определяющими размещение объектов на экране, чтобы получить удобное отображение обеих форм. 4. Для выполнения макроса в момент, когда пользователь открывает форму НАКЛАДНАЯ, в свойства формы в строку события Открытие (On Open) введите имя макроса Суммарные отгрузки.Открыть. В результате этого макрос будет выполняться один раз в начале сеанса ввода данных. Второй макрос — Обновить — выбирает в форме ОТГРУЗКИ ПОКУПАТЕЛЯМ запись с ключом, соответствующим вводимой записи. Если в таблице нет записи с таким ключом, то формируется новая запись по отгрузке товара покупателю. В противном случае в найденной записи к суммарному количеству отгруженного товара прибавляется вновь введенное значение
546
Часть lit. Разработка приложения пользователя
количества. Макрос должен выполняться при наступлении события После вставки (After Insert) в подчиненной форме ОТГРУЗКА_ПФ, что обеспечивает расчет на основе введенных данных после их сохранения в базе. 5. Для того чтобы выбрать в форме ОТГРУЗКИ ПОКУПАТЕЛЯМ запись с ключом, соответствующим вводимой записи, сначала введите макрокоманду ВыделитьОбъект (SelectObject), КОТОрЭЯ ПОЗВОЛИТ СДСЛаТЬ ЗКТИВНОЙ ЭТУ форму, а затем — Макрокоманду ПрименитьФильтр (ApplyFilter), в аргументе которой в качестве условий отбора запишите [КОД_ПОК]=[Формы]![НАКЛАДНАЯ]!'КОЛ_ПОК] And [КОД_ТОВ]=[Формы]![НАКЛАДНАЯ;!;ОТГРУЗКА_ПФ].[Гогт]![КОД_ТОВ]
6. В результате выполнения фильтра, если покупателю ранее отгружался этот товар, текущей становится запись со значениями кода покупателя и кода товара из введенной записи формы НАКЛАДНАЯ. В противном случае текущей в форме становится новая запись. 7. Следующие макрокоманды должны заполнить поля выбранной записи. Эту операцию можно реализовать макрокомандой ЗадатьЗначение (setvalue), которая присваивает полю записи формы ОТГРУЗКИ ПОКУПАТЕЛЯМ значение из поля текущей записи формы НАКЛАДНАЯ. Аргумент макрокоманды Элемент (Item) определяет поле, которому должно присваиваться значение. Аргумент Выражение (Expression) определяет поле, из которого выбирается это значение. Выражение не должно начинаться со знака равенства. 8. Макрокоманды формирования ключа записи должны выполняться только в том случае, если выбрана новая запись. Для того чтобы проверить. является ли текущая запись в форме ОТГРУЗКИ ПОКУПАТЕЛЯМ новой, дополните окно макроса столбцом Условне (Condition), нажав соответствующую кнопку на панели инструментов, и в строку первой макрокоманды ЗадатьЗначение (SetValue) В столбец Условие (Condition) введите логическое выражение: [Формы]![Отгрузки покупателям]![КОД_ПОК]
Is Null
9. Если условие выполнено, нужно сформировать ключ новой записи. Макрокоманды ЗадатьЗначение (SetValue) присвоят ПОЛЯМ КОД ПОК И код_тов значения из вводимой записи накладной. Аргумент Элемент (Нет) первой макрокоманды определяет поле, которому должно присваиваться значение, и записывается в виде: [Формы] ! [Отгрузки покупателям] ! [КОД! ПОК]
Аргумент Выражение (Expression) определяет поле, из которого выбирается это значение, и записывается в виде: [Формы]![НАКЛАДНАЯ]![КОД ПОК]
Глава 14. Создание макросов
547
Аналогично для второй макрокоманды аргументы должны иметь вид: [Формы]![Отгрузки покупателям]![КОД_ТОВ] ; Формы]![НАКЛАДНАЯ]![ОТГРУЗКА ПФ].[Form]![КОД ТОВ]
i4
Замечание
)
Для ссылки на элемент управления в форме, из которой вызывается макрос, достаточно указать только имя элемента, для ссылки на другие объекты должен использоваться полный синтаксис. Поскольку присваиваемое значение код_тов выбирается из поля текущей записи подчиненной формы ОТГРУЗКА_ПФ, вызывающей макрос, в аргументе Выражение (Expression) макрокоманды ЗадатьЗначение (SetValue) можно записать только имя поля. 10, В ПерВОЙ Макрокоманде ЗадатьЗначение (SetValue) НУЖНО записать
приведенное условие, во второй — поставить многоточие. Это позволит выполнять макрокоманды только в том случае, если логическое выражение в условии принимает значение Истина. 11. Следующая Макрокоманда — ЗадатьЗначение (SetValue) — ДОЛЖНЭ об-
новлять поле суммарного количества. Она выполняется для любой записи. Введите следующие ссылки: [Формы]![Отгрузки покупателям]![СКОЛ_ОТГР]
в аргументе Выражение (Expression): [Формы]![Отгрузки покупателям]![СКОЛ_ОТГР]+[КОЛ_ОТТР]
Замечание Воспользуйтесь построителем для формирования сложной ссылки на элемент. Построитель вызывается щелчком по кнопке в правой части строки аргумента.
12. Свяжите этот макрос с событием подчиненной формы ОТГРУЗКА_ПФ, введя в строку свойства После вставки (After Insert) имя макроса Суммарные отгрузки. Обновить. 13. Третий макрос — Отчет — должен выполняться при закрытии пользователем формы НАКЛАДНАЯ. Введите в свойствах формы в строке события Закрытие (On Close) имя этого макроса Суммарные отгрузки.Отчет. 14. Введите в макрос макрокоманду закрыть (close) для формы Отгрузки покупателям, выбрав в строке аргументов Сохранение значение Да. Выполнение этой макрокоманды позволит сохранить в таблице последнюю сформированную запись и, таким образом, не потерять ее в отчете. 15. Для вывода отчета на экран в режиме предварительного просмотра используйте макрокоманду открыть Отчет (OpenReport). Имя отчета и режим его открытия укажите в аргументах макрокоманды. Если нет необходимости просматривать отчет, можно сразу получить печатный до-
Часть III. Разработка приложения пользователя
548
кумент, установив в аргументе режим печати. Открытый для просмотра отчет будет отображаться на экране до тех пор, пока пользователь не закроет его. 16. Для проверки макроса откройте форму НАКЛАДНАЯ, введите новые записи, закройте форму. На экране отобразится отчет.
Организация диалога в макросе В предыдущем примере при закрытии формы НАКЛАДНАЯ, через которую вводились данные об отгрузке товаров покупателям, было предусмотрено выполнение макроса для безусловной выдачи отчета с анализом выполнения плана поставки товаров. Дополним макрос макрокомандами, которые позволят в диалоге с пользователем определить необходимость вывода отчетов. 1. Для вывода вопроса о необходимости печати отчет можно использовать функцию MsgBcx. Дополните макрокоманду ОткрытьОтчет (OpenReport) В
макросе Суммарные отгрузки.Отчет, как показано на рис. 14.19.
Я Суммарные отгрузки : макрос Имя макроса Отчет
Условие
Закрыть MsgBox(" Вывеет и отчет о выполнении плана поставок?";68)=1 ОткрытьОтчет
Рис. 14.19. Использование функции в условии макрокоманды
2. Функция MsgBox выведет на экран окно, содержащее сообщение, подождет, пока пользователь нажмет кнопку, и возвратит значение, указывающее, на какую кнопку нажал пользователь. Текст сообщения формируется первым аргументом функции, тип окна, число и названия кнопок вторым аргументом, текст заголовка окна — третьим аргументом. Аргументы, заданные в примере, приводят к появлению окна, представленного на рис. 14.20. Поскольку третий аргумент не задан, в заголовке окна отображается имя базы данных. Поставка товаров Вывести отчет о выполнении плана поставок?
На
Рис. 14.20. Окно сообщения, выводимое функцией MsgBcx
Глава 14. Создание макросов
549
Функция MsgBox возвращает значение 1 при нажатии в окне сообщения кнопки Да и значение 2 при нажатии кнопки Нет. 3. Если пользователь нажмет кнопку Да, логическое выражение в условии принимает значение Истина и отчет будет открыт. В противном случае макрос завершит свое выполнение, не открывая отчета. После завершения ввода накладных может потребоваться не просто выбор типа "Да/Нет", а одного из нескольких альтернативных ответов пользователя, например, либо вывод отчета с анализом плана выполнения поставок, либо вывод списка отгруженных покупателям товаров, либо отказ от вывода. 1. Для вывода окна с произвольным числом альтернативных ответов пользователя используйте в качестве диалогового окна вспомогательную ферму. Форму можно создать в режиме конструктора, не указывая источника записей, с единственным элементом — полем со списком значений. На рис. 14.21 представлена форма ДИАЛОГ, в которой поле со списком имеет имя ПолеСоСпискомО.
Диалог: форма Выбери отчет,, который нужно вывести? * Область данных Анализ выполнения плана поставок Список отгруженных товаров Не выводить
|Быбе[ и отче PJ
КОТО эыи
нуи
"" '- *--*ч
1П Г., If,
]Свобс дныи
1 Запись:
И
-•-!,•;•
3
И
Рис. 14.21. Форма, включающая поле со списком значений
2. В свойствах поля со списком задан Источник строк, где через точку с запятой перечислены имена отчетов, выполнение которых может запросить пользователь, а также предусмотрен отказ от вывода отчета (рис. 14.22),
ёГПоле со списком: ПолеСоСпискомо ПолеСоСпискомО Макет
Данные
События { Другие |
Данные Маска ввода Тип источника строк Источник строк Присоединенный столбец
, . . . ,
Все
Список значений "Анализ выполнения плана поставок";''Список отгр 1
Рис. 14.22. Источники строк поля со списком значений в форме ДИАЛОГ
Часть III. Разработка приложения пользователя
550
3. Измените макрос Суммарные отгрузки.Отчет, как показано на рис. 14.23.
Ж Суммарные отгрузки : макрос Условие
Имя макроса I Отчет Отчет!
[ПолеСоСпискомО]="Анализ выполнения плана поставок" [П о леСоСпискомО]="Список отгруженных товаров"
[.._Маквдкди_анда_._ Закрыть ОткрытьФорму ОткрытьОтчет ОткрытьОтчет .Закрыть
I Примечание Форму Отгрузки лс Диалог Напечатать отчет Напечатать список Диалог
Рис. 14.23. Макрос вывода выбранного пользователем отчета
4. Вставьте перед макрокомандой вывода отчета макрокоманду открытия формы ДИАЛОГ. 5. Введите макрокоманды вывода отчетов с условиями их выполнения. В строку первой макрокоманды ОткрытьОтчет (openReport) запишите имя макроса Отчет!. Замечание Текстовые константы, с которыми сравниваются выбранные значения, заключаются в кавычки.
6. В форме ДИАЛОГ для элемента ПолеСоСпискомО откройте окно свойств (рис. 14.24) и выберите в строке После обновления (After Update) значение Суммарные отгрузки.Отчет 1. ПОЛБ со списком: ПолеСоСпискомО ПолеСоСпискомО Макет | Данные
v | События | Другие ]
До обновления После обновления Внесены изменения , ,
Все
]
Суммарные о т грузки. Отчет!
Рис. 14.24. Связь события После обновления с макросом
7. Откройте форму НАКЛАДНАЯ, введите несколько записей об отгруженных покупателям товарах. 8. Закройте форму, макрос Отчет откроет форму ДИАЛОГ. Выберите из списка нужный отчет, и макрос Отчет! выведет его и закроет форму. 9. Для распечатки отчета в любое время вне зависимости от закрытия формы НАКЛАДНАЯ откройте форму ДИАЛОГ, выберите из списка нужный отчет, и макрос Отчет! выведет его.
Глава 14. Создание макросов
551
Управление отображением элемента в форме Пусть в форме НАКЛАДНАЯ при вводе записи о товаре, отгружаемом покупателю впервые, должен появляться текст: "Отгружается впервые!" 1. Создайте в примечании подчиненной формы элемент управления Надпись со значением "Отгружается впервые!" Предположим, этот элемент имеет имя Надпись20.
Замечание Заметим, что размещение надписи в примечании ленточной формы позволит отобразить ее однократно. Причем обеспечится связь ее с текущей записью ленточной формы.
2. Свойству надписи Вывод на экран (Visible) присвойте значение Нет (No). 3. Макрос Суммарные отгрузки.Обновить (см. рис. 14.18) дополните макрокомандой ЗадатьЗначенке (setvalue), которая будет присваивать свойству v i s i b l e (Выводи а Экран) значение Да. Эта макрокоманда должна выполняться наряду с макрокомандами присваивания значений ключевым полям, поэтому размешаться она должна среди них, а в столбец Условие (Condition) нужно ввести многоточие. 4. В строку аргумента Элемент (Item) введите ссылку на свойство visible (ЗыводНаЭкран) элемента управления НадПИСь20: Надпись20.Visible.
5. В строку аргумента Выражение (Expression) введите значение этого свойства Да.
Замечание В ссылке Надпись20.Visible нет необходимости указывать имя подчиненной формы, поскольку она является текущей при получении управления макросом.
6. Для того чтобы при вводе записи о ранее отгружавшемся товаре надпись делалась невидимой, введите еще одну макрокоманду задатьЗкачение (secvaiue). Разместите ее перед первой макрокомандой присваивания значения ключевому полю, а в аргументе Выражение (Expression) в качестве значения свойства visible укажите Нет (No) (рис. 14.25). М Суммарные отгрузки ; макрос
ь , ;•,, j.iОбновить
Макрокоманда ВыделитьОбъект ПрименитьФильтр За д а т ьЗн ачение [Формы]![Отгрузки ЗадатьЗначение ЗадатьЗначение ЗадатьЗначение ЗадатьЗначение Услоеие
_Принечание Обновляемую форму Отгрузки покупателям Сделать невидимой надпись Отгружается впервые Если отгрузка товара покупателю производится BnepBbiej сформировать ключевые поля Сделать видимой надпись Отгружается впервые Прибавить количество отгружаемого
Рис, 14.25. Макрокоманды, изменяющие значения свойства надписи
552
Часть III. Разработка приложения пользователя
8. Проверьте работоспособность макроса. Откройте форму НАКЛАДНАЯ и, добавляя записи, убедитесь, что если вводится запись о товаре, который еще не отгружался покупателю, то появляется надпись "Отгружается впервые!" Надпись исчезает, если товар ранее уже отгружался покупателю. Контрольные вопросы 1. Как выполнить из макроса команду стандартного меню Access? 2. Чем определяется последовательность выполнения макрокоманд? 3. Выполнится ли Макрокоманда^ если Условие! в строке Макрокоманды! (см. рис. 14.2) примет значение False (Ложь)? 4. Какая макрокоманда позволяет изменить текущую запись в объекте? 5. Должен ли объект, в котором меняется текущая запись, быть текущим? 6. Станет ли объект текущим после выполнения макрокоманды, изменяющей текущую запись в нем? 7. Какая макрокоманда позволяет изменить значение поля записи? 8. Какой объект будет текущим в макросе, если он не установлен явно? 9. Можно ли в логическом выражении условия использовать функцию? 10. Как записывается ссылка на элемент управления в форме? 11. Каким знаком в ссылке на свойство отделяется имя свойства от имени элемента управления1? 12. Как организовать последовательное выполнение нескольких запросов действия? 13. Какие аргументы имеет макрокоманда открытьЗапрос? 14. Какое значение должен иметь аргумент Режим, чтобы макрокоманда открытьЗапрос приводила к выполнению запроса? 15. Какая макрокоманда позволяет из макроса вывести на экран сообщение? 16. Какая макрокоманда отключает вывод предупреждающих сообщений, выдаваемых выполняющимися запросами? 17. Какая команда позволяет начать выполнение макроса из окна базы данных? 18. Как организовать выполнение макроса при открытии формы? 19. Какая команда позволяет дополнить бланк макроса столбцом, в который вводятся имена макросов, составляющих одну группу? 20. Как записывается ссылка на макрос, который включен в группу? 21. Какая макрокоманда позволяет выполнить фильтрацию записей? 22. К какому объекту применяется команда фильтрации записей? 23. Какая макрокоманда позволяет снять действие фильтра?
Глава 14. Создание макросов
24. Почему
в
макрокоманде
553
ЗадатьЗначение
в
выражении
[Формы]![Отгрузки покупателям]![СКОЛ_ОТГР]+[КОЛ_ОТГР] При записи
ссылки на поле СКОЛ_ОТГР использован полный синтаксис, а для ссылки на поле КОЛ_ОТГР в форме ОТГРУЗКА_ПФ — нет? 25. Может ли одно действие пользователя приводить к возникновению нескольких событий? 26. Какие макрокоманды будут выполняться в макросе Суммарные оттрузки.Отчет! при отказе пользователя выводить отчет? Ответы 1. С ПОМОЩЬЮ макрокоманды Выполнить Команду (RunCommand).
2. Порядком размещения макрокоманд в программе и заданными условиями. 3. Да. 4. НаЗаписъ (GoToRecord).
5. Нет. 6. Нет. 7. ЗадатьЗначение (SetValue).
8. Объект, из которого вызывается макрос. 9. Да. 10. Forms![Имя формы]![Имя элемента управления'
П. Точкой. 12. Записать в макросе соответствующее число макрокоманд сткр 13. Имя запроса, Режим и Режим данных. 14. Таблица. 15. Сообщение (мздВох). 16. Установить Сообщения (SetWarnings). 17. Запуск (Run).
18. Записать в строку свойства события "Открытие" формы имя макроса. 19. Вид|Имена макросов (View|Macro Names). 20. ИмяГруппыМакросов.имяМакроса. 21. ПрименитьФильтр.
22. К текущему объекту. 23. ПоказатьВсеЗаписи.
24. Форма ОТГРУЗКА_ПФ является текущей.
25. Да. 26. Закрыть форму ДИАЛОГ.
Глава 15
Программирование на языке Visual Basic для приложений Многочисленные средства Access для интерактивной разработки базы данных и решения задач по обработке данных в ней являются основой для построения практических приложений пользователя. Однако если в приложении необходимо отслеживать и обрабатывать ошибки, создавать свои функции, в ходе выполнения приложения генерировать новые объекты, обрабатывать отдельные записи, а не наборы записей, организовывать при возникновении различных событий в одной задаче выполнение других задач, приходится использовать встроенный в Access объектно-ориентированный язык программирования Visual Basic for Applications —- VBA (Visual Basic для приложений). При разработке приложений целесообразно программировать те функции, которые не могут быть реализованы диалоговыми средствами. VBA позволяет создать в среде СУБД Access целостные графические диалоговые приложения пользователя с большими возможностями по управлению и контролю за их выполнением, решить сложные задачи, автоматизировать выполнение задач, устанавливая связи между различными объектами базы данных. VBA — это общее средство программирования для всего семейства Microsoft Office, включая Access, Word, Excel, Outlook и PowerPoint. Синтаксис, принципы работы, инструментарий, интерфейс VBA одинаковы для всех приложений Office, хотя каждое представляет свои объектные модели. VBA является производным от самостоятельной системы программирования Visual Basic. Приложения, разрабатываемые на VBA, могут выполняться только в той среде, в которой поддерживается VBA, в то время как Visual Basic ориентирован на полностью самостоятельную разработку автономных приложений. VBA имеет много общего с Visual Basic. Их синтаксис и интерфейс практически одинаковы. Если пользователь знаком с программированием на Visual Basic, то освоение VBA не должно вызвать трудностей.
Глава 15. Программирование на языке Visual Basic для приложений
555
VBA, обеспечивая простоту использования объектов, созданных диалогоиыми средствами Access, позволяет написать процедуры, динамически создающие, удаляющие и изменяющие данные и объекты в базах данных. VBA также является базовым программным средством, на котором созданы различные надстройки самого Access, расширяющие его функциональные возможности, например, многочисленные мастера. В простых приложениях применение программ Visual Basic ограничивается созданием процедур обработки событии и простых процедур-функций, используемых в выражениях.
Замечание В Access допускается одновременное использование макросов и программ на VBA. Заметим, что макрос можно преобразовать в процедуру обработки события или модуль. Для преобразования макроса, связанного с формой или отчетом, предназначена команда Сервис|Макросы|Преобразовать макрос (Tools) Macros 1C on vert Form's Macros to Visual Basic), доступная в модуле формы или отчета. Для преобразования макроса, не связанного с формой или отчетом, нужно сохранить макрос как модуль, воспользовавшись командой Файл] Сохранить как (File|Save As).
При создании приложений VBA целесообразно использовать для следующих целей: П создание нестандартных процедур обработки событий; П создание функций, выполняющих сложное вычисление, которое невозможно записать как выражение; П организация комплексного ввода параметров во время выполнения программы через диалоговое окно требуемого вида; П обработка каждой записи некоторого набора; О управление последовательностью выполнения команд в программах сложной структуры (например, исполнение условного цикла W H I L E . . .WEND); G обработка и устранение ошибок, возникающих при работе приложения, и вывод пользовательских сообщений о них; П создание новых объектов и их элементов во время работы приложения; П проведение транзакционных операций; П осуществление доступа к данным других приложений Office; П открытие и обработка данных нескольких баз в одном приложении; П обеспечение доступа к средствам операционной системы, например, проверка существования файла на диске.
556
Часть III. Разработка приложения пользователя
Общие сведения о языке VBA Основу объектно-ориентированного программирования составляют объекты, в качестве которых рассматриваются любые программируемые элементы. Основными объектами в Access являются таблицы, запросы, формы, отчеты, модули, макросы. Они строятся на основе более мелких объектов — элементов управления и объединяются в более крупные объекты — коллекции. Коллекция — это набор однотипных объектов. Все объекты имеют сохраняемый набор свойств, изменяя которые, можно управлять объектом. Пользователь может сам создать из программы на VBA любой объект и упраапять им. С каждым объектом связывается ряд методов — процедур, которые работают с объектами. Один и тот же метод может использоваться для обработки различных объектов. Все многообразие объектов, их свойств и методов обработки сводится в иерархически упорядоченные совокупности, что структурирует и облегчает программирование. В Access определен собственный набор объектов, которые объединяются в иерархическую структуру — модель объектов Access. Для обращения к объектам Access используются синтаксические конструкции VBA, определяемые моделью. Модель Access ориентирована на разработку приложения в программах VBA, включая создание форм, отчетов. При этом доступ к данным обеспечивается через объекты приложения, такие как формы и отчеты. Обращаясь к объектам модели, их свойствам и методам, в программе на VBA можно управлять текущим сеансом работы в Access, создать интерфейс разрабатываемого приложения, получить доступ и обработать данные базы. Для извлечения и обработки данных различных источников, создания и модификации их объектов: таблиц, индексов, связей, в Access используются различные средства доступа к данным. Основными моделями доступа к данным яштются DAO (Data Access Object — объекты доступа к данным) и ADO (ActiveX Data Object — объекты данных ActiveX). Метод DAO поддерживает интерфейс доступа к данным, взаимодействующий с ядром базы данных Microsoft Jet и ODBC-совместимыми источниками данных для подключения, загрузки, обработки и обновления данных. Напомним, что ядро Jet является компонентом Access, выполняющим загрузку и сохранение данных в базах данных пользователей и в системных базах данных. Jet может рассматриваться как диспетчер данных, на основе которого строятся СУБД, такие как Microsoft Access. Модель DAO поддерживает два различных рабочих пространства (workspaces): П Microsoft Jet workspaces предоставляет доступ к данным в базах данных Jet, источниках данных ODBC, использующих Jet, и источниках данных с
Глава 15. Программирование на языке Visual Basic для приложений
557
индексно-последовательным методом доступа ISAM, таких как Paradox. FoxPro, dBase; О ODBCDirect workspaces предоставляет доступ клиентскому приложению к данным сервера, такого как Microsoft SQL Server, через ODBC, не используя Jet. Метод ADO поддерживает интерфейс доступа к данным, взаимодействующий с источниками данных, совместимыми с OLE DB, для подключения, загрузки, обработки и обновления данных. ADO является моделью данных, используемой в Интернете, MSDE, SQL Server. Проекты и страницы доступа к данным, создаваемые в Access 2000, 2002 и 2003, используются только с ADO. В отличие от метода ОАО, предназначенного для использования только с Jet, QLE DB, обеспечивая универсальный доступ к данным, делает метод ADO независимым от источника данных. Модель ADO, переход к которой начался в 1999 году, — не просто заменитель DAO, это набор новых средств соединения с базой данных. При разработке Web-приложения с использованием средств программирования переход к ADO просто необходим. DAO не используется в HTMLсовместимых языках программирования, таких как VBScript или JavaScript. DAO используется только в Web-приложениях, созданных в Visual Basic 6.0, и классах Web. Объектно-ориентированный подход позволяет добавлять новые функциональные возможности, увеличивая число доступных при программировании объектов, методов и свойств. При этом синтаксис управления объектами остается прежним и язык программирования неизменным. Приложения VBA управляются событиями. В приложениях на VBA в отличие от традиционных систем программирования не используется управляющая программа, которая руководила бы его работой. В условиях непредсказуемой последовательности действий пользователя в диалоговом приложении выполнение определенного участка кода программы должно инициироваться наступлением какого-либо события, вызываемого прежде всего действиями пользователя при работе с объектами, например, щелчком мыши на элементе объекта или открытием формы. Большая часть программ, написанных на Access VBA, состоит именно из процедур обработки событий, сохраняемых в модулях форм и отчетов. В таком приложении пользователь или некоторое системное событие запускают процедуры обработки событий на VBA. Порядок выполнения программы зависит от порядка возникновения событий.
558
Часть III. Разработка приложения пользователя
Объекты и коллекции Для того чтобы при программировании правильно использовать многочисленные объекты, их свойства и методы, необходимо ознакомиться со структурой подчиненности объектов. Так, прежде чем начать работу с содержимым поля таблицы, необходимо получить доступ к базе данных, а затем — к таблице. Объекты, управление которыми осуществляется из программ VBA, образуют иерархическую структуру (модель объектов). Каждый из объектов располагает набором свойств, определяющих его характеристики, и методов, которые позволяют выполнять операции, присущие этому объекту. Наборы однотипных объектов объединяются в коллекции. Объекты и коллекции разделяются на классы. При разработке программы VBA в Access используется модель объектов Access и модели объектов доступа к данным DAO и ADO.
Модель объектов Access Модель объектов Access включает коллекции и объекты, составляющие выполняющееся приложение Access и используемые для работы с формами, отчетами, страницами доступа к данным, модулями, макросами, а также объектами других приложений, их свойствами и методами. На верхнем уровне иерархии располагается объект Application, позволяющий извлечь информацию о выполняющемся приложении. Объект Application включает коллекцию Forms (форм), Reports (отчетов), Modules (модулей), References (ссылок), объект screen (экран), объект DoCmd (команда) и ряд других. Коллекции Forms И Reports — ЭТО КОЛЛСКЦИИ ОТКрЫТЫХ форм И ОТЧСТОВ. ОНИ
содержат коллекции элементов управления Controls и свойств Properties. Образованная этими объектами и коллекциями иерархическая структура представляет активное приложение. Объект Screen (экран) и его свойства используются для ссылки на текущий (находящийся в активном окне) объект: форму, отчет или элемент управления. Объект DoCmd располагает методами, которые позволяют выполнить из программы на VBA макрокоманды Access. Обращение к объектам библиотек из процедур и функций Access осуществляется по установленным на них ссылкам. Коллекция References содержит в себе все объекты Reference, представляющие собой установленные в текущий момент ссылки на библиотеки типов других приложений. Список установленных ссылок можно просмотреть и изменить в окне, которое открывается командой Tools|References в окне редактора VBA. На рис. 15.1 представлено диалоговое окно References с установленными по умолчанию ссылками на библиотеки для баз данных Access 2003.
Глава 15. Программирование на языке Visual Basic для приложений
559
References - Постарка товаров Available References;
OK
Visual Basic For Applications V Microsoft Access 11.0 Object Library У OLE Automation • Microsoft ОАО 3.6 Object Library V. Microsoft ActiveX Data Objects 2.5 Library at ActiveX Control module IAS Helper COM Component 1,0 Type Library IA5 RADIUS Protocol 1.0 Type Library 1 Acrobat Acrobat Access 2.0 Type Library . Acrobat Distiller Acrobat WebCapture 1.0 Type Library 1 Acrobat WebCapture IE Toolbar/Favorites 1.0 Type I ArrnTFHfilnftr 1 .П Tvn« I \hrArv
HMEdit ActiveX Control module Location: Language:
Cancel Browse..
Priority
•
E:\Prograrn Files\Common Files\HyperMethod\nmedit,ocx Standard
Рис. 15.1. Установленные по умолчанию ссылки на библиотеки объектов в Access 2003 По умолчанию для новых баз данных и проектов, создаваемых в Access 2000, 2002 или 2003, устанавливается ссылка на объекты библиотеки Microsoft ActiveX Data Objects 2.5 Library (ADO 2.5). При открытии баз данных, созданных в предыдущих версиях, устанавливаются ссылки на объекты библиотеки Microsoft DAO 3.6 Object Library (DAO 3.6). Для объектов приложения Access устанавливается флажок Microsoft Access 11.0 Object Library. Установленная на библиотеку типов приложения ссылка позволяет использовать в программе VBA объекты этого приложения. Например, установка ссылки из Access на библиотеку Microsoft Excel позволяет использовать объекты Microsoft Excel. При наличии ссылки на проект VBA, разработанный для другой базы данных Access, становится возможным вызов общих процедур этого проекта. Указание конкретного объекта Application позволяет обращаться к другим его объектам из различных приложений, например, из Microsoft Excel. Ссылки на объекты используют их положение в иерархии объектов. Инструкция appAccess.DoCmd.OpenForm "Товар" определяет операцию ОТКРЫТИЯ формы Товар из некоторого приложения appAccess с помощью метода OpenForm объекта DoCmd.
560 ИНСТРУКЦИЯ
Часть III. Разработка приложения пользователя Forms!frmFaktura.RecordSource^strSource
ПОЗВОЛЯЕТ
обра-
титься К СВОЙСТВУ RecordSource ОТКРЫТОЙ форМЫ f r m F a k t u r a ИЗ КОЛЛСКЦИИ
Forms и присвоить ему значение, сохраняемое строковой переменной strSource. Заметим, что для обращения к свойству формы, открытой в режиме формы в ее собственном модуле класса, можно воспользоваться самоидентификатором Me (переводится как "я"): Me.RecordSource=strSource. Объект currentProject ссылается на проект— совокупность всех программных модулей базы данных, включая стандартные модули и модули класса — текущей базы данных Access (mdb) или проекта Access (adp). По умолчанию проекту присваивается то же имя, что и у базы данных. Объект currentoata ссылается на объекты, сохраненные в текущей базе данных — источнике приложения (Jet или SQL).
Модель объектов доступа к данным ОАО Другой большой класс объектов, используемых из программ VBA, составляют объекты доступа к данным. С помощью объектов доступа к данным обеспечивается взаимодействие VBA и ядра базы данных Jet. К объектам непосредственного доступа к данным относятся таблицы, запросы, связи, индексы. Объекты ОАО обеспечивают доступ и обработку данных в локальных и удаленных базах данных, управление базами данных, их объектами и структурой с помощью свойств и методов, а также позволяют создавать новые объекты, изменять структуру базы данных. На верхнем уровне модели объектов доступа к данным стоит объект DBEngine. В него входят объекты, представляющие рабочие области — workspace. Каждая рабочая область workspace, в свою очередь, включает коллекцию из одного или нескольких объектов баз данных — Database. Каждый объект Database содержит коллекцию из одного или нескольких объектов-таблиц — TabieDef, запросов QueryDef, наборов записей — Recordset и т. д. Таким образом, каждый объект может содержать коллекции более низкого уровня в иерархии. Работа с открытой базой данных ведется с помощью объекта Database и его МеТОДОВ И СВОЙСТВ. Например, ИСПОЛЬЗуЯ ДЛЯ Объекта Метод OpenRecordset,
можно выполнить запрос на выборку и создать объект Recordset, с помощью методов CreateTableDef И CreateRelation — СОЗДЗТЬ таблицы И СВЯЗИ. Коллекция Recordsets содержит все открытые объекты Recordset. Каждый Объект Recordset ВКЛЮЧЭеГ КОЛЛСКЦИЮ ПОЛеЙ Fields. Объекты Recordset
используются для обработки данных в базе данных на уровне записи. При работе с данными почти все операции выполняются с помощью объектов Recordset, т, к. создание и просмотр набора записей — это основная цель всех интерфейсов баз данных Access.
Глава 15. Программирование на языке Visual Basic для приложений
561
Объекты Recordset могут быть нескольких типов: D объект Recordset типа таблицы — это представление таблицы базы данных, которое используется для добавления, изменения или удаления записей из нее; О объект Recordset типа динамического набора записей -• это набор обновляемых записей, полученный в результате выполнения запроса. В объекте Recordset этого типа могут содержаться поля из одной или нескольких таблиц базы данных. Этот объект используется для добавления, изменения или удаления записей в одной или нескольких таблицах. Новый объект Recordset автоматически добавляется в коллекцию Recordsets при открытии объекта и автоматически удаляется из семейства при закрытии объекта. Если созданный объект Recordset содержит записи, то текущей записью становится первая запись. Изменить положение указателя Текущей заПИСИ ПОЗВОЛЯЮТ МеТОДЫ MoveNext, MovePrevious, MoveFirst и MoveLast. При выполнении цикла по всем записям с помощью методов Move свойства ВОР и EOF используются для проверки начальной и конечной границ объекта Recordset. Коллекция TableDefs содержит объекты TableDef с определениями структуры таблиц базы данных. Объект TableDef включает две коллекции: полей Fields И ИНДеКСОВ Indexes.
Можно манипулировать структурой таблиц, используя объект TableDef, его методы и свойства; для модификации данных в таблице используется объект Recordset.
Коллекция Fields содержит сохраненные объекты Field не только объекта T a b l e D e f , НО И объектов Index, Q u e r y D e f , Recordset, Relation. Коллекция Fields объектов T a b i e D e f , I n d e x , QueryDef И R e l a t i o n СОДСрХИТ
спецификации полей, входящих в эти объекты. Коллекция Fields объекта Recordset представляет объекты Field, содержащиеся в записи. Объекты Field, входящие в объект Recordset, используются для чтения и задания значений полей в текущей записи объекта Recordset. Объект index задает упорядочивание и однозначность значений, с помощью которых обеспечивается эффективный доступ к записям в таблицах. Объекты доступа к данным ОАО используются как для работы с базами данных, имеющими формат MDB, так и для доступа к таким базам данных, как FoxPro, dBase, Paradox или к таблицам Excel и текстовым файлам с разделителями. Кроме того, методы объектов доступа к данным обеспечивают доступ к серверу Microsoft SQL Server и другим базам данных, поддерживающим драйвер ODBC. Объекты доступа к данным ОАО можно использовать в программах V8A, только если установлена ссылка на библиотеку ОАО. Она устанавливается в
Часть III. Разработка приложения пользователя
562
окне редактора VBA, где командой ToolsjReferences (Сервис|Ссылки I открывается окно со списком доступных ссылок и устанавливается флажок элемента Microsoft DAO 3.6 Object Library
Модель объектов ADO Модель объектов ADO (ActiveX Data Objects) позволяет в программе получить доступ и манипулировать данными базы, размещенной на сервере, через OLE DB-провайдер. Эта модель предоставляет возможность обрабатывать данные различных форматов, в том числе реляционных источников данных, почтовых файлов, неформатированных текстовых файлов и электронных таблиц. Она обеспечивает простоту использования и высокую скорость. ADO используется при разработке клиент-серверных и Web-приложений. В VBA ADO используется в качестве посредника при соединении с OLE DB. Набор интерфейсов, используемый в технологии OLE DB, отображается в три типа объектов верхнего уровня модели ADO: connection, Command, Recordset (рИС. 15.2).
Record"
[
Errors
Stream
Fields
Error
Field
-| Properties Ц
О Коллекции ] Обьекты
Property Рис. 15.2. Модель объектов ADO
D connection. Этот объект определяет провайдера OLE DB, устанавливает соединение с источником данных и обеспечивает среду для создания наборов строк и изолированных транзакций. Метод Execute этого объекта возвращает объект Recordset с последовательным доступом. О Command. В такие объекты помещают операторы SQL, имена таблиц или имена сохраненных процедур. Служат они в основном для выполнения запросов SQL, которые не возвращают данных, таких как UPDATE, INSERT, DELETE, и запросов языка описания данных. С помощью данного объекта также можно создать объект Recordset. П Recordset. С помощью этого объекта таблицы и наборы, полученные в результате выполнения запроса, отображаются в памяти. Перед использованием объектов Command и Recordset необходимо открыть объект Connection.
Глава 15. Программирование на языке Visual Basic для приложений
563
Для того чтобы в программах VBA можно было использовать объекты модели ADO, необходимо установить ссылку на библиотеку ActiveX Data Objects. Объекты различных библиотек могут иметь объекты с одинаковыми названиями, например, Recordset есть в ADO и ОАО. Префикс ADODB, получаемый при сокращенном написании типа библиотеки ADO, используется при обращении к объектам ADO, например: ADODE.Recordset. В ADO реализована концепция независимости объектов. Так, в ОАО для создания объекта необходимо предварительно установить каждый объект иерархической структуры модели: Dim Dim Dim Set Set Set
wrksName As DAO.Workspace dbName As DAO.Database rstName As DAO.Recordset wrksName=DBEngine.Workspaces(0) dbName=wrksName.OpenDatabase ("ИмяВазыДанных.тс1Ь") rstName=dbName.OpenRecordset("Оператор SQL")
В процессе спуска по иерархической схеме методами родительского объекта открывается новый дочерний объект. В ADO широко используется другой подход, обеспечивающий создание независимых, повторно используемых экземпляров объектов: Private cnnName As New ADODB.Connection Private cmmName As New ADODB.Command Private rstName As New ADODB,Recordset Записываются эти инструкции в разделе описания модуля. После выполнения описания необходимо активизировать объект, определив свойства нового экземпляра объекта и применив методы open для объекта Connection И Execute ДЛЯ объекта Command. Вызов Метода Open ДЛЯ объекта ADODB.Recordset, 3 НС МСТОДЭ OpenRecordset, ИСПОЛЬЗуемОГО В DAO ДЛЯ объекта DAO. Database, делает объект независимым. Независимость объекта и пакетная ориентировка позволяют при необходимости отсоединиться от источника базы данных, например, закрыв в объекте ADODB.Recordset объект ADODB. Connection. ЛОСЛС ЭТОГО объект Recordset ИЗМСНЯСТСЯ ЗВТОНОМНО. Далее можно заново открыть объект connection и при новом соединении провести изменения в источнике. Объект Recordset, для которого не установлено активное соединение, называется отсоединенным. Объекты верхнего уровня содержат зависимые коллекции: П объект connection включает коллекции Errors и Properties. Коллекция Errors имеет одно свойство: Count — которое позволяет определить, возникла ли ошибка при выполнении метода в объектах connection, Command И Recordset; 19 Зак 835
564
Часть III. Разработка приложения пользователя
О объект Command включает коллекцию Parameters, которая используется для предоставления и ввода значений параметров. В коллекции должен обязательно присутствовать объект Parameter для каждого параметра сохраненной процедуры или запроса с параметрами; П объект Recordset предоставляет широкие возможности по обработке записей. Открыв объект Recordset с произвольным доступом, его можно использовать в качестве источника записей одной или нескольких форм. В коллекцию Fields этого объекта нельзя добавить новые объекты (за редким исключением). Все значения свойств объектов Field, кроме value, имеют атрибут "только чтение". Свойство value имеет атрибут "только чтение" для объектов Recordset с последовательным методом доступа и объектов Recordset, открытых с блокировкой "только чтение".
Модули VB А Основой программ на VBA являются процедуры, состоящие из инструкций, которые выполняют необходимые операции и вычисления. Каждая процедура имеет имя, по которому она вызывается на выполнение. Процедуры на языке VBA, входящие в состав приложения, хранятся в модулях. Вызвать на выполнение можно только процедуры, запросить выполнение модуля в целом невозможно. Модуль является структурой, сохраняющей некоторый набор описаний и процедур, и способом организации процедур. Он предназначен для удобного объединения процедур по их функциональному назначению или привязке к форме или отчету. В соответствии с этим модули подразделяются на стандартные и модули форм или отчетов, которые являются модулями класса, связанными с определенной формой или отчетом. Стандартные модули Стандартные модули являются отдельными объектами базы данных и представлены в окне базы данных на вкладке Модули (Modules). Процедуры этих модулей не связаны с возникновением какого-либо события и предназначены для использования в любых частях создаваемого приложения. Стандартные модули позволяют сгруппировать взаимосвязанные процедуры. Процедуры этих модулей доступны из любых других объектов базы данных. Вызов этих процедур может осуществляться из процедур других стандартных модулей, процедур обработки событий, макросов и просто из выражений. Модули: форм и отчетов Любая форма и любой отчет базы данных могут содержать один модуль модуль формы или отчета. Такой модуль предназначен для сохранения про-
Глава 15. Программирование на языке Visual Basic для приложений
565
цедур, связанных с обработкой событий в форме или отчете. Процедуры обработки событий, созданные для формы или отчета, становятся их новы VIM методами. Наряду с процедурами обработки события такой модуль может содержать обычные процедуры для типовых действий. Процедуры обработки событий могут быть созданы для каждого события каждого элемента формы или отчета и каждого из возможных событий самой формы или отчета. Процедура обработки события имеет составное имя, включающее имя объекта (элемента) и имя события. Процедура выполняется при наступлении в объекте события, с обработкой которого она связана. Событие может быть вызвано системой, программой или действиями пользователя. Примерами событий являются щелчок мыши на элементе формы или отчета, двойной щелчок мыши, получение элементом фокуса, открытие, закрытие формы или отчета и т. д. Для того чтобы имеющаяся процедура выполнялась при возникновении события для некоторого элемента, в его свойствах для данного события должно быть установлено значение [Процедура обработки события] [Event Procedure]. В противном случае связь с процедурой будет отсутствовать. С установки этого значения может начинаться создание процедуры обработки события. По щелчку на значке Построить (Build) открывается окно модуля формы в редакторе VBA с подготовленным для выбранного события элемента шаблоном процедуры. При открытом окне модуля формы (отчета) можно получить шаблон любой возможной процедуры, если выбрать элемент и событие. Для связи записанной в этот шаблон процедуры необходимо в свойствах соответствующего элемента установить для события значение [Процедура обработки события] [Event Procedure]. Модуль формы или отчета создается автоматически при создании первой процедуры обработки события в форме (отчете) или при выполнении команды Вид|Программа (View Code) для текущей формы. Модуль существует, пока существуют форма или отчет, копируется и удаляется вместе с ними. В отличие от макросов, которые хранятся отдельно от форм и отчетов, где они используются, модули связаны с формой или отчетом, что упрощает сопровождение приложения. В качестве примера на рис. 15.3 показано окно модуля формы ДОГОВОР С ПОКУПАТЕЛЕМ, где отображена процедура обработки события Click (Нажатие кнопки) для элемента Кнопка (Command Button). Эта процедура была создана мастером кнопок. В верхней части окна представлены два списка: список элементов формы и открытый список событий для выбранного элемента.
Часть Ш. Разработка приложения пользователя
566
Si Поставка товаров - Рогт_ДОГОВОР С ПОКУПАТЕЛЕМ (Code) SBB
£
1ОПК4
TJ
Click
TJ
Private Sub Кнопка C l i c k () DblClick On Error GoTo Err Кнопка С Erdet Exit GolFocus KeyDown DoCrod. Close Key Press KeyUp E x i t Кнопка C l i c k : LoslFocus E x i t Sub Mouse Down Wo use Move Err KEtonKa_Click: Mouseup HagBox Err . D e s c r i p t i o n Resume Exit Кнопка C l i :k
а• .iILJ End Sub
лГ
Рис. 15.3. Окно модуля формы ДОГОВОР С ПОКУПАТЕЛЕМ
Структура модулей Стандартный модуль состоит из общей области, которая включает раздел описаний и процедуры на языке VBA (рис. 15.4). Стандартный модуль
Процедура 1 ч
Процедура N
Рис. 15.4. Структура стандартного модуля VBA
Раздел описаний модуля содержит определения переменных, констант и объектов, которые используются в процедурах. Наличие переменных является одной из отличительных особенностей модулей по сравнению с макросами. С помощью переменных в процедуры передаются аргументы, в ходе выполнения процедур сохраняются рабочие промежуточные значения, осуществляется обмен данными между процедурами. Переменные существуют
Глава 15. Программирование на языке Visual Basic для приложений
567
только внутри программ. Каждая переменная имеет имя. В разделе описаний могут храниться внешние процедуры, которые так же, как описания, могут использоваться во всех процедурах модуля. Переменные и константы, описанные внутри процедуры, действуют только в ее пределах. В стандартном модуле хранятся обычные процедуры типа sub и Function. sub — процедура-подпрограмма, которая не возвращает значения вызывающей процедуре. F u n c t i o n — процедура-функция, которая возвращает значение в выражение. Обычные процедуры не связаны ни с одним из событий объектов. Процедуры стандартного модуля могут быть общими (Public) и личными (Private). По умолчанию процедуры являются общими и доступны из любых других процедур базы данных. Личные процедуры могут использоваться только внутри того модуля, в котором они хранятся. Модуль может не содержать процедур и функций и применяться только для объявления глобальных (Public) переменных и констант, используемых процедурами и функциями других модулей. Модуль форм или отчетов помимо общей области, имеющей структуру, аналогичную структуре стандартного модуля, включает процедуры обработки событий (рис. 15.5). Модуль формы или отчета — Общая область — Раздел описаний . Процедуры Элемент управления 1 Процедура обработки события 1 Процедура обработки события NJ Элемент управления М Процедура обработки события 1 Процедура обработки события N |
Рис. 15.5. Структура модуля формы или отчета
В общей области модуля формы или отчета, как и в стандартном модуле, помимо описаний хранятся обычные процедуры. Они могут быть процедурами типа sub и Function и объявляются общими или личными.
568
Часть III. Разработка приложения пользователя
Процедуры обработки событий являются процедурами типа Sub и всегда являются личными и связанными с конкретным элементом и конкретным событием. При наступлении любого события любого объекта автоматически выполняется процедура обработки события, связанная с этими объектом и событием.
Замечание
J
При переименовании элемента управления все процедуры обработки событий, связанные со старым именем элемента, перемещаются в общую область (General) и переводятся в разряд обычных. Элемент, получая новое имя, теряет привязанные к его событиям ранее созданные процедуры обработки событий. Чтобы имя процедуры соответствовало новому имени элемента, необходимо изменить имя процедуры.
Для просмотра текста процедуры обработки события конкретного объекта (элемента управления) в окне модуля в поле со списком объектов выбирается этот объект, и затем в поле со списком событий — имя нужного события. Для перехода к тексту обычной процедуры в окне модуля в поле объектов выбирается строка Общая область (General), а в поле процедур — имя нужной процедуры.
Процедуры Основой программ на VBA является процедура — поименованная самостоятельно выполняемая компонента программ на VBA. Процедура состоит из последовательности инструкций и методов, которые решают определенную задачу. Инструкция определяет операцию или описание объектов, переменных, констант, которые используются в операции. Метод — это инструкция, которая определяет операцию или функцию, применяемую только к объектам. В VBA используются процедуры двух типов: процедуры-подпрограммы процедуры типа sub и процедуры-функции — процедуры типа Function. Каждая процедура имеет имя, по которому она вызывается на выполнение,
Процедуры-подпрограммы Процедура-подпрограмма, называемая Sub-процедурой, может выполнять любые действия. В результате ее работы выполняется некоторая задача, например, корректировка данных базы, открытие формы, вывод отчета. Процедура Sub может вызываться из других процедур по имени. Удобно один раз создать процедуру, а затем вызывать ее по мере необходимости из различных программ, передавая ей разные аргументы. Принимаемые аргументы могут регулировать ход выполнения процедуры. После выполнения
Глава 15. Программирование на языке Visual Basic для приложений
569
процедуры sub управление передается в приложение или процедуру, которая вызвала ее. Процедура Sub не может возвращать значения вызывающей программе. Поэтому процедура sub не может использоваться в выражениях. Формат процедуры-подпрограммы sub: ;Private I Public] [Static] Sub Имя Процедуры [(список аргументов)] [инструкции] [Exit ЗмЬ] [инструкции]
End Sub
В формате процедуры ключевые слова служат для следующих целей: П sub и snd Sub отмечают начало и конец тела процедуры; П public -- указывает, что процедура sub является общей, т. е. доступной для всех других процедур во всех модулях; П private — указывает, что процедура sub доступна для других процедур только того модуля, в котором она описана; П static — указывает, что локальные переменные процедуры sub сохраняются в промежутках времени между вызовами этой процедуры; О Exit Sub - - приводит к немедленному завершению процедуры sub. В любом месте процедуры sub возможно наличие инструкции Exit si:b. На число этих инструкций в процедуре ограничений нет. Имя процедуры Sub должно соответствовать стандартным соглашениям об именах переменных. Список аргументов является списком переменных, которые передаются процедуре sub при ее вызове. Несколько переменных разделяются запятыми. Имена переменных, представляющих аргументы, должны соответствовать стандартным соглашениям об именах переменных. Все выполняемые инструкции — команды — должны содержаться в теле процедуры. Невозможна запись процедуры sub внутри другой процедуры Sub или Function, т. е. не может быть вложенных процедур. Процедуры Sub, в которых не заданы явно ключевые слова Public или Private, по умолчанию являются общими. Если не используется ключевое слово static, значения локальных переменных не сохраняются между вызовами процедур. Переменные, используемые в процедурах sub, разбиваются на две категории: явно и неявно описанные внутри процедуры. Переменные, которые явно описаны в процедуре, например, инструкцией Dim, всегда являются локальными для этой процедуры. Переменные, которые используются, но
Часть III. Разработка приложения пользователя
570
явно не описаны в процедуре, также являются локальными, если они не были описаны явно в некоторой внешней процедуре. Процедура обработка событий — это личная процедура-подпрограмма типа sub, связанная с конкретным элементом и конкретным событием и автоматически выполняемая в ответ на это событие. Процедура обработки событий является частью модуля формы или отчета. Она создается либо автоматически (например, мастером кнопок), либо пользователем.
Процеду ры-фун кции Процедура-функция Function, как и процедура-подпрограмма, является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций. Однако в отличие от процедуры-подпрогр а м м ы процедура-функция возвращает значение, которое присваивается ее имени внутри процедуры. Поэтому процедура-функция обычно используется в выражениях, как любая встроенная функция Access. Процедура Function вызывается в выражении по своему имени, за которым в скобках следует список аргументов. Со встроенными функциями, например, s u m ! ) , H O W ; ) и т. п., мы встречались при разработке форм и отчетов. Пользователь может создать свою процедуру-функцию и использовать ее неоднократно. Формат процедуры-функции: [Public I Private] [Static] Function имя процедуры ([список аргументов]) [As тип данных] [инструкции] [имя процедуры=выражение" [Exit Function] [инструкции] [имя процедуры=выражение] End Function
В формате процедуры-функции в отличие от процедуры-подпрограммы присутствует инструкция присваивания имени процедуры значения, вычисляемого выражением. Эта инструкция позволяет возвратить значение из процедуры-функции в место ее вызова. В связи с этим для имени функции может определяться тип данных возвращаемого процедурой значения. Если имени процедуры не присваивается никакого значения, процедура возвращает значение по умолчанию: числовая функция возвращает нулевое значение, строковая функция возвращает значение пустой строки (""), а функция типа variant возвращает пустое значение Empty. Ключевые слова Exit Function приводят к немедленному завершению процедуры, как и Exit sub в процедурах sub.
Глава 15. Программирование на языке Visual Basic для приложений
571^
Пример пользовательской процедуры-функции для расчета по некоторому сложному выражению запишется так: Function Calc (FieldN As Integer) As Double Са1с=<сложное выражение, использующее значение аргумента> End Function
Здесь Calc — имя процедуры-функции, которой передается аргумент F i e i J N для использования его в выражении. Результат вычисления выражения присваивается функции Calc. При обращении к этой процедуре по имени Са:_с и передаче ей некоторого значения аргумента FieldH получим значение, являющееся результатом вычисления сложного выражения. Рассмотрим пример пользовательской процедуры Function с именем. НачалоСледующегоМесяца, которая возвращает дату первого дня следующего месяца: Function НачалоСледующегоМесяца(} НачалоСледующегоМесяца=ОаЪеЗег1а1(Year(Now),Month(Now)+],1] End Function Данная функция состоит из единственной инструкции присвоения, в которой результат Выражения Присваивается фуНКЦИИ НачалоСледующегоМесяца. Результат рассчитывается с помощью встроенных функций Visual Basic DateSerial, Y e a r , Now И Month.
Выполнение процедур VBA Программа VBA состоит из совокупности процедур типа sub или Function, с помощью которых выполняются требуемые действия или производятся расчеты. Для выполнения программы надо запустить процедуру, содержащую эту программу. Однако модули, в которых сохраняются процедуры, не являются выполняемыми объектами. Процедуры модулей форм (отчетов), которые привязаны к событиям элементов управления или событиям формы (отчета), выполняются с наступлением соответствующего события. Процедуры обшей области модулей выполняются либо при выполнении выражения, где есть ссылка на процедуру, либо при вызове процедуры из других процедур или макросов. Таким образом, для выполнения программ VBA может быть выбран один из следующих способов: П включение программы в процедуру обработки события; D вызов процедуры-функции в выражении; П вызов процедуры в другой процедуре; G выполнение макрокоманды запускПрограммы (Runcode) в макросе.
572
Часть ///. Разработка приложения пользователя
Макрокоманда залу сопрограммы (Rur.code), выполняемая в макросе, может вызывать встроенную функцию VBA или функцию, созданную пользователем. Для запуска процедуры sub следует создать функцию, которая вызывает процедуру Sub, и с помощью макрокоманды запускпрограммы (RunCocie) вызвать эту функцию. Например, чтобы вызвать процедуру sub Ann ( ) , нужно создать процедуру-функцию Anni, в которой записать обращение к A n n : ; , и в параметрах макрокоманды указать Anni. Function Anni()
Ann
()
End Function
Инструкции Процедуры состоят из последовательности инструкций, которые реализуют алгоритм поставленной задачи. Декларативные инструкции в процедурах и в общей области модуля создаются для описания переменных, констант, объектов; инструкции определяют их имена и специфицируют тип данных. Инструкции присваивания приписывают переменным и константам значения или выражения. Исполняемые инструкции могут выполнять методы, применяемые к объектам БД, или функции, команды для управления последовательностью выполнения операций в программе. Инструкции обеспечивают работу с файлами. Набор инструкций VBA обеспечивает выполнение операций, необходимых для разработки приложения пользователя. Каждая инструкция записывается в соответствии со своим форматом.
Методы С помощью методов выполняются операции с объектами базы данных. В программах VBA при вызове метода требуется указать объект, для которого предназначен этот метод. По сути метод является некоторой укрупненной операцией, реализованной как процедура и ориентированной на выполнение определенных действий с объектами. Методы подразделяются на те, которые возвращают значения, так же как функции, и те, которые не возвращают значения, а только выполняют определенные действия, так же как подпрограммы. Если метод возвращает значение, его можно использовать для присвоения значения некоторой переменной, но в выражении использовать нельзя. Метод, не возвращающий значения, записывается как инструкция. Для выполнения метода используется следющий формат: Объект.Метод [[{]Список аргументов[) 1 ]
Глава 15. Программирование на языке Visual Basic для приложений
573
Список аргументов заключается в скобки только в том случае, если метод должен возвратить значение. Ниже приведены два примера методов, не возвращающих значение: П Forms!
[ДОГОВОР С ПОКУПАТЕЛЕМ]!£АТА_ДОГ.SetFocus
Здесь метод SetFocus выполняется для объекта — поля ДАТА_ДОГ — в форме ДОГОВОР С ПОКУПАТЕЛЕМ и переводит на него фокус. При этом аргументы отсутствуют. П DoCmd.Close ac?orm, "ДОГОВОР С ПОКУПАТЕЛЕМ"
Здесь метод close выполняется для объекта DoCmd, что позволяет запустить соответствующую макрокоманду. Аргументы acForm, "ДОГОВОР с ПОКУПАТЕЛЕМ" указывают, что закрывается форма с указанным именем. Этот метод не возвращает значение, поэтому аргументы не заключаются в скобки. Пример использования метода для присваивания значения объектной переменной: Dim dbs As Database Dim rst As DAO.Recordset Set dbs=CurrentDb(; Set rsr^dbs.OpenRecordset("Товар", dbOpenTable, dbReadOnly)
Здесь метод OpenRecordset открывает таблицу с именем ТОВАР в текущей базе данных в режиме "только чтение", как набор данных типа "таблица". Объектом является текущая база данных C u r r e n t o b o , представленная объектной переменной dbs. Метод возвращает значение, которое является ссылкой на открытую только для чтения таблицу. Инструкция set rst присваивает это значение объектной переменной rst.
Инструкции описания переменных и констант При выполнении многих задач не обойтись без передачи аргументов в процедуры, сохранения рабочих промежуточных значений внутри процедур, без обмена данными между процедурами, без использования некоторых постоянных на протяжении выполнения задачи значений. Для временного сохранения таких данных используется оперативная память. Данные, сохраняемые в памяти, имеющие имя и допускающие изменение значений во время выполнения процедур, называются переменными. Некоторые постоянные значения, сохраняемые в памяти, имеющие имя и не допускающие изменение значений во время выполнения процедур, называются константами. Каждая переменная или константа помимо имени имеет тип данных, который может быть указан в явном или неявном виде.
574
Часть HI Разработка^1риложения пользователя
Переменные и константы записываются в процедурах или разделах описаний модулей с помощью инструкций описания. Тип инструкции описания переменной или константы и место ее размещения в модуле определяют область, в которой они могут использоваться: в пределах процедуры, во всех процедурах модуля или во всех модулях базы данных.
Инструкции описания переменных Переменные определяются в программах неявно или явно. Переменные могут создаваться по мере их использования в операторах присваивания автоматически. Такой способ создания переменной называется неявным определением переменной. Все неявно описанные переменные получают тип данных variant. Тип данных такой переменной устанавливается при присваивании ей значения и может изменяться в процессе использования. Для таких переменных наряду со значением хранится индикатор типа данных, поэтому они требуют больших ресурсов памяти, чем переменные большинства других типов. Описание переменных в явном виде с конкретными т и п а м и данных делает приложение более экономичным. Основной инструкцией для явного описания переменных является инструкция Dim. При определении переменной указывается ее имя и тип данных. Формат инструкции описания переменной выглядит следующим образом: I Dim|Private IPablic} Имя переменной [Аз Тип данных]
Следующие инструкции создают переменные X, Z, Y и указывают для них ЧИСЛОВОЙ — Integer И ТСКСТОВЫЙ (сТрОКОВЫЙ) — String ТИПЫ ДЗННЫХ: Dim X As Integer, Z As Integer Dim Y As String
В одной инструкции допускается описание нескольких переменных. Для явного описания типа данных необходимо включить описание типа данных для каждой переменной. В следующей инструкции переменные X и Y получат тип данных v a r i a n t ; и только описанная явно переменная Z — тип данных integer: Dim X, Y, 2 As Integer
Для того чтобы запретить неявное описание переменных в программах VBA, следует поместить в раздел описания модуля инструкцию Option Explicit. Эта инструкция требует явного описания всех переменных, используемых в модуле. Если в модуль включена инструкция option Explicit, то VBA, обнаружив имя переменной, которая не была описана ранее явно, генерирует при компиляции ошибку. Для того чтобы инструкция Option Explicit автоматически добавлялась во все новые модули, необходимо выполнить в окне Microsoft Visual Basic
Глава 15 Программирование на языке Visual Basic для приложений
575
команду меню ToolsjOptions и в окне диалога на вкладке Editor установить в группе параметров Code Settings флажок явного описания переменных Require Variable Declarations. Переменные могут использоваться только после присваивания им значений. Присваивание значений переменным осуществляется с помощью оператора присваивания. В этом операторе слева стоит имя переменной, а справа присваиваемое значение или выражение. Например: Х=200*0.8/7С; У="Петров Семен Иванович"; Z=X/80+30; Y=Forms ! ТОВАР! НАИМ_ТОВ;
Значения переменных могут изменяться во время выполнения процедур. При каждом вызове процедуры или функции ее локальные переменные, объявленные инструкцией Dim, принимают значения по умолчанию, равные О для числовых переменных и пустой строке ("") — для строковых. Значение переменной сохраняется до момента выхода из процедуры. Чтобы значения локальных переменных сохранялись во время выполнения других процедур, при их объявлении вместо Dim должна использоваться инструкция static. Размещение инструкций описания Если разместить инструкции описания переменных Dim внутри процедуры, то создается переменная, которая может быть использована только внутри этой процедуры. Если поместить такие инструкции в раздел описаний модуля, то создается переменная, которая будет доступна для любых процедур в данном модуле, но недоступна для процедур в других модулях базы данных. Для того чтобы сделать переменную доступной для всех процедур в базе данных, следует описать ее как общую с помощью инструкции Public: Public Y As String
Эта инструкция должна размешаться в описании общей области модуля. Для обращения к общей переменной, размещенной в модуле формы иии отчета, используются ссылки, включающие перед именем переменной имя формы или отчета: Forms!имя формы.имя переменной.
Соглашения об именах процедур, переменных и констант В VBA имя процедуры, переменной и константы должно удовлетворять следующим условиям: G начинается с буквы; П может включать буквы, цифры и символы подчеркивания;
576
Часть III. Разработка приложения пользователя
П не включает специальных символов, в том числе знаков препинания или пробелов; П содержит не более 200 символов; О не совпадает с ключевыми словами языка VBA. Ключевыми словами называют слова, являющиеся элементами инструкций языка VBA. Их еще называют зарезервированными словами.
Типы данных переменной Основными типами данных, используемыми при описании переменных. ЯВЛЯЮТСЯ: Boolean, Byte, Integer, Long, Currency, Single, Double, Date,
string, V a r i a n t или object. Типы данных, используемые для переменных, совпадают с типами данных полей в таблицах базы данных. Исключением ЯВЛЯЮТСЯ ТИПЫ Данных V a r i a n t И O b j e c t .
Указание типа данных в инструкции описания не является обязательным. Если тип данных не указан, по умолчанию переменная получает тип Variant. Это позволяет системе выбрать для значения переменной подходящий тип данных. Данные этого типа интерпретируются в VBA в зависимости от операции, в которой они используются, т. е. их тип может меняться. При этом производится преобразование одного типа данных в другой. Использование типа данных variant вместо любого типа данных обеспечивает большую гибкость при обработке. Однако это может приводить к возникновению ошибок. Например, пусть некоторой переменной X присвоено символьное значение "2000", а затем эта переменная использована в арифметическом выражении Х+1000. Для вычисления этого выражения символьное значение переменной автоматически преобразуется в числовое. Очевидно, что если значение переменной содержит символы, не допускающие такого преобразования, произойдет ошибка при выполнении. Если переменная X явно определена как символьная строка, также появится ошибка "Несовпадение типа данных". В процедурах, наряду с п р я м ы м и ссылками на объекты базы данных, элементы управления и свойства, допускается использование объектных переменных, представляющих их. После описания объектной переменной и присвоения ей значения эта переменная может быть использована вместо ссылки на объект. Поскольку ссылка на объект, как правило, состоит из цепочки имен, определение объектных переменных делает программирование более простым, удобным и быстрым. Значения объектных переменных изменяются так же, как значения других переменных. При описании объектной переменной используется тип данных ob:ect, который является условным обобщенным обозначением нескольких определенных типов данных, присваиваемых объектам.
Глава 15. Программирование на языке Visual Basic для приложений
577
Типы данных объектов определяются ссылками на объекты соответствующих моделей, хранящиеся в библиотеках. Наиболее распространенными объектными типами данных, поддерживаемыми Access VBA, являются: П объектные типы данных Access из библиотеки Access 11.0: Form, Report, Control — соответственно присваиваются формам, отчетам и их элементам управления; П объектные типы данных DAO (Data Access Object —- объекты доступа к д а н н ы м ) ИЗ библиотеки DAO : Dadabase, T a b l e D e f , Index, Field, DAO.Recordset, Q u e r y D e f , Relation. Тип данных Dadabase Присваивается
объекту База данных, если она открывается с Jet. Тип данных QueryDef присваивается определению запроса (оператору SQL). Тип данных TableDef служит для определения таблиц: структуры, индексов и других свойств. Тип данных DAO.Recordset служит для представления таблицы или набора записей запроса; П объектные типы данных ADO (ActiveX Data Objects — объекты данных ActiveX) из библиотеки ADO: connection аналогичен типу данных Dadabase в DAO, Command аналогичен типу данных QueryDef в DAO, ADOD3. Recordset аналогичен ТИПУ ДВННЫХ DAO. Recordset В DAO.
Примеры описания объектных переменных: Dim Форма! As Form, Фамилия As Control, БД As Database, Таблица! As TableDef, Поле! As Field
Тип данных object принимает для переменной Форма! значение Form, для переменной Фамилия — control, для переменной БД — Database, для переменной Таблица! — TableDef, ДЛЯ Переменной Поле! — Field. Инструкция Dim описывает переменную, сообщая, что она может содержать ссылку на конкретный объект указанного типа.
Присваивание значения объектной переменной Инструкция Dim только описывает переменную, указывая, на какой гип объекта она может сохранять ссылку. Для того чтобы переменная содержала ссылку на объект, необходимо с помощью инструкции set присвоить этой переменной ссылку на объект соответствующего типа. При этом ссылка может формироваться объектным выражением, которое, например, может открывать или создавать объект с помощью метода. Тип объектной переменной должен соответствовать объекту, который будет ей присвоен. Формат инструкции set: Set имя объектной переменкой=[New] {объектное выражение I Nothing}
Простейшим значением объектного выражения является имя объекта. П Hew — ключевое слово, используемое для создания нового экземпляра объекта.
578
Часть III. Разработка приложения пользователя
О Nothing — ключевое слово, используемое для разрыва соответствия объектной переменной какому-либо определенному объекту. Рассмотрим примеры выражений: 0 set Форма1=гоггпз! [ДОГОВОР с ПОКУПАТЕЛЕМ] создает собственную переменную Форма! для формы ДОГОВОР С ПОКУПАТЕЛЕМ; П Set Покупатель=Гогтз![ДОГОВОР С ПОКУПАТЕЛЕМ] !КОД_ПОК создает СОбСТ-
венную переменную покупатель для поля код_пок в форме ДОГОВОР С ПОКУПАТЕЛЕМ; !~l set Bfl=currentDBо присваивает объектной переменной БД значение текущей базы данных; П Set тaблицal=БД.CreateTaЫeDef ("Сотрудники") создает в текущей базе данных таблицу с именем Сотрудники, используя метод CreateTableDef, и сохраняет ссылку на этот объект в объектной переменной таблица!. Здесь объектным выражением является метод CreateTableDef, примененный к объекту БД. П Set
Поле1=Таблица1.CreateField("ФИО",
dbText) создает ПОЛС И При-
сваивает ссылку на него объектной переменной.
После описания объектной переменной и присваивания ей значения эта [^•ременная может быть использована вместо прямых ссылок на объекты и данные. Использование объектных переменных позволяет упростить текст программы. Пример использования объектных переменных при обновлении поля таблицы БД: 1
объявление объектных переменных dbs, tab!
Dim dbs As Database Dim tabi As DAO.Recordset ' dbs определяется как ссылка на текущую БД Set dbs=CurrentDb () ' tabl определяется как ссылка на открываемую в текущей базе данных 1 таблицу ТОВАР Set tabl=dbs.OpenRecordset("ТОВАР", dbOpenTable) 1
использование объектной переменной tabl для ссылки на поле ' НАИ^_ТОВ в таблице ТОВАР; ' вывод информации о содержимом поля текущей записи MsgBox "Значение поля 'наименование товара'" & tabl! НАИМ__ТОВ, vbOK ' выборка текущей записи объекта tabl для обновления методом Edit tabl.Edit
Глава 15. Программирование на языке Visual Basic для приложений
579
' присвоение полю НАИМ_ТОВ нового введенного в диалоговом окне значения tabl!НАИМ_ТОВ=InputBox("Введите наименование товара") ' обновление текущей записи объекта tabl методом Update tabl.Update
Инструкции описания констант Константа позволяет некоторому постоянному значению присвоить имя. с помощью которого оно может использоваться в процедурах. После описания константы ее нельзя изменить или присвоить ей новое имя. Константы имеют фиксированные значения,'которые не могут изменяться во время выполнения процедур. Для описания константы и присвоения ей значения используется инструкция Const. Константа, как и переменная, может быть описана в разделе описания модуля или внутри процедуры и может быть объявлена обшей. Константы, описанные на уровне модуля, являются личными по умолчанию. Для описания общей константы на уровне модуля надо поместить перед инструкцией const ключевое слово Public. Для явного описания константы как личной требуется указать перед инструкцией const ключевое слово P r i v a t e . Это сделает программу более наглядной. В следующей инструкции описывается общая константа Coni с текстовым типом данных s t r i n g , которой присваивается постоянное значение: Public Const Conl As String^''CaHKT-Петербургский Государственный университет" При описании констант используются те же типы данных, что и при описании переменных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, S t r i n g ИЛИ V a r i a n t . Исключением ЯВЛЯ6ТСЯ ТИП ДаННЫХ O b j e c t .
Допускается описание нескольких констант в одной инструкции. Если требуется явно описать тип данных, то необходимо включить описание типа данных для каждой константы. В следующей инструкции константы соп2 и сопЗ описываются с указанием типов данных: Private Const con2 As Tnteger^lCO, сопЗ As Currency=200
Помимо констант, создаваемых пользователем с помощью инструкции const, в программах VBA могут использоваться встроенные константы и системные константы. Встроенные константы — это константы, заранее определенные в библиотеках объектов. Они могут быть использованы так же, как и константы, определяемые пользователем.
580
Часть III. Разработка приложения пользователя
В VBA предусмотрено использование встроенных констант, описанных в самом Access, в языке VBA и в системах объектов доступа к данным ОАО и ADO. Допускается использование констант и из других библиотек объектов. Первые две буквы в имени встроенной константы являются префиксом, определяющим библиотеку объектов, в которой описана эта константа. Константы из библиотеки Access имеют префикс ас; константы из библиотеки ОАО имеют префикс db; константы из библиотеки ADODB имеют префикс ad; а константы из библиотеки VBA имеют префикс vb. Например: acForm, acTable, acQuery, dbOpenTable, dbReadOnly, dbRecordNew, adRecNew, adModeRead, adErrObjectOpen, vbOk, vbNo.
adRecOK,
Списки встроенных констант каждой из библиотек можно просмотреть в окне просмотра объектов (Object Browser), открывающемся соответствующей кнопкой панели инструментов при работе в окне редактора Visual Basic. В нижней части окна просмотра выводятся значения встроенных констант. Использование в тексте программ значений констант вместо их имен усложняет их понимание. Имена встроенных констант не должны использоваться при определении других констант или переменных в программе. В VBA допускается использование следующих системных констант: True (истина), False (ложь) и Null (пустое значение), описанных в библиотеке VBA. Системные константы Yes, NO, on, O f f могут использоваться со всеми объектами баз данных, кроме модулей, т. к. описываются библиотекой типов Access.
Инструкции управления выполнением программ В процедурах инструкции выполняются в порядке их расположения. Однако часто необходимо нарушить последовательность выполнения в зависимости от условий, например, заданных пользователем через ввод параметров, или выполнить набор инструкций заданное число раз. Рассмотрим некоторые из часто используемых и распространенных во многих языках программирования (возможно с незначительными отличиями в синтаксисе) инструкций, позволяющих изменять последовательное выполнение команд в программе.
Инструкция Go То Инструкция безусловного перехода GOTO может передавать управление указанной строке только в пределах процедуры, в которой она используется. Формат ИНСТРУКЦИИ: GoTo {метка
|
номер с т р о к и }
Любую строку процедуры, содержащую инструкцию, можно пометить, заяисав в ее начале символьную метку. Метка должна_начинаться с буквы, иметь длину не более 40 символов и заканчиваться двоеточием. Она должна записываться, начиная с первого столбца, и не должна совпадать с зарегистри-
Глава 15. Программирование на языке Visual Basic для приложений
581
рованными словами. Кроме того, строки процедуры могут быть пронумерованы. Обязательный аргумент инструкции может быть любой меткой или номером строки. Следует иметь в виду, что многократное использование этой инструкции в процедуре делает ее малопонятной и создает трудности при отладке. Поэтому при любой возможности целесообразно использовать инструкции, в которых управляющие инструкции объединены в единое целое с инструкциями действия, такие как i f . . .Then. . .Else, D O . . . Loop, F o r . . . N e x t , Select Сазе. Инструкция GOTO применяется в основном при обработке ошибок.
Инструкция Call Инструкция call передает управление процедурам sub, Function, или процедурам из библиотеки динамической связи (формата DLL). Формат ИНСТРУКЦИИ: [ C a l l ] им-я [ [ ( ] с п и с с к аргументов [ ) ] Э
Использование ключевого слова call не является обязательным. Если для вызова процедуры использовано ключевое слово call, список аргументов должен быть заключен в круглые скобки, например: call P r o c m a i n i o ) . Если ключевое слово Call опущено, круглые скобки вокруг списка аргументов также должны быть опущены. Список аргументов записывается, если вызываемая процедура обрабатывает аргументы. Список аргументов может содержать имена переменных, массивов или выражения, передаваемые в вызываемую процедуру. Аргументы разделяются запятыми. Число аргументов и их тип должны соответствовать требованиям вызываемой процедуры. Имена передаваемых переменных могут отличаться от имен формальных переменных, заданных в вызываемой процедуре. Если Call используется для вызова функции, то возвращаемое функцией значение будет потеряно. Пример вызова процедуры Заь: Call Procmain("Запрос от Петрова"}
м
Эта инструкция передает управление следующей процедуре sub: Sub ?rocmain(Any3tring) MsgBox AriyString 1
Выводит на экран: Запрос от Петрова.
End Sub
Инструкция lf...Then...Else Инструкция i f . . .Then.. .Else используется для выполнения группы инструкций в зависимости от значения условного выражения.
552
Часть lit. Разработка приложения пользователя
Инструкция используется в двух форматах: однострочном или многострочном (блочном). Выбор формата зависит от числа инструкций, записываемых в структуру I f . . .Then. . .Else. Однострочный формат: If условие Then [инструкции то]
[Else инструкции иначе]
В этом формате вся инструкция должна быть записана в одной строке, инструкции, следующие за Then или Else, разделяются двоеточием. Формат используется для записи коротких и простых инструкций. Параметр условие является логическим выражением, которое возвращает значение True (Истина) или False (Ложь). Если условие имеет значение True, TO ВЫПОЛНЯЮТСЯ ИНСТРУКЦИИ ИЗ блока [инструкции то], В ПрОТИВНОМ случае — [инструкции иначе].
Например: if x>io Then X=Y+I : Z=X+Y : K=Z+I Многострочный формат: If условие Then [инструкции] [Elself условие-n Then [инструкции]...] [Else [инструкции]]
End If
Многострочная инструкция if должна заканчиваться ключевыми словами End i f . Ключевые слова if, End i f , Else, Elself должны быть первыми в строке. В такую инструкцию могут быть вложены другие условные конструкции, записываемые За ключевым словом Elself. Это позволяет организовать с помощью одной инструкции сложные разветвления программы. Многострочные инструкции более удобны для чтения, корректировки и отладки. В многострочном формате, если первое условие истинно, выполняются инструкции, следующее за Then. Если условие ложно, поочередно оценивается каждое условие Elself. Когда обнаруживается истинное условие, немедленно выполняются инструкции, следующие за связанным Then. Если ни одно из УСЛОВИЙ E l s e l f НС ИСТИННО (ИЛИ ССЛИ НСТ УСЛОВИЙ E l s e l f ) , ВЫПОЛНЯЮТСЯ СЛС-
дующие инструкции Else. После выполнения инструкций, следующих за Then или Else, работа продолжается с инструкции, следующей за End i f . Рассмотрим пример: if A<10 Then х=1 Y=l V
Глава 15. Программирование на языке Visual Basic для приложений
583
Если А меньше 10. X = l , Y = l ; если А больше или равно 10, но меньше 100, Х=2, Y=2, во всех остальных случаях Х=3.
Инструкция Do...Loop Для многократного повторения группы инструкций — выполнения цикла в VBA — предлагается несколько управляющих структур. Наиболее простой и удобной является инструкция D O , . .Loop. Инструкция может быть использована в одном из следующих форматов: П DC [ ( W h i l e | U n t i l } условие] [инструкции] [ E x i t Do] [инструкции] Loop П Do
^инструкции] [Exit Do] [инструкции] Loop [{While | Until} условие]
Инструкции, заключенные между DO и Loop, выполняются заданное число раз, после чего управление передается инструкции, следующей за Loop. При использовании в инструкции предусловия w h i l e (пока) блок инструкций повторяется в цикле, пока условие имеет значение True. При использовании в инструкции предусловия until (До) блок инструкций повторяется в цикле до тех пор, пока условие имеет значение f a l s e . Выполнение блока инструкций прекращается, когда условие получает значение True. При размещении w h i l e или u n t i l в предложении DO условие проверяется до выполнения блока инструкций цикла. При размещении w h i l e или umil в предложении Loop сначала выполняется блок инструкций, а затем проверяется условие, т. е. инструкции цикла всегда выполняются, по крайней мере, один раз. Допускается использование вложенных циклов.
584
Часть III. Разработка приложения пользователя
Инструкция Exit DO позволяет выйти из цикла прежде, чем будет достигнут конец цикла Loop. Инструкция Exit DO передает управление инструкции, следующей непосредственно за циклом. При использовании инструкция Exit DO во вложенной инструкции D O . . . L o o p управление передается в цикл на уровень выше цикла, где выполняется Exit DO. Часто Exit DO используется внутри инструкции If...Then...Else.
При работе с циклами возможно возникновение ситуаций, приводящих к бесконечному их выполнению. Как правило, это связано с неверным изменением или невозможностью изменения величин, проверяемых в условиях цикла. Для предотвращения бесконечных циклов может быть использована ИНСТРУКЦИЯ E x i t Do.
Для прерывания выполнения бесконечного цикла можно нажать клавиши <Esc> или -KBreak>. В качестве примера использования цикла рассмотрим последовательную обработку набора записей объекта Recordset с именем stab. Переход к следующей записи объекта Recordset обеспечивается с помощью метода MoveNext.
Цикл должен выполняться до тех пор, пока не обнаружится конец набора записей. Решить эту задачу позволяет свойство EOF, которое получает значение True, когда обнаружится конец набора записей. Do Until stab.EOF <инструкции обработки записи> stab.MoveNext Col=Col + 1 Loop MsgBox "Всего обработано" & Col & " записей", vbOKOnly
Выполнение макрокоманд с помощью объекта DoCmd Специальный объект DoCmd поддерживает методы, которые позволяют запускать большинство макрокоманд Access из программ VBA. С помощью макрокоманд выполняются такие действия, как закрытие окон, открытие форм и присвоение значений элементам управления. Например, метод OpenForm объекта DoCmd ПОЗВОЛЯСТ ОТКрЫТЬ форму, а МеТОД GoToRecord -
перейти на некоторую запись в таких объектах, как таблица, запрос или форма. Имена методов совпадают с английскими именами макрокоманд. Формат методов объекта DoCmd записывается в следующем виде: [Application.]DoCmd.имя метода [аргументы, ...]
Глава 15. Программирование на языке Visual Basic для приложений
565
Аргументы указанного метода совпадают с аргументами соответствующей макрокоманды, которые обычно отображаются в нижней части окна макроса. Аргументы разделяются запятыми. Если необязательный аргумент опущен, то при выполнении макрокоманды используется значение данного аргумента по умолчанию. Так, метод openForm использует семь аргументов, но только первый из них — имяФормы — является обязательным. Инструкция, которая открывает форму ПОКУПАТЕЛЬ из текущей базы данных и отбирает только записи о покупателях из Москвы, запишется следующим образом: DoCmd.OpenForm "ПОКУПАТЕЛЬ", , ,"[АДРЕС_ПОК]^'Москва'"
Инструкция, которая делает текущей новую запись в открытой форме ТОВАР, может быть представлена следующим образом: DoCmd.GoToRecord acForm," ТОВАР", acNewRec
Метод GoToReccrd, использующийся объектом Dccmd для выполнения макрокоманды GoToRecord, имеет следующий формат: DoCmd.GoToRecord [типОбъекта, кмяОбъекта] [, запись 1 [, смешение]
Аргументы метода: О типОбъекта задается одной из следующих встроенных констант: асТаЫе (таблица), acQuery (запрос), acForm (форма); П имяобъекта задается строковым выражением, представляющим допустимое имя объекта, тип которого указан в аргументе типОбъекта. Если оставлены пустыми аргументы типОбъекта и имяобъекта, подразумевается активный объект: D запись задается одной из следующих встроенных констант: acPrevious (предыдущая), acNext (следующая), ac?irst (первая), aci,ast (последняя), acGoTo (с указанным номером), acNewRec (новая). По умолчанию принимается значение acNext; D смещение задает номер искомой записи, если в аргументе запись задана константа acGoTo. Если в аргументе запись заданы константы acNext или acPrevlous, смещение задает числовое выражение, на которое отстоит искомая запись от текущей вперед или назад.
Разработка приложения на VBA При разработке приложения с использованием VBA все модули объединяются в проект VBA. Проект основывается на объектах базы данных и служит для автоматизации доступа к ним и обработки. При этом пользователь получает полноценное приложение, функции которого доступны через меню, командные кнопки и формы.
586
Часть III. Разработка приложения пользователя
Создание процедур и функций проекта ведется в редакторе VBA, обеспечивающем интегрированную среду разработки. Проект VBA объединяет все созданные в приложении модули, как стандартные, так и заключенные в формах и отчетах. При этом обеспечивается обзор всех программ, составляющих проект, простота доступа к тексту каждого из модулей, предоставляется возможность отладить каждую из процедур. Исходный текст программ Access VBA набирается в текстовом редакторе, подобном редактору Блокнот из Windows. Для перехода из Access к разработке проекта в среде редактора VBA можно воспользоваться различными способами: П выбрать вкладку Модули (Modules) и нажать кнопку Создать (New) в окне БД. При этом автоматически произойдет открытие редактора и в нем окна нового модуля; О нажать кнопку Программа (Code) на панели инструментов, выбрав некоторый модуль или форму (отчет). При этом откроется соответствующий стандартный модуль или модуль формы (отчета); П находясь в любой области окна БД, выполнить команду меню Сервис|Макрос| Редактор Visual Basic (Tools|Macro Visual Basic Editor); П из формы (отчета), открытой в режиме конструктора, перейти к свойствам текущего элемента, выбрать свойство, для которого разрабатывается процедура, и нажать кнопку Построить (Build). Откроется окно модуля формы (отчета) и соответствующая процедура. Переключиться из окна редактора в окно Access, не закрывая проекта, можно, воспользовавшись кнопкой View Microsoft Access на панели инструментов. Закрыть окно редактора и возвратиться в Access можно соответствующей командой меню File|Close and Return To Microsoft Access.
Окно редактора VBA Окно редактора, помимо меню и панелей инструментов, включает ряд окон, предназначенных для создания и управления проектом приложения. В окне проекта представлены формы и отчеты, с которыми связаны процедуры обработки событий, и стандартные модули. В окне свойств объектов представлены свойства открытых в режиме конструктора объектов. В окнах модулей набирается и редактируется текст процедур. В окне просмотра объектов отображаются свойства и методы объектов из всех доступных для использования библиотек.
Окно проекта Окно проекта Project отображает иерархическую структуру всех элементов проекта. Элементами проекта являются, прежде всего, сама открытая база данных и входящие в этот элемент модули форм, отчетов и стандартные модули. Причем модули форм и отчетов представлены самими объектами, т. е.
Глава 15. Программирование на языке Visual Basic для приложений
587
формой или отчетом, в одной папке, а стандартные модули — в другой (рис, I5.6). Project - Постака товаров
3g, Постака товаров (Поставке товаров) - JS Microsoft Office Access Class Objects ЁШ Рогт_ДОГОЕОР С ПОКУПАТЕЛЕМ Ю Рогт_Кнопочная форма Ш Рогт_ОТГРУЗКА ШРогт_ПОСТАВКА„ £Ц Рогтп_Приложение £Щ Forrn_TOBAP Я Report ^ДОГОВОР Я Report _ОТГРУЗКА Modules Modu!e2
Рис. 15.6. Окно проекта
В проекте отображаются только те формы и отчеты, которые имеют процедуры. Для форм и отчетов без процедур нет и модулей. Для того чтобы форма появилась в списке форм проекта, необходимо в окне Access начать для этой формы процесс создания процедуры обработки события. Для этого следует открыть форму в режиме конструктора, выбрать элемент и в его свойствах — событие, для которого создается процедура, установить значение Процедура обработки события (Event Procedure) и нажать значок построителя. При этом автоматически откроется окно редактора VBA, если оно не было открыто, и окно модуля формы, в котором появится шаблон для создания соответствующей процедуры. В списке окна проекта появится форма. Можно поступить и иначе — нажать кнопку Программа (Code) для некоторой формы, ранее не имеющей процедур, для нее появятся пустое окно модуля и форма в списке форм проекта. Таким образом будут созданы условия для создания процедур формы и сохранения их в модуле. В окне модуля и левом поле списка можно выбрать любой элемент формы, а в правом — любое событие, для которого требуется построить процедуру. Ни модуля формы, ни формы в списках проекта не сохранится, если мы выйдем из формы, не сохранив процедуры. Сохранение даже пустой процедуры приводит к включению в проект модуля формы. Кнопка окна проекта View Code позволяет открыть модуль, связанный с выбранным в окне проекта объектом. Кнопка View Object позволяет открыть в
588
Часть III. Разработка приложения пользователя
окне Properties свойства объекта для корректировки. Причем сам объект открывается в окне Access в режиме конструктора. Окно проекта можно скрыть, выполнив команду контекстного меню Hide или воспользовавшись кнопкой закрытия окна проекта. Для отображения окна проекта нужно выполнить команду View|Prodject Explorer или нажать соответствующую кнопку на панели инструментов
Окно свойств Окно свойств Properties предназначено для просмотра и изменения текущих значений свойств объектов, находящихся в процессе разработки, т. е. открытых в режиме конструктора. Окно свойств объекта открывается командой меню View|Properties Window или соответствующей кнопкой панели инструментов. Если объект не открыт в режиме конструктора, окно свойств остается пустым. Properties - ПОСТАВКА ПИАН ПОСТАВКА_ПЛАН Рогт_ПОСТАВКА_ПЛАН Alphabetic [^tegotized j
Рис. 15.7. Свойства формы, отображаемые по категориям Properties - ПОСТАВКА ПЛАН ПОСТАВКА_ПЛАН FormJlOCTABKAJUIAH ~Л| [Alphabeticj| Categorised j ПОСТАВКА_ПЛАН AfterDelConfirm AfterFinalRender Afterlnsert AfterLayout AfterRender AfterUpdate AllowAddfcions AllowDatasheetView
True True
Рис. 15.8. Свойства формы, отображаемые по алфавиту
Глава 15. Программирование на языке Visual Basic для приложений
589
Для отображения свойств объекта достаточно в окне проекта выбрать его и нажать кнопку View Object. При этом объект открывается в базе данных в режиме конструктора, а в окне свойств редактора VBA отображаются его свойства. Список в окне свойств позволяет выбрать любой из элементов управления объекта, свойства которого необходимо отобразить. Можно просмотреть свойства выбранного элемента в алфавитном порядке или по категориям, раскрыв соответствующую вкладку Alphabetic или Categorized окна свойств (рис. 15.7, 15.8). При просмотре свойств по категориям можно отобразить только категории, раскрыть или свернуть любые из них, воспользовавшись значком "+" или "—".
Окно модуля Окно модуля Code используется для ввода и редактирования текста программы VBA, а также для его отладки. В редакторе одновременно может быть открыто несколько окон модуля, каждое из которых содержит свой модуль — модуль формы, отчета или стандартный модуль. Это позволяет легко перемешаться между ними и, -например, копировать участки программного кода из одного модуля в другой. Под строкой заголовка окна модуля расположены два списка. Первый список (с всплывающей подсказкой Object) содержит все объекты модуля. В модулях всех типов присутствует объект General — раздел общих описаний. Этот раздел содержит описание общих переменных и процедур, доступных из других процедур модуля. В модуле формы (отчета) представлен весь список элементов формы (отчета). Второй список (с всплывающей подсказкой Procedure) содержит все процедуры или события, связанные с выбранным объектом. Для стандартного модуля— это раздел описаний Declaration и список процедур, для элементов формы (отчета) — раздел описаний Declaration и весь список событий. В окне модуля можно отображать все процедуры объекта с отделением текста каждой из них горизонтальными линиями или отображать только одну процедуру. Для выбора режима отображения предназначены соответственно две кнопки в нижнем левом углу окна: для представления полного модуля Full Module View и для представления одной процедуры — Procedure View.
Окно просмотра объектов Окно просмотра объектов Object Browser позволяет просматривать во всех доступных для использования библиотеках (библиотеках, на которые установлены ссылки) объекты, их свойства и методы, элементы управления, а также модули (рис. 15.9 и 15.10). При этом пользователь получает простой доступ к списку методов каждого из объектов и синтаксису методов, что значительно упрощает их использование. Имя метода и свойства объекта можно скопировать в буфер обмена, воспользовавшись кнопкой окна про-
Часть III. Разработка приложения пользователя
590
смотра объектов Copy to Clipboard, и вставить в н у ж н у ю синтаксическую конструкцию в модуль. Объекты проекта представлены в окне просмотра под именем проекта. Их свойства и пользовательские процедуры также включены в список методов. Щелчком м ы ш и на пользовательской процедуре или нажатием кнопки окна просмотра объектов View Definition процедура открывается в новом окне модуля.
ъ- Object Browser Постака товаров <ЛН Libraries:* Access ADODB DAD
stdole a|VBA Hoc 1.1 K.I юв.1|>')в
& Form ^Кнопочная Форш Й1РопЩ>ТГРУЗКА ИЗ Ропп_ПОСТАВКА_ПЛАН oil Роип_П|Н1ложение ;& Fomi_TOBAP
Members of'Рогт_ДОГОВОРА_С_П ? Линия40 1 Надпись24 ? Надпись25 ^ НадписьЗУ НАИМ_ПОК' i1 НАИИ_ПОК_НЭДПИСЬ
ProjectriocTiiK.1 товаров С:'(Акт_БД_20041ЛостббкатоБ9роБ.1пйЬ
Рис. 15.9. Окно просмотра объектов проекта с открытым списком доступных библиотек
м- Object Browser
Classes Mernbers of'Command 1 Щ| Command iS1 CornmandText j#J CommandTypeEnur ^ CornmandTimeout •&> CornpareEnurn jS1 CommandType И Connection -* CreateParameter ffi ConnectModeEnum ff1 ConnectOptionEnurr •«• Name Function Execute)[RecordsAffectetf. [Parameter^. [Options As Long = -1]) As R Member of ADOPB.Comniumd
Рис. 15.10. Окно просмотра объектов библиотеки ADO
Глава 15. Программирование на языке Visual Basic для приложений
591
Окно просмотра объектов открывается нажатием на панели инструментов кнопки Object Browser или командой ViewjObject Browser. Кроме того, окно просмотра объектов может быть открыто нажатием клавиши . Об объектах, методах или свойствах, выводящихся в окне просмотра объектов, можно получить детальную справку. Для этого следует выделить соответствующее имя и нажать кнопку со значком "?". Для поиска метода или свойства в окне просмотра объектов, которое открывается в окне редактора кнопкой Object Browser, необходимо выполнить следующие действия: П в списке проектов и библиотек, имеющем всплывающую подсказку Project/Library, выбрать нужную библиотеку или проект; О в списке Classes выбрать нужный объект; П в списке Members of выбрать метод или свойство; G кроме того, можно воспользоваться окном поиска Search Text, размещенным непосредственно под списком проектов и библиотек.
Создание процедур Пользователь может создавать процедуры sub или Function в стандартном модуле, модуле формы или модуле отчета. Разработка процедур производится в текстовом редакторе VBA. Для того чтобы создать стандартный модуль, следует выбрать вкладку Модули (Modules) в окне базы данных и нажать кнопку Создать (New). При этом открываются окно редактора VBA и окно вновь создаваемого модуля. При работе в редакторе для создания нового модуля достаточно выполнить команду Insert]Module. Для того чтобы создать модуль формы или отчета, надо открыть форму или отчет в режиме конструктора и нажать на панели инструментов кнопку Программа (Code). Модуль формы или отчета создается и при создании первой процедуры обработки события для любого из его элементов. Описание процедуры-функции следует начинать с инструкции Function в стандартном модуле (рис. 15.11), модуле формы (рис. 15.12) или модуле отчета. Имя функции и аргументы функции в круглых скобках записываются в первой свободной строке раздела описания общей области. Например, следующая инструкция описания функции preimer указывает аргументы Argi и Arg2: Function Preimer(Argl,Arg2)
После ввода инструкции Function автоматически возникает строка, завершающая процедуру-функцию: End Function. Чтобы в окне модуля отобра-
Часть ///. Разработка приложения пользователя
592
жалась только разрабатываемая процедура, нажмите соответствующую кнопку в левом нижнем углу окна (рис. 15.13).
Rt enerall !*—
»j ||>rob.i
они 3
Option Compare Database Option E x p l i c i t
J.
A
Function p r o b a ( )
Рис. 15.11. Окно общей области стандартного модуля, раздел описаний Ы Поставка товаров - Рогт,_НЛКЛАДНЛЯ{Со(1е) (General)
•*',
Pieimei
Option Compare Database Option E x p l i c i t Function P r e i m e r ( ) End Function
Рис. 15.12. Окно общей области модуля формы НАКЛАДНАЯ м Поставка товаров - Когт_НАКЛАДНАЯ (Code) uGeneial)
т
Р)einier
Function Ptreimer ( A r g l , A r g 2 ) End F u n c t i o n
Рис. 15.13. Окно процедуры в общей области стандартного модуля
В редакторе VBA для создания процедуры в текущем модуле можно использовать команду Insert]Procedure. При этом открывается окно, в котором можно задать имя создаваемой процедуры, выбрать ее тип, объявить ее общей или личной, а ее локальные переменные можно объявить сохраняемыми между вызовами процедуры (рис. 15.14).
Глава 15 программирование на языке Visual Basic для приложений
593
Add Procedure Name: j Type >'•
Sub
Or
Cancel
'' Function f" Property Scope Г* Public f
"* Private
Г™ АИ Local variables as Statics
Рис. 15.14. Окно добавления процедуры в редакторе VBA
Инструкции языка VBA, выполняющие действия или расчеты, которые должна реализовать функция, следует ввести в строки между словами Function и End Function. Напомним, что среди инструкций процедурыфункции должна присутствовать инструкция присваивания значения имени функции. Описание процедуры-подпрограммы следует начинать с инструкции sub. Все остальные действия при создании подпрограммы должны быть такими же, как при создании функции. Единственным отличием этой процедуры является отсутствие инструкции по присвоению значения имени процедуры. Процедура начинается ключевым словом Sub и заканчивается End sub. Для создания процедуры обработки события следует выполнить следующие действия: 1. Открыть форму или отчет в режиме конструктора. 2. Если процедура создается для отдельного элемента управления, выделить этот элемент. 3. Нажать кнопку Свойства (Properties) на панели инструментов. 4. В открывшемся окне свойств формы, отчета или элемента управления выбрать вкладку События (Event). 5. Выбрать событие, запускающее процедуру обработки события. 6. В строке свойства выбрать в раскрывающемся списке значение [Процедура обработки события].
594
Часть III. Разработка приложения пользователя
7. Для вывода окна модуля нажать кнопку Построить (Build). В открывающемся окне модуля формы или отчета будет создан шаблон процедуры с составным именем, включающим имя элемента и имя события. Вывести окно модуля можно и иначе. Вместо вызова свойств элемента можно нажать правую кнопку мыши и в контекстном меню выбрать команду Обработка событий (Build Event). Далее в окне Построитель (Builder) выбрать Программы (Code). Нужное событие можно выбрать, уже находясь в окне модуля. Далее в открывшемся шаблоне процедуры надо ввести инструкции процедуры обработки события между строками sub и E~d sub. После завершения создания процедуры окно модуля надо закрыть. На запрос о сохранении процедуры следует ответить утвердительно. Однако при этом процедура будет связана с первым в списке событием элемента.
Подготовка текста программ При подготовке текста программ в окне модуля редактор значительно упрощает написание отдельных ее инструкций. Интерпретатор контролирует каждую вводимую строку исходного текста. При наборе объявлений переменных, встроенных функций Access или VBA, методов и свойств объектов появляется окно подсказки со списком, из которого можно выбрать подходящее значение. В этом окне при вводе только имени функции или метода отображается их синтаксис, что позволяет не запоминать их многочисленные аргументы. Чтобы синтаксис процедур выводился в окне модуля, требуется установить флажок Auto Quick Info (Краткие сведения) на вкладке Editor в окне параметров Options, открываемом соответствующей командой меню Tools. Поскольку в качестве параметров многих стандартных процедур используются константы, предусмотрен автоматический вывод списка констант для требуемого параметра. Для этого нужно установить флажок списка компонентов Auto List Members в окне параметров Options. Список констант может быть вызван командой List Constants, которая вызывается через контекстное меню или меню Edit. При использовании объекта достаточно ввести его имя и точку, чтобы автоматически отобразился список свойств и методов объектов, если установлен флажок списка компонентов Auto List Members. Этот список List Properties/Methods можно просмотреть в контекстном меню или в меню Edit. Редактор обеспечивает параметры форматирования текста, поддерживает выделение различных синтаксических конструкций с помощью цвета, шрифта и т. д. Настройка параметров визуального представления текста процедур производится на вкладке Editor Format диалогового окна параметров Options, которое открывается командой Tools]Options. Редактор модулей
Глава 15. Программирование на языке Visual Basic для приложений
595
поддерживает символ продолжения программной строки, позволяющий разбивать одну инструкцию на несколько строк. Символ продолжения программной строки образуется из пробела с последующим символом подчеркивания "_''• В окне параметров Options пользователь может выбрать и другие параметры настройки среды подготовки программ. Флажок Default to Full Module View на вкладке Editor устанавливает режим просмотра всего модуля или одной процедуры. Параметры программирования устанавливают режим автоматической проверки синтаксиса Auto Syntax Check сразу после написания строки программы, требование явного описания переменных Require Variable Declaration и ряд других настроек. Допускается указание параметров командной строки и параметров условной компиляции.
Компиляция Любая программа, написанная па языке программирования, перед выполнением должна быть преобразована из исходного формата, ориентированного на человека, в формат команд компьютера. Этот процесс преобразования называется компиляцией. В Access необязательно производить компиляцию перед запуском процедуры на выполнение, процедура будет откомпилирована автоматически непосредственно перед выполнением. Однако в этом случае программа будет работать медленнее, ошибки выявятся только в процессе выполнения-процедуры и сушесвует возможность некорректного завершения работы. Целесообразно произвести отладку перед выполнением программы. Одним из этапов отладки является явная компиляция программ. Компиляцию программ в открытых формах, отчетах или модулях можно произвести, выполнив команду запуска компиляции загруженных модулей текущего проекта Debug|Compile <имя проекта>.
Отладка программы Для отладки программы можно приостановить ее работу перед выполнением очередной инструкции. В этот момент пользователь может, например, проверить текущее значение переменной или выражения и выполнить каждую строку программы в отдельности. Прерывать работу программы можно с помощью точки останова. Для определения точки останова установите курсор и нужной строке и воспользуйтесь командой Debug|Toggle Breakpoint или нажмите кнопку Toggle Breakpoint на панели инструментов Edit или Debug. Точка останова будет отмечена строкой красного цвета и красной точкой слева. Когда выполнение программы доходит до точки останова, модуль автоматически открыва20
Зак ИЗ 5
596
Часть III. Разработка приложения пользователя
ется, а строка, на которой было прервано выполнение, выделяется желтым цветом. (
Замечание
)
Для прерывания программы можно также добавить в процедуру инструкцию stop или нажать клавиши + во время выполнения программы.
Чтобы просмотреть в точке останова значение нужного выражения, выделите его и нажмите кнопку Quick Watch на панели инструментов Debug. Откроется диалоговое окно Quick Watch, в котором выведется выражение и его текущее значение. Нажмите кнопку Add, чтобы добавить выражение в список контрольных выражений этого окна. Значение переменной или выражения на момент останова программы можно просмотреть во всплывающем окне, просто подведя курсор мыши к нему. Чтобы продолжить выполнение программы, выберите команду Sub/UserForm в меню Run или на одной из панелей инструментов.
Run
Чтобы снять точку останова, переведите курсор в строку, в которой она установлена, и так же как при ее определении, нажмите кнопку Toggle Breakpoint на панели инструментов Debug. Для проверки изменения значениия переменной в ходе выполнения программы можно воспользоваться автоматическим выводом в окно отладки Immediate с помощью метода Print объекта Debug. Например, вставив инструкцию Debug.Print <имя переменному в тело цикла, в окне Immediate можно увидеть, как изменялись значения указанной переменной. Окно Immediate открывается командой View|Immediate Window.
Программы HaVBA Анализ процедуры обработки события, формируемой мастером Программы VBA могут создаваться не только пользователем, но и автоматически, при работе мастеров Access. Рассмотрим пример процедуры обработки события, созданной мастером кнопок. Допустим, в форме для просмотра информации о товаре по желанию пользователя необходимо открывать список заказов текущего товара, Создадим форму ТОВАР на основе одноименной таблицы, воспользовавшись режимом Автоформа: в столбец (AutoForm: Columnar), и форму ПЛАН на основе таблицы ПЛАН_ПОСТАВОК, воспользовавшись режимом Автоформа: ленточная (AutoForm: Tabular).
Глава 15. Программирование на языке Visual Basic для приложений
597
Откроем форму ТОВАР в режиме конструктора и, воспользовавшись мастером, добавим в нее кнопку для открытия формы ПЛАН. Для отображения в открываемой форме ПЛАН только связанных записей необходимо при создании кнопки выбрать в окне мастера строку Открыть форму для отобранных записей (Open the form and find specific data to display) и далее выбрать поле код_тоз, по которому осуществляется связь форм и отбор записей подчиненной формы. Дадим кнопке имя Заказано, подпись на кнопке сделаем такой же (рис. 15.15).
Квд товара
Г 001
Наименование товара
Монитор 17LG
Цена
587,00р.
Ставка НДС
5%
,...,—,—.— Запись:
Заказано
И
>* из
Рис. 15.15. Форма ТОВАР с кнопкой для вызова формы ПЛАН
Создав кнопку, перейдем в режим формы и убедимся, что при щелчке мышью на этой кнопке открывается форма ПЛАН, и в ней отображаются все записи, связанные с текущей записью формы ТОВАР. При этом через форму можно произвести корректировку и добавление новых записей. Рассмотрим процедуру, которую сформировал мастер для открытия формы при нажатии кнопки. Откроем форму ТОВАР в режиме конструктора. Установив курсор на кнопку Заказано, в контекстном меню выберем команду Обработка событий (Build Event). Открывается окно модуля формы (рис. 15.16), связанного с формой ТОВАР. В окне отображается подготовленная мастером процедура обработки события "щелчок мыши (Click) на кнопке Заказано". Процедура обработки события является личной процедурой типа sub. Инструкция Sub Объявляет Процедуру С СОСТаВНЫМ Именем 3aKa3aHO_Click ;) , включающим имя кнопки и имя события. Пустые круглые скобки говорят об отсутствии аргументов. Рассмотрим текст программы, записанный между инструкциями sub и End Sub:
Инструкция DoCmd.OpenForm
stDocKame,
,
,
s t L i n k C r i t e r i a реализует
главную функцию процедуры — открывает форму ПЛАН.
Часть III. Разработка приложения пользователя
598
** Поставка товаров - Form_TOBAP (Code)
за . Здкл
-И I Click
Private Sub Заказано_С11сК: ( ) On Error GoTo Егг_Заказано_С11сК Darn stDocName As String Dim st-LinkCr iteria Аз String stDocNatne = ChrW{1055) & ChcU(1083) & ChrU ( 1072 ) £ ChrW(1085) stLinfcCriteria = "[КОД_ТОВ]=" с "' " 6 Ие![ЩЦ_ТОВ] DoCind. OpenForrn scDocName, , , s t L i n k C r i t e r i a E x i t Sub
Е1:г_Заказано_С11с]с: HsgBoy Err . Description Resume Exit_3aKa3aHo_Click End Sub
Рис. 15.16, Окно модуля формы ТОВАР с'процедурой обработки события Click для элемента Заказано
Docmd является объектом активного приложения Access, предназначенным для выполнения макрокоманд. OpenForm — метод, применяемый к данному объекту. Методу передаются два ар1умента. Первый из передаваемых аргументов задает имя открываемой формы, второй передает строковое выражение, определяющее условие отбора записей в открываемой форме. В данной инструкции для хранения значений аргументов используются переменные строкового типа stDocName, , , s t L i n k C r i t e r i a . В процедуре эти переменные ранее явно описываются инструкцией Dim: Dim StDocName As String Dim stLinkCriteria As String
для переменных указываются имена stDocMame, stLinkCriteria и строковый тип данных string. Прежде чем использовать описанные в процедуре переменные, необходимо присовить им значения. Следующие инструкции являются инструкциями присваивания, благодаря которым переменные получают конкретные значения: stDocName=ChrW(1055)fiChrW (1083)SChrW(1072)&ChrW{1085) TOB]="&
5Ме![КОД TOB]S"'"
Глава 15. Программирование на языке Visual Basic для приложений
599
Первая переменная сохраняет имя формы ПЛАН, вторая — выражение, указывающее, что выборка данных в открываемой форме ПЛАН должна производиться по значению поля код__тов в текущей записи формы ТОВАР. В процедурах VBA для ссылок на элементы управления текущей формы и л и отчета может быть использовано ключевое слово ме, заменяющее полный идентификатор текущего объекта — формы ТОВАР — Forms ! [ТОВАР] . Аргументы, записываемые в инструкции, разделяются запятыми. Два аргумента в инструкции DoCmd openForm были пропущены, запятые фиксируют их отсутствие. В конце инструкции отсутствие недостающих аргументов не помечается. Инструкция позволяет при возникновении ошибки передать управление программе обработки ОШИбоК. Метка Егг__Закаэано_С11с1с: определяет НЗЧШЮ ЭТОЙ про-
граммы. Программа обработки ошибок помещена между инструкциями Exit sub и End Sub, что позволяет отделить ее от части программы, соответствующей нормальному выполнению процедуры. В этой процедуре программа обработки ошибок включает две инструкции: О MsgBox — выводит на экран стандартное сообщение об ошибке. Выражение Err .Description определяет строковое значение, которое возвращается при ошибке. Description является свойством объекта Err. Значением свойства Description является краткое предупреждающее сообщение с описанием ошибки; О Resume -- указывает, с какой инструкции надо возобновить выполнение процедуры. В данном случае управление передается на метку, за которой стоит инструкция, осуществляющая выход из процедуры.
Корректировка процедуры, созданной мастером Процедура, созданная мастером, может быть откорректирована и дополнена. Например, для подтверждения необходимости вывода списка заказов текущего товара можно записать инструкции, организующие диалог. Введите после описания строковых переменных (см. рис. 15.16) следующие инструкции:
600
Часть III. Разработка приложения пользователя
If OTBGT=vbCancel Then Exit Sub End If
Первая инструкция определяет переменную Ответ для сохранения числового значения. Вторая присваивает этой переменной значение, возвращаемое функцией MsgBox. Функция MsgBox выводит в диалоговом окне (рис. 15.17) вопрос, включающий наименование товара шшм_тов из текущей записи формы, и кнопки ОК и Отмена (Cancel). Возвращаемое функцией значение 1 или 2 соответствует нажатой кнопке, Следующая инструкция If условие Then [инструкции] [Else [инструкции]] End If
выполняет группу инструкций в зависимости от значения выражения (True или False), заданного в условии. Если была нажата кнопка Отмена, выполняется инструкция, завершающая процедуру по Exit sub, иначе выполнение процедуры продолжается с инструкции, следующей за End i f . Приставка vb указывает на использование значений встроенных констант VBA.
Microsoft Office Access Вывести список заказов товара Монитор 17LG ? ОК
Отмена
Рис. 15.17. Диалоговое окно функции MsgBox
Для открытия списка заказов в режиме "только чтение" достаточно дополнить инструкцию DoCmd.OpenForm. . . С ПЯТЫМ аргументом acFormReadOnly. Приставка ас указывает, что в качестве аргумента используется значение встроенной константы Access. Замените в процедуре ключевое слово ме на Forms! [TOBAPJ и убедитесь, что процедура работает по-прежнему. Запишите прямо в инструкцию в качестве аргумента, задающего условие отбора, выражение "[код_тов]=" & » ' » s ме![код_тов] & •"". При этом можно удалить инструкцию описания переменной stLinkCriteria и инструкцию присваивания ей значения.
Глава 15. Программирование на языке Visual Basic для приложений
607
Выполнение запросов в процедуре обработки события Создайте процедуру, которая подключается при изменении цены товара в форме ТОВАР и обновляет стоимость этого товара во всех спецификациях накладных и общую стоимость отгруженного по накладной товара. Первая стоимость сохраняется в поле СУММА_ОТГР в таблице ОТГРУЗКА, вторая — в поле СУММА__НАКЛ в таблице НАКЛАДНАЯ. Для обновления стоимости товара с измененной ценой во всех спецификациях накладных воспользуйтесь созданным ранее запросом Расчет стоимости и в качестве условия отбора укажите ссылку на поле код_тов в форме ТОВАР: [ F o r m s ] ! [ТОВАР] ! [код_тов] (рис. 15.18). Для расчета общей стоимости накладной и обновления ее значения в таблице НАКЛАДНАЯ воспользуйтесь созданными ранее для этих целей запросами (см. главу 4): О Расчет стоимости, который в таблице ОТГРУЗКА группирует записи об отгрузках товаров, относящиеся к одной накладной, суммирует стоимость этих товаров и создает таблицу Стоимость накладной с результатами вычислений; П Обновление стоимости накладной, который обновляет поле СУММА_НАКЛ в таблице НАКЛАДНАЯ, используя данные из таблицы стоимость накладной.
Рас чет стоимости : запрос на обновление ОТГРУЗКИ
кадетов
НОМ_НАКЛ
код_ск код_тов
НАИМ_ТОВ ЦЕНА
КОЛ_ОТГР СУММА ОТГР
ЕЙ
Попе: Имя таблицы; Обновление: Условие отбора:
СУММА ОТГР ОТГРУЗКА [ЦЕНА]*[КОП_ОТГР]
КОД_ТОВ ТОВАР [Forms]! [ТОВАР]! [КО Д_ТОВ]
или:
Рис. 15.18. Запрос на обновление поля в таблице ОТГРУЗКА в записях с кодом товара из формы
Часть III. Разработка приложения пользователя
602
Выполнение перечисленных запросов в процедуре позволит автоматически поддерживать правильные значения в таблицах ОТГРУЗКА и НАКЛАДНАЯ и освободит пользователя от необходимости помнить и вручную выполнять разрозненные действия. В процедуре для выполнения запросов может быть использован объект DoOnd И его метод OpenQuery.
Поскольку при работе с формой может и не производиться изменения цены товара, предусмотрите в процедуре выход на диалог с пользователем, в результате которого будет определено, нужно ли выполнять обновление таблиц. Для этого используйте функцию нздВох, которая выводит в диалоговом окне текст, заданный ее первым аргументом, а также кнопки, например, Да и Нет (рис. 15.19), определяемые вторым аргументом, и, как любая функция, возвращает значение. Microsoft Office Access Вы изменили цену товара
Нет
Рис. 15.19. Диалоговое окно функции MsgBox
Для анализа возвращенного функцией значения и принятия решения о дальнейших действиях используйте инструкцию условного перехода: if . . . Then...[Else...] End If. Эта инструкция, в зависимости от значения выражения, заданного в условии (True ИЛИ False), ВЫПОЛНЯСТ TV ИЛИ ИНУЮ Группу ИНСТРУКЦИЙ.
Для создания процедуры выполните следующие действия. 1. Откройте форму ТОВАР в режиме конструктора. 2. Откройте окно свойств формы на вкладке События. В строке После обновления (After Update) выберите значение [Процедура обработки события] и щелкните по значку построителя в конце строки. Таким образом связывается выполнение создаваемой процедуры с обновлением значения поля в форме. В открывшемся окне модуля формы в шаблон процедуры обработки события private Sub 4EHA_AfterUpdate() (рис. 15.20) запишите инструкции процедуры. 3. Для определения переменных, сохраняющих строковые значения имен запросов и числовое значение, возвращаемое функцией мздзох, запишите инструкцию Dim: Dim stDocName As String, stDocNamel As String, stDocName2 As String Dim Ответ Аз Integer
Глава 15. Программирование на языке Visual Basic для приложений
X Поставка товаров - Form_TOBAP (Code)
603
L ,i П
|ЦЕКА P r i v a t e Sub ЦЕНА_А±cecUpdate() End Sub 3SN
Рис. 15.20. Инструкции начала и конца процедуры обработки события После обновления для формы ТОВАР
4. Запишите инструкцию присваивания переменной ответ значения, возвращаемого функцией Ответ=МздВох;"Вы изменили иену товара?", vbYesNo)
Приставка vb в значении второго аргумента указывает на использование значения встроенной константы VBA, определяющего вывод в диаюговом окне кнопок Да и Нет. 5. Для проверки, была ли нажата пользователем в диалоговом окне кнопка Нет, и, если была, выполнения инструкции выхода из процедуры Exit Sub, запишите инструкцию условного перехода, опустив необязательную ее часть: If OTB6T=vbNo Then Exit Sub
End If
Если переменная ответ получила значение, соответствующее нажатию кнопки Нет, выполняется инструкция, следующая за Then и завершающая процедуру по Exit Sub, иначе выполнение процедуры продолжается с инструкции, следующей за snd i f . 6. Для обновления полей в таблицах ОТГРУЗКА и НАКЛАДНАЯ запишите инструкции выполнения перечисленных выше запросов. Используйте объект DoCmd и применяемый к данному объекту метод OpenQuery. Аргументом этого метода является имя выполняемого запроса. Если для сохранения имен запросов предусмотрены переменные им перед использованием должны быть присвоены эти имена: stDocName^" Расчет стоимости" stDocNamel="Pac4eT стоимости накладной" з tDocName 2= "Обновление стоимости накладной" DoCmd. SetWarnings False d. OpenQuery (stDocName]
604
Часть III. Разработка приложения пользователя DoCmd.OpenQuery (stDocNamel) DoCmci. OpenQuery (stDocNarae2) DoCmd.SetWarnings True
Метод Setwarnings с аргументом False позволяет отключить вывод стандартных предупреждений на экран во время выполнения запросов. После выполнения запросов этот режим восстанавливается. В окончательном виде процедура может иметь вид, представленный на рис. 15.21.
.ч Поставка товаров - Рогт_ТОВДР (Cade) AfterUpclate
1ЦЕНД
On Error
GoTo
Err__IJEHA_AfterUpdate
.
:
Dim stDocHaioe As String, stDocNaroel As String, stDocNarne2 As String Dim Ответ As Integer Ответ = МздВох("Вы изменили цену товара ?", vbYesMo) If Ответ = vbNo Then E x i t Sub
End If stDocNaroe = "Расчет стоимости" stDocNarnel = "Расчет стоимости накладной" stDocWame2 = "Обновление стоимости накладной" DoCmd.SetWarnings False DoCmd.OpenQuery (stDocNarne) DoCmd.OpenQuery (st-DocNarnel) DoCmd.OpenQuery JstDocNanieS) D o C m d . S e t W a r n i n g s True Exit_L(EHA_AfterUpdate: E x i t Sub Егг_ЦЕНА_А±terUpdate: NsgBox E r r . D e s c r i p t i o n Resume E x i t _ q E H A _ A f t e r l l p d a t e
End Sub
Рис. 15.21. Процедура обработки события После обновления для формы ТОВАР
7. Закройте окно редактора VBA и возвратитесь в Access, выполнив команду FilejClose and Return to Microsoft Access.
Глава 15. Программирование на языке Visual Basic для приложений
605
8. Откройте форму ТОВАР. Измените цену товара. Откройте таблицы ОТГРУЗКА и НАКЛАДНАЯ и убедитесь, что процедура работает. 9. Измените инструкцию соогл, исправив в ней имена переменных на имена запросов. Удалите из инструкции описания переменные stDocName, stDocNamei, stDocName2 и инструкции присваивания им значений. Убедитесь, что и в этом случае процедура работает правильно.
Фильтрация записей формы по значению, выбранному из списка другой формы Допустим, в форме Выборка покупателей (рис. 15.22) есть элемент управления со списком значений (названий городов) и при выборе города должна выводиться на экран форма Покупатель со списком покупателей из этого города (рис. 15.24). Выборка покупателей Выборка покупателей по заданному городу Выбери город
Москва Самара Санкт-Петербург
AJ, v!'
Рис. 15.22. Форма Выборка покупателей со списком значений городов Источником строк списка городов в форме Выборка покупателей является инструкция SQL: SELECT ПОКУПАТЕЛЬ.АПРЕС_ПОК FROM ПОКУПАТЕЛЬ GROUP BY ПОКУПАТЕЛЬ.АЦРЕС_ПОК; Источником записей ленточной формы Покупатель (см. рис. 15.24) является соответствующая таблица. В форме использованы поля АДРЕС_ПОК (адрес покупателя) и НАИМ_ПОК (наименование). 1. Для решения этой задачи создайте в форме Выборка покупателей процедуру, связанную с событием После обновления элемента управления Список. Если элемент управления имеет имя Список2, процедура обработки СОбЫТИЯ будет Иметь ИМЯ CnMCOK2_AfterUpdate() : Private Sub CnHcoK2__Af terUpdate () End Sub
606
Часть ill. Разработка приложения пользователя
2. Используйте функцию MsgBox дли организации диалога с пользователем, уточняющего правильность его выбора. Определите строковую переменную Dirr, otvet AS s t r i n g . Присвойте этой переменной значение, возвращаемое функцией MsgBox: Otvet=MsgBox("Bac интересуют покупатели, проживающие Б городе" & Ке![Список2] & " ?", vbOKCancel)
В текст первого аргумента функции включите ссылку на значение, выбранное в списке. При обращении к значению элемента управления Списск2 используйте ссылку на текущий объект— Н е ! . Текущим, объектом является форма Выборка покупателя. В качестве второго аргумента используйте константу VBA, которая определит вывод в окне диалога двух кнопок ОК и Отмена (Cancel). 3. Используйте инструкцию условного перехода i f . . .End if для проверки возвращаемого функцией значения и завершения выполнения процедуры Exit sub, если город выбран неверно и нажата кнопка Отмена, If Otvet=vbCancel Then Exit Sub End If
4. Для открытия формы Покупатель воспользуйтесь объектом DoCnd и его методом QpenForm. В качестве аргументов, указывающих имя открываемой формы и условия отбора записей, используйте строковые значения: DoCmd.OpenForm "Покупатель", , , "Покупатель![АДРЕС_ПОК] =Forms![Выборка покупателей]!;Список2]"
Окончательно процедура обработки события После обновления элемента управления Список2 запишется в виде: Private Sub CrracOK2_AfterUpdate(; ' Определение строковой переменной. Din Otvet As String 1
Присваивание переменной значения, возвращаемого функцией MsgBox
Qtvet=MsgBox f "Вас интересуют покупатели, проживающие в городу " & _Ме![Список2] & " ?", vbOKCancel) ' Инструкция If...End If позволяет выполнить вывод списка ' покупателей только при подтверждении, что выбран нужный город If Otvet=vbCancel Then Exit Sub End If 1
Открытие формы, имя которой и условие отбора записей
' указано строковыми значениям*
Глава 15. Программирование на языке Visual Basic для приложений
607
DoCir.d.OpenForm "Покупатель", , , " Покупатель![ДЦРЕС_ПОК]= Forms![Выборка покупателей]1[Список2]" Exir. Sub 2nd Sub
Сообщение, выданное в результате выполнения в процедуре функции мздвох при выбранном в списке городов значения "Санкт-Петербург", приведено на рис. 15.23. Microsoft Office Access Вас интересуют покупатели, проживающие в городе Санкт-Петербург ?
ок
J
Отмена
Рис. 15.23. Сообщение, формируемое функцией MsgBox
Форма с записями, отфильтрованными в соответствии с заданными через выбор в списке условиями отбора, приведена на рис. 15.24.
Покупатель ПОКУПАТЕЛИ ИЗ ГОРОДА
Санкт-Петербург
Наименование организации покупателя Монитор Компьютер га нд Компьютерный мир
Запись: И
1 > 1 >.lJ>»*l из 3 (Фильтр)
Рис. 15.24. Форма Покупатель, открытая процедурой при выборе города
Использование формы
с календарем для ввода дат Элемент ActiveX Календарь часто неудобно размещать в форме документа, где требуется ввод даты. Чтобы воспользоваться календарем, можно создать для него отдельную форму и открывать ее,с помощью процедуры обработки
608
Часть III. Разработка приложения пользователя
события, например, при открытии формы документа. Для переноса даты, выбранной в календаре, в поле даты также может использоваться процедура, связанная с событием в'поле, куда нужно ввести дату. Процедура открытия формы с календарем может иметь вид: Private Sub Form_0pen(Cancel As Integer) ' Открыть форму Календарь2 DoCmd.OpenForm "Календарь2" ' Метод Today делает текущей датой календаря сегодняшнюю дату ' Элемент управления Календарь з форме имеет имя ЭлементАс±1уеХ2 Forms!Календарь2!ЭлементАсЪ1уеХ2,Today End Sub
Процедура переноса даты из календаря в поле ДАТА_ДОГ может иметь вид: Private Sub ДАТА__ДОГ__ОЫС11сК {Cancel As Integer) 1
Присваивание дате значения, выбранного в календаре
ДАТА_ДОГ=Forms ! Календарь2 ! SuieMeHTActiveX2. Value End Sub
Выполнение этой процедуры целесообразно связать с событием Двойное нажатие кнопки в поле даты. Двойное нажатие кнопки мыши пользователем на поле даты приведет к присвоению полю значения даты, выделенной в календаре. Использование события Двойное нажатие кнопки сохранит возможность ручного ввода даты в поле. Использование события Нажатие кнопки исключило бы такую возможность, т. к. уже при установке курсора в поле выполнялась бы процедура присвоения полю значения даты, выделенной в календаре. Поскольку процедура привязывается к событиям в полях формы документа, один и тот же календарь может использоваться в различных формах.
Поиск данных с использованием индексов Рассмотрим, как найти данные о накладной в таблице базы данных "Поставка товаров" по первичному ключу— идентификатору накладной. Напомним, что таблица НАКЛАДНАЯ имеет составной ключ, включающий поля номер накладной — НОМ_НАКЛ и код склада — код_ск. Для выполнения процедуры поиска предусмотрим кнопочную форму Поиск. Создадим форму в режиме конструктора, не выбирая для нее источника данных. Сделаем кнопку для запуска процедуры, используя панель элементов при отключенном мастере. В режиме формы она может иметь вид, представленный на рис. 15.25.
Глава 15. Программирование на языке Visual Basic для приложений
609
ЁГ-'Поисн Поиск-данных о накладной
Рис. 15.25. Кнопочная форма для запуска процедуры Для быстрого поиска записи по первичному составному ключу используйте метод Seek объекта DAG.Recordset.
Объект ОАО.Recordset представляет собой набор записей, который обеспечивает доступ к записям и обработку каждой из них. Для создания набора записей используйте метод OpenRecordset объекта Database — базы данных. Метод seek применяется к индексированному набору записей — объекту ОАО.Recordset, источником записей для которого является таблица. Он находит запись, удовлетворяющую заданным условиям для текущего индекса, и делает эту запись текущей. Текущий индекс указывается с помощью свойства Index объекта ОАО. Recordset перед ВЫЗОВОМ метода Seek. Для выполнения сформулированной задачи в процедуре понадобятся: объектная переменная типа Database для хранения ссылки на объект, предсташшющий базу данных, и переменная типа ОАО.Recordset для хранения ссылки на объект, представляющий набор записей. Синтаксис методов seek и OpenRecordset требует для предсташтения существующего табличного объекта ОАО,Recordset и объекта Database использования объектной переменной.
Процедура поиска по первичному ключу Процедура поиска по первичному ключу может быть записана следующим образом: Private Sub KHonKa_Click{) ' Определение объектных переменных Dim с*ЬзПоставкаТозаров As Database Dim rstHaioraflHan As ОАО.Recordset 1
Определение строковых переменных
Dim strHOM_HAtOl As String Din strKOfl_CK As String 1
Запись в объектную переменную ссылки на текущую БД
Set dbsnocTaBKaToBapOB=CurrentDb() ' Открытие набора записей для таблицы НАКЛАДНАЯ и запись ссылки 1
на него в объектную переменную rst Накладная
610
_
Часть
III.
Разработка
приложения
пользователя
Set гзи-1акладная=с!ЬзПоставкаТоварсв . CpenRecordset ( "НАКЛАДНАЯ " , dbOperiTable ) 1
Задает индекс с именем PrimaryKey, построенный пс ключу таблицы
' НОМ_НАКЛ+КОД_СК; этот индекс будет использован при поиске. гз1:Накладная, Incex=" PrimaryKey" ' Присваивает строковым переменным значения, задаваемые ' пользователем в окне ввода параметров (см. рис. 15.26) зггНОМ_НАКЛ= Input Box ( "Введите номер накладной", "Ввод параметров поиска"! strKX}n_CK=InputBox! "Введите номер склада", "Ввод параметров поиска") 1
Метод Seek, примененный к набору записей, отыскивает и делает
' текущей запись с указываемыми в аргументах ' значениями первичного составного ключа rst Накладная. Seek "=", strHOM_HAKJT, strKOfl_CK ' Инструкция условного перехода проверяет наличие записи с ' указанным ключом If гзСНакладная.МсМаг,сп Then ' Вывод сообщения и заг*ер'сение процедуры МздВох "Идентификатор tie найден!" Exit Sub
End If 1
Вывод данных из указанных полей найденной записи (см. рис. 15.27]
MsgBox " Накладная — " & гз!:Нэкладная ! [НОМ_НАКЛ] s ", " & ! [КОД_СК] & " выписана " £ & гз^акладная! [ДАТА^СТГР] , vbOKOnly, "Данные из записи, найденные методом Seek"
Ниже приводится подробное объяснение используемых в процедуре инструкци и. 1. Откройте окно модуля формы, щелкнув на кнопке панели инструментов Программа. Форма должна быть закрыта или находиться в режиме конструктора. 2. В шаблон процедуры обработки события Нажатие кнопки (Click) для КНОПКИ ПОИСКа ПО ПерВИЧНОМу КЛЮЧУ (идентификатору) P r i v a t e
Sue
Кнопка_С11сМ) запишите приведенные выше инструкции процедуры. 3. Инструкции
описывают объектные переменные для хранения ссылок на базу данных и набор записей.
Глава 15. Программирование на языке Visual Basic для приложений
611
4. Для присваивания объектной переменной ссылки используется инструкция Set. Инструкция Set dbs!locTaBKaToBapOB=CurrentDb ( )
присваивает объектной переменной типа Database значение ссылки на текущую базу данных, 5. Для поиска записи в таблице НАКЛАДНАЯ с использованием индекса создайте на ее основе набор записей. Используйте для этого метод cpenRecordset объекта Database и сохраните ссылку на этот объект в объектной переменной гз^акладная: Set гз1Накладная=ЗЬ5ПоставкаТоваров.OpenRecordset ( "НАКЛАДНАЯ" , dbOper.Table )
6. Прежде чем использовать метод seek, присвойте свойству index набора записей имя первичного индекса таблицы НАКЛАДНАЯ. Метод seek будет производить поиск записи, используя этот индекс. Напомним, что индекс с именем PrimaryKey построен по ключу таблицы НОМ_НАКЛ+КОД_СК. гз1:Накладная. Index="PrimaryKey"
7. Для задания параметров поиска НОМ_НАКЛ и код_ск используйте функцию inputBox, которая выводит на экран диалоговое окно с полем ввода и организует ожидание текста. При нажатии пользователем кнопки ОК в этом окне функция возвращает содержимое поля ввода. Присвойте введенное пользователем значение параметра строковым переменным зсгНОМ_НАКЛ И strKOfl._CK: strHCM_HAKn==InputBox ("Введите номер накладной", "Ввод параметров поиска") strKOfl_CK=InputBox("Введите номер склада", "Ввод параметров поиска")
Формируемые функцией InputBox окна ввода значений для строковых переменных приведены на рис. 15.26. Первый аргумент функции inputBox определяет текст, отображаемый в окне диалога. Второй аргумент определяет текст, выводящийся в заголовке окна диалога. Третий аргумент определяет текст, отображаемый в поле ввода (в примере не задан). 8. Для поиска записи используйте метод seek, примененный к набору записей гз^акладная. Этот метод находит запись, в которой значения первичного составного ключа равны указанным в аргументах значениям, и делает ее текущей: Seek " = ", strHOM НАКЛ, strKOfl CK
Часть III. Разработка приложения пользователя
612
9. Для проверки результата поиска используйте свойство NoMatch набора записей гзинакладная. Свойство приобретает значение True, если запись с заданным ключом не найдена, и False в противном случае. Использование значения этого свойства в инструкции условного перехода i f . . .Then. . .End if позволяет направить выполнение процедуры по различным ветвям. 10. В рассмотренной процедуре отработаны далеко не все ситуации, которые могут возникнуть при ее выполнении. В частности, можно предусмотреть реакцию на нажатие кнопки Отмена (Cancel) в диалоговом окне функции inputBox (рис. 15.26). Если пользователь нажмет кнопку ОК или клавишу <Enter>, функция inputBox возвратит содержимое поля ввода. Если пользователь нажмет кнопку Отмена (Cancel), функция возвратит пустую строку. С помощью инструкции if не сложно организовать проверку значения, возвращаемого функцией inputBox, и, в случае возврата пустой строки, организовать выполнение процедуры по некоторой другой ветке. 11. Для вывода данных из полей найденной записи используйте инструкцию мздвох, результаты выполнения которой приведены на рис. 15.27. Ввод параметров поиска Введи номер накладной
Ввод параметров поиска Введи номер склада
СО!
Рис. 15.26. Окна ввода значений для строковых переменных Данные на записи, наиденные методом Seek Накладная -НОСИ, С01 выписана 09,03,2004
Рис. 15.27. Результат поиска по идентификатору
Глава 15. Программирование на языке Visual Basic для приложений
613
Расчет в текущей записи однотабличной формы и обновление таблицы Допустим, для просмотра и корректировки данных о товарах на основе таблицы ТОВАР создана форма (рис. 15.28). Необходимо при изменении в процессе работы цены товара или текущего остатка автоматически пересчитывать и сохранять в таблице стоимость остатка. Таблица ТОВАР имеет ключ код_тоз и содержит сведения: о цене в поле ЦЕНА, о текущем остатке — в поле ТЕК_ОСТ и о его стоимости — в поле стоимость. Для того чтобы при изменении через форму значений цены или текущего остатка изделия новое расчетное значение стоимости остатка заносилось в таблицу, создадим процедуру обработки события После обновления (After Update) для полей ЦЕНА и ТЕК ост.
Наличие товаров на складе Код товара
ГГГО2
Наименование товара IFDD 3,5 360,00р.
Цена Единица измерения
[коробка
Ставка НДС Поставки прекращены Текущий остаток Стоимость
Б% Г~ 20 7 200,00р. из
10
Рис. 15.28. Форма для работы с данными о товаре
Для создания процедуры откройте форму в режиме конструктора и окно свойств поля ЦЕНА. На вкладке События (Event) в строке После обновления (After Update) выберите значение [Процедура обработки события] и в конце строки щелкните на кнопке построителя. В открывшемся окне модуля формы (рис. 15.29) в шаблон процедуры обработки события Private sub UEHA__AfterUpdate() ЗЭПИШИТе ИНСТРУКЦИЮ присваивания СТОИМОСТЬ=ЦЕНА* ТЕК__ОСТ
Эта инструкция заносит в поле таблицы стоимость новое рассчитываемое значение.
Часть HI. Разработка приложения пользователя
614
Событие После обновления (After Update) для элемента управления Поле возникает после того, как пользователь ввел новое или изменил существующее значение в поле и перешел к другому элементу управления или выполнил команду Сохранить запись (Save Record) в меню Записи (Records) или перешел к другой записи.
-ч Поставка товаров - Form_TQBAP (Code) :ЦЕНА
т I AfteiUHate
'
Option Compare Database pptjion Private Sub TEK_OCT_BeforeUpdate(Cancel As Integer) СТОИИОСТЬ = ЦЕНА * TEK_OCT End Sub
Private Sub UEHA_AfterUpdate() СТОИИОСТЬ = ЦЕНА * TEK_OCT End Sub
Рис. 15.29. Окно модуля формы
Создайте такую же процедуру для поля ТЕК__ОСТ. Процедура для этого поля будет ИМеТЬ ИМЯ TEK_OCT_AfterUpdate ( ) .
Расчеты в текущих записях многотабличной формы и обновление таблиц В базе данных для просмотра, корректировки и ввода данных по договорам создана многотабличная форма ДОГОВОРЫ_С_ПОКУПАТЕЛЯМИ (см. рис. 6.22 главы 6). ДОПУСТИМ, НеобхОДИМО При ИЗМенеНИИ ЗНачеНИЯ ПОЛЯ Количество п о с т а в к и
(кол_пост), а также при добавлении или удалении строк спецификации договора автоматизировать расчет суммы поставки (поле СУММА_ПОСТ) в каждой строке и суммы по договору (поле СУМНА_ДОГ) с сохранением результатов в таблицах ПОСТАВКА_ПЛАН и ДОГОВОР. I. Для расчета и обновления полей СУММА^ПОСТ и СУММА_ДОГ в таблицах ПОСТАВКА_плАН и ДОГОВОР при изменении в форме значения поля кол__пост (оно размещается в подчиненной форме) создайте следующую процедуру обработки события После обновления (After Update) для этого поля: Private Sub KOJl_noCT_AfterUpdate ( ] ' Вычитание из общей суммы по договору ,в текущей записи главное части
Глава 15. Программирование на языке Visual Basic для приложений
615
' фермы) старого значения суммы поставки текущего товара в подчиненной ' форме Forms![ДОГОВОРЫ_С_ПОКУПАТЕЛЯМИ].СУММА_ДОГ=Forms! _[ДОГОВОРЫ_С__ПОКУПАТЕЛЯМИ] . СУММА_ДОГ -СУММА_ПОСТ 1
Расчет новой суммы текущего изделия в подчиненной форме
С №МА_ПОСТ=ЦЕНА*КОЛ_ПОСТ 1
Увеличение общей суммы по договору в текущей записи главной частк
' формы на величину новой суммы поставки текущего товара в подчиненной 1 форме
2. Убедитесь, что эта процедура правильно производит расчет также при добавлении новой строки в подчиненную форму. 3. Для расчета и обновления данных в таблицах ПОСТАВКА_ПЛАН и ДОГОВОР при удалении строки из подчиненной формы должна быть создана процедура обработки события Удаление (Delete) для подчиненной формы: Private Sub Form_Delete{Cancel As Integer) Korms![ДОГОВОРЫ_С_ПОКУПАТЕЛЯМИ].СУММА_ДОГ= Forms![ДОГОЗОРЫ_С_ПОКУДАТЕЛЯМИ].СУММА_ДОГ -СУММА_ПОСТ End Sub
4. Для перехода к созданию процедуры Form_Deiete щелкните мышью на пересечении линеек в подчиненной форме и откройте ее свойства. На вкладке События (Event) в строке Удаление (Delete) выберите значение [Процедура обработки события] и перейдите в окно модуля формы на процедуру обработки этого события.
Обновление связанных записей подчиненной таблицы при изменении записи в главной Предусмотрим в базе данных "Поставка товаров" хранение данных о запасах товаров, если товар одного наименования может храниться на нескольких складах. В этом случае данные о текущих запасах (ТЕК_ ЗАПАС) и их стоимости (стоимость) должны размещаться в таблице ЗАПАС с составным ключом код товара (код_тов) и код склада (код_ск). Эта таблица является подчиненной для таблиц ТОВАР и СКЛАД. Допустим, необходимо при изменении цены товара в таблице ТОВАР обеспечить автоматический перерасчет стоимости запасов товара на разных складах. Особенность задачи заключается в том, что перерасчет должен произво-
616
Часть III. Разработка приложения пользователя
диться одновременно в нескольких записях подчиненной таблицы при обновлении значения цены в связанной записи главной таблицы. Таким образом, для решения задачи требуется позаписевая обработка набора подчиненных записей, поэтому задача не может быть решена обработкой текущих записей в форме, источником записей главной части которой является таблица ТОВАР, а подчиненной — таблица ЗАПАС. Для работы со справочником товаров и обновления поля ЦЕНА используем форму ТОВАРЫ, построенную на основе одноименной таблицы (рис. 15.30). Для решения поставленной задачи нужно создать процедуру обработки события После обновления (After Update) для поля ЦЕНА.
Код товара Наименование товара Цена Запись:
Т 003
HDD Maxtor 20GB [1 230,00р. из Ш
И | < \
Рис. 15.30. Форма для работы со справочником товаров В шаблон процедуры обработки события Private Sub 4 E H A _ A f t e r U p d a t e < )
для поля ЦЕНА запишите инструкции: 1. Определите объектные переменные: типа Database для хранения ссылки на объект, представляющий базу данных, и типа DAO.Recordset для хранения ссылки на объект, представляющий набор записей. Объект DAO.Recordset позволяет получить доступ к записям набора и имеет многочисленные методы, позволяющие обработать данные каждой его записи. Источником записей объекта DAO. Recordset может быть таблица, запрос или инструкция SQL. Dim dbs As Database Dim stab As DAO.Recordset
2. Используйте инструкцию Set для присваивания объектной переменной dbs значения ссылки на текущую базу данных currentDb ( j , а объектной переменной stab — значения ссылки на набор записей. Ссылку на набор записей формируйте с помощью метода OpenRecordset объекта Database, Замечание
j
В модели объектов DAO открытый объект Recordset входит в семейство Recordsets, которое в свою очередь включается в объект Database. При создании объекта Recordset он автоматически добавляется в семейство.
Глава 15. Программирование на языке Visual Basic для приложений
_
617
В качестве источника записей открываемого набора используйте таблицу ЗАПАС, т. к. в записях этой таблицы нужно произвести перерасчет. Set dbs=CurrentDb{) Set stab=dbs.OpenRecordset ("ЗАПАС", dbOpenTable)
Замечание При использовании модели ADO аналогичный набор данных Recordset может быть открыт следующими инструкциями: Din rst As New ADODB.Recordset rst.Ореп"ЗАПАС", CurrentProject.Connection, adOpenKeySet,
adLockOptimistic 3. Для вывода сообщения о товаре, у которого изменилась цена, запишите в процедуру следующую инструкцию: MsgBox "Для товара с кодом " 5 КОД_ТОВ и " Новая цена " £ ЦЕНА, vbOKOnly
Для ссылки на поля текущей формы достаточно использовать их имена код_тов и ЦЕНА. Диалоговое окно, выводимое на экран этой инструкцией, представлено на рис. 15.31.
Microsoft Office Access Для товара с кодом Г001 новая иена 1000 • К
Рис. 15.31. Сообщение инструкции MsgBox
4. Для просмотра всех записей из набора с именем stab организуйте цикл Do U n t i l
<условие> <инструкции> Loop- При ИСПОЛЬЗОВаНИИ КЛЮЧСВОГО
слова Until (До) в предложении DO условие проверяется до выполнения блока инструкций цикла, и блок инструкций повторяется в цикле до тех пор, пока условие имеет значение False, после чего управление передается инструкции, следующей за Loop. В качестве условия выполнения цикла запишите stab.EOF. Свойство EOF позволяет определить конечную границу в наборе записей stab, т. е. узнать, что записей в наборе не осталось. Do Until stab.EOF <инструкции> Loop
618
Часть III. Разработка приложения пользователя
5. Внутри цикла запишите инструкции, которые позволят последовательно просматривать записи набора и отобрать записи, связанные по полю код_тов с текущей записью формы. Для отобранных записей обновите значение поля стоимость. Чтобы открыть доступ к редактированию записей набора, используйте метод Edit. 6. Чтобы перейти к следующей записи набора и сделать ее текущей, используйте МеТОД MoveNext. stab.MoveNext
Именно эта инструкция позволит дойти до конца набора и прекратить выполнение цикла. Без этой инструкции цикл будет выполняться бесконечно. 7. Между инструкцией, открывающей доступ к записи, и инструкцией, изменяющей текущую запись, напишите следующие инструкции: If
stab!KOfl_TOB=KCfl_TO3
Then
stab!СТОИМОСТЬ-ЦЕНА* stab!ТЕК_ЗАПАС
stab.Update End If
В условии инструкции i f . . .End if сравнивается значение код_тов в текущей записи набора со значением в текущей записи формы и, если они совпадают, выполняются следующие действия: • инструкция присваивания нового значения полю стоимость в текущей записи набора stab; •
метод update, обновляющий текущую запись набора.
8. Организуйте счетчик числа обновленных записей. Для этого определите числовую переменную Dim col AS integer, До начала цикла присвойте ей значение, равное нулю: Со1=о. Внутри цикла в ряду инструкций, следующих в предложении i f . . .End if за Then, каждый раз увеличивайте значение счетчика на 1, записав coi=coi+i. 9. Для закрытия объекта Recordset после завершения работы с ним в цикле используйте метод close, который, кроме того, приведет к исключению объекта из семейства: stab.Close
10. Для вывода сообщения о числе обновленных записей включите в процедуру инструкцию: МздВок "Обновлено записей: " ь, Col, vbOKOnly
которая выведет на экран следующее диалоговое окно (рис. 15.32).
Глава 15. Программирование на языке Visual Basic для приложений
619
Microsoft Office Access [X] Обновл EMO записей ; 2
i
o"k"
l]
Рис. 15.32. Сообщение о числе обновленных записей
1. Для просмотра обновленных записей с результатами перерасчета стоимости в таблице ЗАПАС запишите инструкции, открывающие одноименную форму (рис. 15.33): Dim stiDocName As String Dim stLinkCriceria As String stDocName="ЗАПАС" stLinkCriteria="[КОД_ТОВ] DoCirid. Open Form stDocName,
S " " £ Me![КОД_ТОВ] S , stLinkCriteria
Ш ЗАПАС Код товара Код склада Текущий запас
> JT001 [Т 001
#
JC01
|С02 ]
|
Стоимость „Aj
4 j
4 000,00р.
16 |
16000,00р.
0[
0.00р.
_J
_и Запись: И | >'- ][
1 > | И |>#| из 2(Фильтр)
Рис. 15.33. Форма для просмотра текущих запасов товаров на складах и их стоимости
12. В целом процедура обработки события Private :;EHA_Af terUpdate ( ) может быть записана в следующем виде: Private Sub UEHA_AfterUpdate(] On Error GoTo Err_JIEHA_AfterUpdate ' Определение объектных переменных Dim dbs As Database Dim stab As DAO,Recordset 1
Определение числовой переменной для счетчика
Dim Col As Integer 1
Определение строковых переменных для открытия формы
Dim stDocName As String Dim stLinkCriteria As String
Sub
Часть III. Разработка приложения пользователя
620
' Запись в объектную переменную dbs ссылки на текущую БД Set dbs=CurrentDb() ' Создание в текущей БД объекта Recordset на основе таблицы ЗАПАС 1 и запись ссылки на него в объектную переменную stab Set stab=dbs.OpenRecordset("ЗАПАС", dbdpenTable] 1 1 1 1
Динамический набор записей Recordset возвращает только ключ записи, не делая текущими значения ее полей Вывод сообщения о новой цене, введенной в поле формы (см. рис. 15.31)
MsgBox "Для товара с кодом " & КОД_ТОВ & " новая цена " & ЦЕНА, vbOKOnly 1
Обнуление счетчика числа записей с заданным кодом изделия Со1=0 ' Цикл Do Until ... Loop для просмотра всех записей из набора stab Do Until stab.EOF ' Открытие режима редактирования текущей записи набора stab.Edit 'Сравнение кода изделия в текущей записи набора с заданным в форме If 51аЫЩЦ_ТОВ=КОД_ТОВ Then Col=Col+l ' Расчет стоимости в текущей записи набора Stab! CTOHMOCTb=UEHA*stab ! TSKJ3AITAC 1
Обновление записи набора
stab.Update End If 1
Переход к следующей записи набора
stab.MoveNext Loop ' Закрытие объекта Recordset stab.Close ' Вывод сообщения о числе обновленных записей (см. рис. 15.32] KsgBox "Обновлено записей: " & Col, vbOKOnly 1
Подготовка параметров и открытие формы ЗАПАС с обновленными ' записями (см. рис. 15.33) stDocNarr.e="3AriAC" ' Имя формы stLinkCriteria="[KOfl_TOB]=" & "'" & Me![КОД_ТОВ] S "'" ' Условие отбора записей DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_M"EHA_Af terUpdate:
Глава 15. Программирование на языке Visual Basic для приложений
621
Exit Sub Err_nEHA_AfterUpdate: MsgBox Err.Description Resume Exit_ UEHA_AfterUpdate End Sub
13. Для проверки синтаксиса инструкций, составляющих процедуру, выполните компиляцию загруженных модулей текущего проекта, воспользовавшись командой редактора VBA DebugjCompile Поставка товаров. 14. Возвратитесь в Access, выполнив команду FileJClose and Return to Microsoft Access. 15. Откройте форму ТОВАРЫ и, изменяя значение цены в различных записях, убедитесь, что процедура выполняется правильно. 16. Замените источник записей (таблицу ЗАПАС) объекта Recordset с именем stab на инструкцию SQL, которая выполнит выборку из таблицы ЗАПАС записей, связанных с текущей записью формы ТОВАРЫ по полю код_гов. ДЛЯ ЭТОГО запишите ИНСТРУКЦИЮ Set
stab=dbs.OpenReccrdset В СЛС-
дуюшем виде; Set stab=dbs.OpenRecordset("SELECT * FROM ЗАПАС " & "WHERE КОД_ТОВ='" & Forms ! ТОВАРЫ !КОД_ТОВ &
)
Инструкция SELECT выбирает все поля из таблицы ЗАПАС и те записи, где код_тов равен код_тов в текущей записи формы ТОВАРЫ. Ссылку на ПОЛе формы Forms! ТОВАРЫ !КОД_ТОВ МОЖНО ЗамеНИТЬ На Ке!КОД_ТОБ,
т. к. при выполнении процедуры форма ТОВАРЫ является активным объектом. 17. Поскольку полученный таким образом набор состоит только из тех записей, в которых требуется обновление значения стоимость, уберите из процедуры инструкцию if .. .Then . . .End i f , с помощью которой из полного списка записей отбирались нужные. 18. Убедитесь, что процедура и теперь работает правильно.
Создание формы Создайте в базе данных "Поставка товаров" средствами VBA новую форму на основе таблицы ПОКУПАТЕЛЬ, отображающую содержимое поля НАИМ_ПОК — наименование покупателя. Новая форма может быть создана в процедуре Access VBA методом CreateForm объекта Application, который возвращает объект Form. Метод createForm открывает пустую новую форму в режиме конструктора.
622
Часть III. Разработка приложения пользователя
Чтобы указать источник данных новой формы, используется свойство формы RecordSource. В качестве значения свойства может быть использовано имя таблицы, запроса или SQL-оператор. Присваиваемое свойству значение должно иметь текстовый ( s t r i n g ) тип данных. Для размещения в форме различных элементов управлении используется метод createControi, с помощью которого можно создать и поле (элемент техгвох) с присоединенной подписью (элемент Label). Аргументы этого метода указывают: П первый — имя открытой формы или отчета, в котором создается элемент управления; П второй — тип создаваемого элемента управления; П третий — область формы, в которой следует разместить элемент; по умолчанию это область данных (Detail section); П четвертый — имя родительского элемента, к которому присоединяется создаваемый; П пятый — имя поля, которое должно выводиться элементом управления TextBox, или подпись для элемента Label; П шестой — координаты размещения левого верхнего угла элемента; П седьмой — ширину и высоту элемента. Для записи аргументов используются константы Access. Перед созданием элемента управления переменным intLabeix, intiabeiv, intDatax, intDataY присваиваются значения, которые определяют координаты его размещения. Ниже приведены инструкции процедуры, в которой создается форма со стандартным именем и единственным полем. Sub НоваяФорма(} 1
Определение объектной переменной для формы
Dim frm As Form 1 1
Создание новой формы и сохранение ссылки на нее в объектной переменной
Set frm=CreateForm 'Определение в качестве источника данных формы таблицы ПОКУПАТЕЛЬ £гт.КесогбЗоигсе="ПОКУПАТЕЛЬ" ' Определение объектных переменных для поля и надписи в форме Dim ctlLabel As Control, ctlText As Control ' Определение переменных для координат размещения элементов Dim intDataX As Integer, intDataY As Integer
Глава 15. Программирование на языке Visual Basic для приложений
623
Dim intLabelX Аз Integer, intLabelY As Integer ' Присваивание значений координатам размещения ' элементов управления в форме intlabe!X=100 intLabelY=100 intDataX=100 intDataY=500 ' Создание в форме элемента управления - поля НАИМ_ПОК ' по умолчанию в разделе данных и стандартного размера Set ctlText-CreateControl (frm.Name, acTextBox, , "", "'НАИМ^ОК",
intDataX, intDataY) 1
Создание элемента управления — подписи поля НАИМ_ПОК
Set ctlLabel^CreateControlffrm.Name, acLabel, , ctlText.Name, "Наименование организации", intLabelX, intLabelY) 1
Восстановить форму из свернутого состояния
DoCrrd. Res tore End Sub
Дополните процедуру следующими инструкциями: ' Эта инструкция выведет в окно отладки имя вновь созданной формы Debug.Print frm.Name 1
Изменение имени поля (по умолчанию поле имеет имя полеО)
ctlText.Name="полюшко" 1
Эта инструкция выведет в окно Immediate Windows имя поля
Debug.Print ctlText.Name ' Закрытие формы с сохранением DcCmd.Close acForm,
frm.Name,
acSaveYes
Поместите процедуру в стандартный модуль. Для выполнения активной процедуры выполните в редакторе Visual Basic команду Run Sub/UserForm в меню Run. В противном случае выполните команду Run Macro|Run. При выполнении последней команды отобразится окно с полным списком процедур всех стандартных модулей проекта. Выберите процедуру Новая форма и выполните ее. Напомним, что окно отладки Immediate открывается в редакторе Visual Basic командой View|Immediate Window. Перейдите в окно Access, найдите форму в окне базы данных — по умолчанию она получила имя "Форма!", если до этого не было формы с таким номером; откройте ее (рис. 15.34) и убедитесь, что процедура работает правильно.
Часть III. Разработка приложения пользователя
624
В® 3
DP Форма! : форма Наименование покупателя
1
^
(Компьютерный мир
За чись:
И | f j|
7
>
И_>#] из 7
Рис. 15.34. Форма, созданная в процедуре модуля
Создание новой таблицы Создайте в базе данных "Поставка товаров" средствами VBA новую таблицу СОТРУДНИК с полями Табельный номер — ТАЕН и ФИО. В качестве первичного ключа таблицы используйте поле ТАБН. Для проверки работоспособности программы оформите ее, как процедуру обработки события нажатия кнопки в некоторой форме. Для работы со структурой таблицы используйте следующие объекты: П Database, представляющий базу данных; П TabieDef, представляющий структуру таблицы; П Field, определяющий поле таблицы; П index, который позволяет определить ключ таблицы. 1. В процедуре создайте объектные переменные типа Database, TabieDef, Field и index, предназначенные для хранения ссылок на соответствующие объекты базы данных. Dim dbsnocTaBKaTosapOB As Database Dim tbl As TabieDef Dim fiel As Field Dim indl As Index
2. Для создания нового объекта TabieDef — таблицы с именем СОТРУДНИК примените метод createTabieDef к объектной переменной dbsnocTaBKaToeapoB, которая указывает на объект Database. Для создания нового объекта Field — текстового поля с именем ТАЕН, сохраняющего не более трех символов, — примените метод createFieid к объектной переменной tbl, которая указывает на объект TabieDef: Set dbsIlocTaBKaTQBapOB=CurrentDb ( ) Set tbl=dbsnocTaBKaToBapOB.CreateTableDef("СОТРУДНИК") Set fiel=tbl.CreateFieid("ТАБН", dbText, 3}
Глава ^.Программирование на языке Visual Basic для приложений
625
3. Для добавления поля (ссылка на него сохранена в объектной переменной ziel) в семейство Fields, входящее в объект TableDef, используйте метод Append и запишите: tbl.Fields .Append f iel Внимание Перед именем семейства так же, как перед именем метода, который выполняется для указанного перед этим объекта, ставится точка. 4. Для создания в таблице второго поля название используйте ту же объектную переменную fiei и так же добавьте его в семейство Fields: Set f i e l = t b l . C r e a t e F i e l d { " Ф И О " , dbText, т:Ы . Fields .Append
15)
f iel
5. Для добавления таблицы — объекта TableDef (ссылка на него сохранена в объектной переменной tbi) — в семейство TabieDefs используйте метод этого семейства Append: ЗЬзПостазкаТоваров . TableDef s .Append tbl
6. Теперь создайте первичный ключ новой таблицы: •
прежде всего, создайте индекс, который будет использоваться в качестве первичного ключа, укажите его имя, например, то, которое по умолчанию используется при определении ключа таблицы в конструкторе — primaryKey. Для этого используйте метод create index объекта TableDef: Set indl=tbl.Create Index("PriraaryKey")
•
следующей инструкцией задайте поле, на основе которого строится индекс (поле ТАБН) i n d i . c r e a t e F i e i d ( " T A B H " ) , и включите его в семейство полей индекса. В модели объектов доступа к данным поля индекса включаются в семейство Fields, которое включается не только в объект T a b l e D e f , но и в объект index: indl.Fields.Append indl.CreateField("ТАБН")
• объявите индекс первичным ключом таблицы СОТРУДНИК. Для этого присвойте свойству индекса Primary значение True: indl.Primary=True • добавьте индекс (ссылка на него сохранена Б объектной переменной indl} в семейство индексов объекта TableDef: tbl.Indexes.Append indl 7. Окончательно процедура будет иметь следующий вид: Private Sub KHonKa_Click() On Error GoTo Err Кнопка Click
626
Часть III. Разработка приложения пользователя Dim с!ЬзПоставкаТоваров Аз Database 1
Определение объектных переменных для таблицы и поля
Dim tbl As TableDef Dim fiel As Field Dim indl As Index Set dbsnocTaBKaToBapOB=CurrentDb() ' Создание нового объекта — таблицы с именем СОТРУДНИК и ' присваивание объектной переменной ссыпки на него Set tbl=dbsnocTaBKaToBapOB.CreateTableDef("СОТРУДНИК") ' Создание текстового поля с именем ТАЕН и длиной в 3 символа, 1
присваивание объектной переменной ссылки на него
Set fiel=tbl.CreateField("TAEH", dtoText, 3) ' Добавление поля в семейство Fields объекта TableDef ' с помощью метода Append tbl.Fields.Append fiel 1
Создание второго поля в таблице
Set fiel=tbl.CreateField("t№O", dbText, 15)
tbl.Fields.Append fiel ' Добавление таблицы в семейство TableDefs с помощью метода Append оЪзПоставкаТоваров.TableDefs.Append tbl 1
Создание для новой таблицы индекса с именем PrimaryKey
Set indl=tbl.Create Index("PrimaryKey") 1
Определение поля, составляющего индекс (поле ТАБН), и
' добавление его в семейство полей индекса indl.Fields.Append indl.CreateField("ТАБН") 1
определение индекса как первичного ключа для таблицы СОТРУДНИК
indl.Primary=True ' добавление индекса в семейство индексов tbl.Indexes.Append indl Exit_KHonKa_Click: Exit Sub Err_KHonKa_Click: MsgBox Err.Description Resume Exit_KHonKa_Click
End Sub
Возвратитесь в Access и, нажав в форме кнопку, к которой привязана процедура обработки этого события, выполните процедуру. В БД создаст-
Глава 15. Программирование на языке Visual Basic для приложений
627
ся таблица СОТРУДНИК с полями ТАБН и оно, причем поле ТАБН объявлено ключевым, а индекс имеет имя primaryKey. Чтобы убедиться в этом, откройте таблицу в режиме конструктора. 8. Выполните процедуру повторно, и появится сообщение, представленное на рис. 15.35. Microsoft Office Access Таблица 'СОТРУДНИК' уже существует,
' ;-
Рис. 15.35. Сообщение, формируемое инструкцией обработки ошибки
Это сообщение является результатом обработки ошибки, которая производится за счет инструкций в начале процедуры; On Error GoTo £гг_Кнопка_С11сК
и в конце процедуры: Err_KHonKa_Click: MsgBox Err.Description Resume Exit_KHOriKa_Click
Аргумент Err.Description инструкции MsgBox определяет строковое значение, формируемое свойством Description объекта Err. Значением свойства является предупреждающее сообщение с описанием перехваченной ошибки.
Замечание Если модификация структуры таблицы производится в программе, где используются объекты Recordset, работающие с этой таблицей, они должны быть закрыты.
Создание таблицы
с помощью инструкции SQL Создайте новую таблицу СОТРУДНИК с помощью инструкции SQL, которая может быть выполнена в процедуре методом Execute объекта Database. I. Запишите объектную переменную типа Database и присвойте ей значение ссылки на текущую базу данных: Dim ёЬзПоставкаТоваров As Database Set dbsnocTaBKaToBapoB=CurrentDb() 21 Зак 835
628
_
Часть
III.
Разработка
приложения
пользователя
2. Для выполнения инструкции языка определения данных (DDL) CREATE TABLE используйте метод Execute объекта Database. Инструкция передается методу как аргумент со строковым значением и заключается в кавычки: ЗЬзПоставкаТоваров. Execute "CREATE TABLE СОТРУДНИК" & "(ТАЕН CHAR (3) CONSTRAINT Ключ PRIMARY KEY, ФИО CHAR (15)," f, "Дат а Рождения DATETIME) "
Инструкция CREATE TABLE указывает имя создаваемой таблицы. В скобках в качестве аргументов перечисляются поля и указываются типы данных. Какие типы данных используются для определения данных и как они записываются в инструкциях SQL, можно просмотреть в справке. Предложение CONSTRAINT использовано для определения по полю ТАБН индекса с именем ключ и объявления его в качестве первичного ключа.
(
Замечание
При записи инструкция в нескольких строках используется знак переноса (_}, который ставится после пробела.
3. Используйте для создания ключа вместо предложения CONSTRAINT инструкцию языка определения данных (DDL) CREATE INDEX: сОэзПоставкаТоваров. Execute "CREATE INDEX Ключ ON СОТРУДНИК (ТАБН) WITH Primary"
Замечание Инструкции языка определения данных (DDL) не могут работать с базами данных, несовместимыми со стандартом Microsoft Jet. В этом случае нужно использовать методы Create объектов доступа к данным (ОАО).
Создание таблицы и заполнение ее записями Допустим, для полученного списка покупателей из заданного города необходимо создать таблицу и вывести ее на экран. В базе данных имеются таблица-справочник ГОРОДА и таблица ПОКУПАТЕЛЬ, из которой должны выбираться записи с заданным значением в поле АДРЕС_ПОК. Для размещения результата выборки должна быть создана таблица ОТВЕТ С ПОЛЯМИ ПОКУПАТЕЛЬ И ГОРОД.
Для просмотра и выбора нужного города из списка сконструируем кнопочную форму Выбери город, не использующую источник данных. Создадим в ней поле со списком городов, построенное на основе данных из таблицы ГОРОДА (рис. 15.36).
Глава 15. Программирование на языке Visual Basic для приложений
629
Выбери юрод: форма ВВЕДИТЕ ГОРОД ДЛЯ ВЫБОРКИ ПОКУПА ТЕЛЕЙ Москва Самара Санкт-Петербург Ярославль Рис. 15.36. Окно формы со списком городов
1. Создайте процедуру, которая выполняется при обновлении значения в ПОЛе СО СПИСКОМ ГОРОДОВ Private Sub ПолеСсСписксмО_А±"terUpdat-M) .
Полный текст процедуры приведен далее. В процедуре выделены три основных блока. Предыдущие упражнения и комментарии позволят вам понять логику процедуры и инструкции, реализующие сформулироьанную выше задачу. • Первый блок инструкций по созданию таблицы содержит инструкции создания структуры таблицы и включения объектов структуры в семейства. •
Второй блок начинается с создания наборов записей, открывающих возможность обработки каждой его записи. Набор записей по таблице ПОКУПАТЕЛЬ stab содержит все записи, удовлетворяющие заданному условию отбора, и служит источником данных для новой таблицы. Набор записей по таблице ОТВЕТ stabi используется для добавления записей в таблицу. Для последовательной обработки записей объектов Recordset ОрГаНИЗОВЗН ЦИКЛ Do Until . . . .Loop.
• Третий блок обработки ошибок содержит инструкции, которые позволяют выполнять создание таблицы как в первый раз, так и повторно, даже если она не была закрыта. 2. Найдите в процедуре программу обработки ошибок, начинающуюся с метки обработкаОоибок. Эта программа получает управление при возникновении любой ошибки, поскольку в начале процедуры записана инструкция On Error GoTo ОбработкаОшибок. •
Первая ИНСТРУКЦИЯ Программы If Err.Number=78'74 Then . . . End If
проверяет код ошибки 7874, который вырабатывается при удалении несуществующей таблицы ОТВЕТ методом DeieteObject объекта Docmdt D o C m d . D e i e t e O b j e c t acTable,
"ОТВЕТ" И предусматривает ПрОДОЛЖб-
ние выполнения процедуры с инструкции, следующей за ошибочной.
630
Часть III. Разработка приложения пользователя
• Следующая инструкция проверяет код ошибки 2008, который вырабатывается при попытке удалить открытую таблицу ОТВЕТ. Обнаружив эту ошибку, программа закрывает таблицу и передает управление на повторное выполнение инструкции удаления таблицы и продолжения выполнения процедуры. • Во всех остальных случаях предусмотрен вывод стандартного сообщения об ошибке. 3. Удалите из программы обработки ошибок или переведите в комментарии первые две инструкции i f . . . T h e n . . .End if. Откройте таблицу ОТВЕТ. При выполнении процедуры вы получите стандартное сообщение об ошибке 2008, и процедура завершит выполнение. Удалите таблицу ОТВЕТ. При выполнении процедуры вы получите сообщение об ошибке 7874, и процедура также завершит выполнение. Убедитесь, что те же действия при наличии указанных инструкций не вызывают никаких осложнений при выполнении процедуры. Private Sub ПолеСоСпискомО_А^егирс^е () On Error GoTo ОбработкаОшибок ' Описание о&ъектных переменных, представляющих объекты: Dim dbs As Database
' Базу данных
Dim stab As Recordset
' Набор записей
Dim stabl As Recordset
' Динамический набор записей
Dim tbl As TableDef
' Новую таблицу
Dim fiel As Field ' Поле ' Описание строковой переменной для сохранения рабочего значения Dim Col As String 1
Запрос на подтверждение выбранного пользователем города
If МздВохС'Вы ввели город " & Me! [ПолеСоСпискомО], vbOKCancel) =_ vfaCancel Then GoTo Exit_l End If 1
Удаление таблицы ОТВЕТ
' Если таблицы не существует, вырабатывается ошибка с кодом 7874. ' При обработке ошибки переход на метку Метка!: 1
позволит продолжить выполнение процедуры
Метка: DoCmd.DeleteObject acTable, "ОТВЕТ" Метка!: ' Присваивание объектной переменной значения текущей базы данных. Set dbs=CurrentDb{]
Глава 15. Программирование на языке Visual Basic для приложений
631
' БЛОК ИНСТРУКЦИЙ ПО СОЗДАНИЮ ТАБЛИЦЫ ' Создание в текущей БД нового объекта TableDef - таблицы ОТВЕТ Set tbl^dbs.CreateTableDef("ОТВЕТ") 1 1
1
Создание в таблице ОТВЕТ объекта текстовое поля ПОКУПАТЕЛЬ длиной в 15 байт и присваивание ссылки на него объектной переменной
fiel
Set fiel=tbl.CreateField("ПОКУПАТЕЛЬ", dbText, 20) ' Добавление поля в семейство Fields объекта TableDef с помощью метода 1 Append tbl.FieIds.Append fiel ' Создание и добавление второго поля ГОРОД Set fiel=tbl.CreateField("ГОРОД", dbText, 30) tbl.Fields.Append fiel 'Добавление таблицы в семейство TableDefs с помощью метода Append dbs.TableDefs.Append tbl ' БЛОК СОЗДАНИЯ И ПОЗАПИСЕВОЙ ОБРАБОТКИ НАБОРОВ ЗАПИСЕЙ 1
Метод OpenRecordset, используя запрос SQL к таблице ПОКУПАТЕЛЬ, ' создает в БД набор записей, содержащих выбранный в списке формы город Set stab=dbs.OpenRecordset("Select НАИМ_ПОК,АДРЕС_ПОК _ from ПОКУПАТЕЛЬ WHERE АДРЕС_ПОЮ='" & Me! [ПолеСоСпискомО] S ""'] 1
Метод OpenRecordset создает пустой набор записей таблицы ОТВЕТ
Set stabl=dbs.OpenRecordset("ОТВЕТ") Col=0 ' Организация цикла Do...Loop для последовательной обработки записей ' объектов Recordset 1 Цикл выполняется до тех пор (Until), пока не обнаружится конец ' набора — свойство EOF Do Until stab.EOF Col=Col + 1 1
Открыть режим добавления записи в таблицу ОТВЕТ методом AddNew
1
stabl.AddNew
1
Заполнить поля записи таблицы ОТВЕТ значениями из текущей записи ' stab
tabl!ГОРОД-stab!АДРЕС_ПОК s t a b l ! ПОКУПАТЕЛЫ^аЬ! НА1Ф1_ПОК ' Обновление записей. Этот метод не выполняется без предварительного ' выполнения метода Edit или AddNew stabl.Update 1
Сделать текущей следующую запись набора stab
Часть III. Разработка приложения пользователя
632
stab.MoveNext ' Конец цикла Loop MsgBox "Всего по данному городу " & Col & " записей", vbOKOnly ' Открыть таблицу с результатом выборки DoCmd.OpenTable
"ОТВЕТ"
1
Закрыть открытые наборы записей Recordset и удалить их из ' семейства, в которое они были добавлены stabl.Close stab.Close Exit_l: Exit Sub ' БЛОК ОБРАБОТКИ ОШИБОК ОбработкаОшибок: If Err.Kurriber=7874 Then GoTo Метка! ' Также можно использовать инструкцию Resume Next End If
If Err.Number=2008 Then DoCmd.Close acTable, "ОТВЕТ" GoTo Метка 'Также можно использовать инструкцию Resume О End If
KsgBox Err.Number & Err.Description Resume Exit_l End Sub
Созданная в программе таблица ОТВЕТ приведена на рис. 15.37.
m ОТВЕТ: таблица ПОКУПАТЕЛЬ Монитор Компьютер лэнд Компьютерный мир Запись: М
Г' 'РОД
Санкт-Петербург Санкт-Петербург Санкт-Петербург И
из 3
Рис. 15.37. Таблица с результатами выполнения программы
Глава 15. Программирование на языке Visual Basic для приложений
633
Контрольные вопросы 1. Какой кнопкой на панели инструментов открывается окно модуля формы? 2. Какие списки имеет окно модуля формы? 3. Процедурой какого типа должна быть процедура обработки события? 4. Какой инструкцией начинается и заканчивается процедура-подпрограмма? 5. Из чего формируется имя процедуры обработки события? 6. Где устанавливается связь события с процедурой его обработки? 7. Какая инструкция позволяет завершить выполнение процедуры немедленно? 8. Какая инструкция предназначена для описания переменных? 9. Какой объект приложения Access позволяет выполнять в процедурах VBA макрокоманды? 10. Какой метод объекта Docmd позволяет открыть форму, выполнить запрос? 11. Как записывается ссылка на элемент управления в форме? 12. Для чего используется ключевое слово ме? 13. Какая инструкция позволяет из процедуры вывести на экран сообщение? 14. Какого типа значение возвращает функция мздвсх? 15. Можно ли в текст сообщения мздвох включить значение элемента управления формы? 16. Чем отличается функция мздвох от инструкции Мздвсх? 17. Какая функция позволяет организовать ввод параметров в процедуру? 18. Какую приставку имеют константы VBA, Access? 19. Какая инструкция позволяет переходить на выполнение различных ветвей программы? 20. Какая инструкция позволяет организовать многократное выполнение блока инструкций программы? 21. Какая инструкция позволяет выполнить перехват ошибок в процедуре и передачу управления программе обработки ошибок? 22. В каком свойстве какого объекта формируется текст стандартного сообщения об ошибке? 23. Каким знаком отделяется имя метода и имя свойства от указанного перед ним объекта?
634
Часть III. Разработка приложения пользователя
24. К какому объекту применим метод seek? 25. За счет чего обеспечивается быстродействие поиска методом seek? 26. Для чего предназначена объектная переменная? 27. Какого типа объектная переменная предназначена для хранения ссылки на набор записей? 28. Какая инструкция используется для присваивания объектной переменной значения? 29. Что является значением объектной переменной? 30. Какой метод какого объекта используется для создания набора записей? 31. Что служит источником записей для набора, к которому применяется метод Seek? 32. Какому свойству набора записей присваивается значение текущего индекса? 33. Какое имя по умолчанию имеет индекс первичного ключа таблицы? 34. Какое свойство позволяет определить, найдена ли запись в наборе? 35. Когда для поля возникает событие После обновления? 36. Какого типа переменная используется для описания ссылки на набор данных? 37. Что может быть источником для набора записей? 38. В какое семейство какого объекта входит объект Recordset? 39. Какое свойство набора данных позволяет определить, что больше записей нет? 40. Какой метод открывает возможность редактирования и обновления полей записи набора? 41. Какой метод используется для сохранения обновленной записи? 42. Какой метод позволяет перейти к следующей записи набора? 43. Для чего предназначена команда редактора VBA DebugjCompile <ил!я проекта>? 44. Какого типа объектная переменная используется для ссылки на описание таблицы, поля, индекса? 45. Какой метод какого объекта используется для создания таблицы? 46. Какой метод какого объекта используется для создания поля таблицы? 47. В какое семейство какого объекта необходимо добавить вновь созданное поле? 48. Какое свойство индекса и его значение объявляет его первичным ключом?
Глава 15. Программирование на языке Visual Basic для приложений
635
49. Какие методы используются для создания индекса? 50. Можно ли включить новую таблицу в семейство TabieDefs прежде, чем определены ее поля? 51. Какой метод используется для выполнения инструкций SQL языка определения данных? 52. Какая инструкция SQL предназначена для создания структуры таблицы? 53. Какая инструкция SQL предназначена для создания индекса и первичного ключа таблицы? 54. Можно ли создать набор записей на основе запроса на языке SQL? 55. Какой метод открывает режим добавления записей в набор записей типа Таблица? 56. Какой метод обновляет текущую запись набора? 57. Какой метод делает текущей следующую запись набора? 58. Какой метод какото объекта позволяет получить номер перехваченной ошибки? Ответы
1. Программа. 2. O b j e c t И Procedure. 3. Sub. 4. Sub End Sub.
5. Из имени элемента управления и имени события на английском языке. 6. В свойствах элемента на вкладке События. 7. Exit Sub. 8. Dim.
9. DoCmd. 10. OpenForm, OpenQuery. 11. Forms![имя формы]![имя элемента управления^
12. Заменяет ссылку на текущий объект. 13. MsgBox. !4. Integer.
15. Да, использовав ссылку на него. 16. Функция возвращает значение. 17. InputBox.
636
'
Часть III. Разработка приложения пользователя
18. vb, эс.
19. Инструкция условного перехода i f . . .End i f . 20. Инструкция выполнения цикла DO. .. Loop. 21. On Error. 22. В СВОЙСТВе D e s c r i p t i o n Объекта E r r o r . 23. ТОЧКОЙ, например, DoCmd.OpenFcrm. Err . D e s c r i p t i o n . 24. R e c o r d s e t .
25. За счет упорядочения записей по индексируемому полю. 26. Для хранения ссылки на объект соответствующего типа. 27. Recordset.
28. Set.
29. Ссылка на объект. 30. Метод OpenRecordset объекта D a t a b a s e .
31. Таблица базы данных. 32. Index. 33. PrimaryKey. 34. NoMatch.
35. После изменения значения и перехода к другому элементу управления или записи. 36. Объектная переменная типа Recordset. 37. Таблица, запрос, инструкция SQL. 38. В семейство Recordsets объекта D a t a b a s e .
39- EOF.
40. Edit. 41. Update. 42. MoveNext.
43. Для компиляции загруженных модулей текущего проекта. 44. TableDef, Field, Index.
45. Метод CreateTableDef объекта Database.
46. Метод CreateField объекта TableDef.
47. В семейство Fields объекта TableDef. 48. Свойство Primary, значение True.
Глава 15. Программирование на языке Visual Basic для приложений
637
49. Метол create index объекта TabieDef для определения имени индекса И МСТОД. C r e a t e F i e l d объекта Index ДЛЯ Определения ПОЛЯ ИНДСКСа.
50. Нет. 51. Execute.
52. Create Table. 53. Create Index.
54. Да. 55. AddNew. 56. Update. 57. MoveNext.
58. Метод Number объекта Err.
Глава 16
Управление приложением пользователя В предыдущих главах книги была рассмотрена технология разработки объектов базы данных Access: таблиц, форм, запросов, отчетов, макросов, модулей — как средств работы с базой и разработки приложения пользователя. При этом разрозненность большого количества объектов, представленных в окне базы данных, затрудняет реализацию необходимой технологии приложения данной предметной области. Для организации эффективной работы пользователя нужно группировать объекты и компоненты приложения данной предметной области по функциональному назначению. При этом необходимо обеспечить удобную работу пользователя с приложением так, чтобы не затрачивать усилий на поиск объектов, используемых в приложении. Как правило, для управления приложением создаются специальные интерфейсы, в которых группируются объекты приложения по функциональному назначению и обеспечивается удобный доступ к ним. При этом окно базы данных может вообще не открываться в приложении и исключается работа пользователя непосредственно с таблицами базы данных. При создании интерфейсов приложения особую роль играют формы, т. к. они являются основным диалоговым средством работы пользователя с базой данных. Формы построены таким образом, что любое действие пользователя автоматически вызывает реакцию системы, т. е. воспринимается как событие, в зависимости от которого могут выполняться необходимые действия. Для выполнения этих действий используются макросы или процедуры обработки события, созданные пользователем на языке VBA. Основной ряд событий возникает при работе в форме, их обработка позволяет связывать различные объекты в задачах обработки данных. Таким образом, ходом выполнения приложения можно управлять, обрабатывая возникающие в формах события.
Глава 16. Управление приложением пользователя
639
Приложения, создаваемые средствами Access, используют расширенную обработку событий, при которой программы приложения выполняются в ответ на различные события. Для группировки объектов по функциональному назначению и доступа к ним в интерфейсе приложения могут быть созданы кнопочные формы. Кнопочная форма позволяет пользователю управлять приложением. Кнопки такой формы обеспечивают вызов других кнопочных форм, а также отдельных объектов: отчетов, форм, макросов, функций, которые входят в тот или иной компонент приложения. Сюда же помещаются кнопки для возврата к кнопочным формам предыдущих уровней, выхода из Access. Обычно также предусматривается кнопка для редактирования самой кнопочной формы. Таким образом приложение структурируется. Пользователь, нажимая кнопку на панели управления, инициирует событие "нажатие кнопки". К этому событию могут привязываться действия по открытию других кнопочных форм или конкретные действия по обработке данных, реализующие функции приложения. Работа приложения может начинаться с главной кнопочной формы. Через этот главный интерфейс приложения осуществляется выбор того или иного компонента приложения, представленного некоторой подчиненной кнопочной формой, и обеспечивается обращение к нужным объектам компонента: формам, запросам, отчетам, макросами т. д. В Access имеется средство автоматизированной разработки интерфейса управления приложением, называемое диспетчером кнопочных форм. Ранее, в главе 6, было подробно рассмотрено конструирование форм, обеспечивающих загрузку данных документов во взаимосвязанные таблицы базы данных, просмотр данных, а также их корректировку. Вместе с тем роль форм значительно шире. Базу данных приложения можно рассматривать как хранилище документов приложения в данной предметной области. Форма может успешно использоваться как основа интерфейса отдельного компонента практического приложения, обеспечивающего технологию работы со взаимосвязанными документами приложения при их подготовке и вводе в базу данных. В таком интерфейсе предусматривается обработка событий, инициируемых пользователем или наступающих в процессе работы с формой основного документа данного компонента приложения. При этом можно обеспечить необходимые вычисления, актуализацию расчетных данных, хранимых в базе, подготовку производных документов, вывод документов на печать. Работа с приложением пользователя в обычном режиме становится более упорядоченной, если при его запуске открывается окно приложения, в котором имеется собственное меню с необходимыми только для приложения командами, без доступа к окну базы данных и к командам инструменталь-
Часть HI. Разработка приложения пользователя
640
ных средств Access. Создание меню приложения осуществляется средствами настройки панелей инструментов. При открытии окна, как уже было сказано, может быть предусмотрено автоматическое открытие по умолчанию либо кнопочной формы, либо другой формы — интерфейса компонента приложения.
Создание кнопочной формы с помощью диспетчера Пользователь имеет возможность с помощью диспетчера кнопочных форм создавать кнопочную форму стандартного вида. Рассмотрим в качестве примера создание кнопочной формы, которая будет использоваться как панель управления приложением ПОСТАВКА ТОВАРОВ, структура которого представлена на рис. 16.1.
Приложение ПОСТАВКА ТОВАРОВ
ЗАГРУЗКА БАЗЫ ДАННЫХ
АНАЛИЗ ВЫПОЛНЕНИЯ ДОГОВОРОВ
Формирование портфеля договоров Рис. 16.1. Пример структуры приложения
Создание главной кнопочной формы приложения Определим для рассматриваемого примера в соответствии со структурой приложения иерархическую взаимосвязь главной и подчиненных кнопочных форм приложения и состав кнопок управления в этих формах. В обобщенном виде такая взаимосвязь форм управления приложением ПОСТАВКА ТОВАРОВ приведена на рис. 16.2.
Глава 16. Управление приложением пользователя
641
Главная кнопо мая форма Приложение пользовате ля ПОСТАВКА ТОВАРО 1 кнопка
Открытие кнопочной формы АНАЛИЗ ВЫ ПОЛ НЕ НИЯ ДОГОВОРОВ
/
ЗАГРУЗКА БАЗЫ ДАННЫХ
Подчиненная кнопочная форма АНАЛИЗ ВЫПОЛНЕНИЯ ДОГОВОРОВ
кнопка Открытие формы ДОГОВОР С ПОКУПАТЕЛЕМ
-
\
Подчиненная кнопочная форма
Открытие кнопочной формы ФОРМИРОВАНИЕ СПРАВОЧНЫХ ДАННЫХ
Выход из приложения
кнопка
Открытие кнопочной формы ЗАГРУЗКА БАЗЫ ДАННЫХ
кнопка
Открытие формы НАКЛАДНАЯ
кнопки управления
п
Подчиненная кнопочная форма
ФОРМИРОВАНИЕ СПРАВОЧНЫХ ДАННЫХ кнопки управления
Рис. 16.2. Взаимосвязь главной и подчиненных кнопочных форм приложения Выберем команду Сервис|Служебные программы|Диспетчер кнопочных форм (Tools]Utilities]Switchboard Manager). В окне Диспетчер кнопочных форм (Switchboard Manager), которое появляется, если в данной базе не были созданы кнопочные формы, подтвердим создание кнопочной формы (рис. 16.3). Диспетчер кнопочных форм ?\
Не удается найти кнопочную форму в 5той базе данных. Создать кнопочную форму?
Рис. 16.3. Окно подтверждения создания кнопочной формы приложения
Часть Ш. Разработка приложения пользователя
642
В следующем окне Диспетчер кнопочных форм (Switchboard Manager) появится поле со строкой Главная кнопочная форма (Main Switchboard (Default)) (рис. 16.4). Диспетчер кнопочных форм Страницы кнопочной формы:
Закрыть
ГПЗБН-ЭЯ кнопочная форма (По умолчанию) Создать... Изменить... Удалить По умолчанию
Рис. 16.4. Окно списка кнопочных форм приложения
В этом окне диспетчера кнопочных форм формируется список кнопочных форм разных уровней. Главная кнопочная форма присутствует в нем по умолчанию.
Создание подчиненных кнопочных форм приложения Создадим две подчиненные кнопочные формы первого уровня для компонент приложения Загрузка базы данных и Анализ выполнения договоров. Для создания подчиненной кнопочной формы (включения в список форм) в окне диспетчера нажмем кнопку Создать (New). В окне Создание (Create New) (рис. 16.5) в поле Имя страницы кнопочной формы (Switchboard Page Name) введем имя первой кнопочной формы Загрузка базы данных. Создание Имя страницы кнопочной формы: [Загрузка баэы данных
ОК Отмена
Рис. 16.5. Окно создания пустой кнопочной формы
Глава 16. Управление приложением пользователя
643
После нажатия кнопки ОК в окне диспетчера кнопочных форм появится строка с заданным именем первой подчиненной кнопочной формы. Аналогичными действиями создадим вторую кнопочную форму с именем Анализ выполнения договоров. В результате в окне диспетчера кнопочных форм отобразятся имена созданных подчиненных форм (рис 16.6). Диспетчер кнопочных форм Страницы кнопочной формы;
Закрыть
(Главная кнопочная форма (По умолчанию) Загрузка базы данных
Создать,.. Изменить... Удалить По умолчанию
Рис. 16.6. Список подчиненных кнопочных форм первого уровня приложения ПОСТАВКА ТОВАРОВ
Любую из подготовленных кнопочных форм можно сделать стартовой, которая будет открываться по умолчанию при открытии базы данных. Для этого выбирается ее имя в окне диспетчера кнопочных форм и нажимается кнопка По умолчанию (Make Default). Оставим главную кнопочную форму стартовой кнопочной формой. Эта кнопочная форма будет находиться на верхнем уровне иерархии взаимосвязанных кнопочных форм в соответствии со структурой создаваемого приложения.
Редактирование имени и формирование элементов кнопочной формы Элементами кнопочных форм являются кнопки управления с подписями. Подпись задается пользователем и должна по возможности кратко и точно называть действия, которые будут выполняться при нажатии кнопки. Для формирования элементов главной кнопочной формы в окне со списком кнопочных форм Диспетчер кнопочных форм (Switchboard Manager) выделим ее строку и нажмем кнопку Изменить (Edit). В окне диалога Изменение страницы кнопочной формы (Edit Switchboard Page) (рис. 16.7) главную кнопочную форму переименуем в Приложение
Часть ///. Разработка приложения пользователя
644
ПОСТАВКА ТОВАРОВ, введя это имя в поле Название кнопочной формы (Switchboard Name). Изменение страницы кнопочной формы Название кнопочной формы;
Закрыть
(Приложение ПОСТАВКА ТОВАРОВ Элементы данной кнопочной формы;
Создать.,.
Рис. 16.7. Окно редактирования имени главной кнопочной формы и создания ее элементов (кнопок)
Элементы, создаваемые в кнопочной форме, могут быть подразделены на два основных типа: О элементы, предназначенные для вызова других кнопочных форм; О элементы, обеспечивающие действия с объектами приложения: открытие формы, отчета, запуск макроса, программы — а также выход из приложения с закрытием базы данных или переход в режим продолжения разработки кнопочной формы диспетчером кнопочных форм.
Формирование элементов управления в главной кнопочной форме Для формирования в главной кнопочной форме кнопки вызова одной из подчиненных кнопочных форм нажмем в окне Изменение страницы кнопочной формы (Edit Switchboard Page) кнопку Создать (New) (см. рис. 16.7). В новом диалоговом окне Изменение элемента кнопочной формы (Edit Switchboard Item) в открывающемся списке Команда (Command) выберем значение Перейти к кнопочной форме (Go to Switchboard) (рис. 16.8). В строке Кнопочная форма (Switchboard) выбирается форма, которая должна открываться с помощью создаваемой кнопки. Откроем список созданных для приложения кнопочных форм и выберем форму Загрузка базы данных. В строке Текст (Text) введем подпись для этой кнопки: Загрузка базы данных (рис. 16.9).
Глава 16. Управление приложением пользователя
645
Изменение элемента кнопочной формы Новая команда кнопочной формы
Текст;
Леоеити к кнопочной шооме Перейти к кнопочной форме
•• ' Кнопочная форма:
Отмена
Открыть форму для добавления Открыть форму для изменения Открыть отчет Конструктор приложения Выйти из приложения Выполнить макрос Выполнить программу
Рис. 16.8. Создание (изменение) кнопки для открытия кнопочной формы Измененне элемента кнопочной формы Т_екст;
[Загрузка базы данньi:
Команда;
[Перейти к кнопочной форме
ок ^J
Отмена
Кнопочная форма: Анализ выполнения договоров Загрузка базы данных [Приложение ПОСТАВКА ТОВАРОВ
Рис. 16.9. Выбор подчиненной кнопочной формы
Для завершения формирования элемента нажмем кнопку ОК. Элемент отобразится в списке Элементы данной кнопочной формы (Items on this Switchboard) в окне Изменение страницы кнопочной формы (Edit Switchboard Page) (рис. 16.14). Изменение элемента кнопочной формы Текст: Команда;
[Изменение главной формы им 5» I идам д яиитд ЕММЫ Перейти к кнопочной форме Открыть форму для добавления Открыть форму для изменения Открыть отчет Конструктор приложения Выйти из приложения Выполнить макрос Выполнить программу
Отмена
Рис.. 16.10. Выбор команды для перехода к конструктору кнопочных форм
Аналогичным образом создадим кнопку вызова второй подчиненной формы и определим ей подпись: Анализ выполнения договоров.
Часть ///. Разработка приложения пользователя
646
Для перехода при работе с кнопочными формами к редактированию кнопочных форм создадим в главной форме кнопку с именем Изменение главной формы (см. рис. 16.10), выбрав для нее команду Конструктор приложения (Design Application). В дальнейшем это позволит в любой момент вызвать диспетчера кнопочных форм (Switchboard Manager) и с его помощью внести необходимые изменения. Такую кнопку надо обязательно включать, т. к. в процессе отладки приложения могут возникнуть тупиковые ситуации, выход из которых возможен только при модификации кнопочной формы. Для модификации кнопочной формы можно также вызвать диспетчер кнопочных форм через меню Сервис]Служебные программы (ToolsjUtilities). Создадим кнопку для завершения работы с приложением, выбрав для нее команду Выйти из приложения (Exit Application), и присвоим ей имя Выход из приложения (рис. 16.11). Заметим, что данная команда приводит к полному закрытию базы данных. Изменение элемента кнопочной формы Т_екст:
Выход из приложения
Команда: Перейти к кнопочной форме Открыть форму для добавления Открыть форму для изменения Открыть отчет Конструктор приложения Выйти из приложения Выполнить макрос Выполнить программу
ОК Отиена
Рис. 16,11. Выбор команды для кнопки выхода из приложения
В том случае, если при работе с кнопочной формой нужно закрыть только эту форму, можно создать кнопку, по которой запускался бы макрос, обеспечивающий закрытие кнопочной формы. Такой макрос с именем Закрыть кнопочную форму показан на рис. 16.12. При создании кнопки для закрытия формы в окне Изменение элемента кнопочной формы (рис. 16.13) выбираем команду Выполнить макрос, а в строке Макрос — имя созданного макроса. При необходимости изменить или удалить какую-либо из созданных кнопок нужно в окне Изменение страницы кнопочной формы (рис. 16.14) выбрать имя этой кнопки в списке Элементы данной кнопочной формы (Items on this Switchboard) и нажать кнопку Изменить (Edit) или Удалить (Delete). Если требуется изменить порядок кнопок в списке, следует выбрать элемент и нажать кнопку Вверх (Move Up) или Вниз (Move Down).
Глава 16. Управление приложением пользователя
647
Ж Закрыть кнопочную форму : макрос Макрокоманда
[и_|[О][Х[
|
Примечание
|л
^ Закрыть
V
Аргументы макрокоманды Тип объекта
Форма Кнопочная форма Календарь -л. Календарь? КнппгмнйяАпрм.ч • • МИНИМАЛЬНАЯ ПАРТИЯ ТО! | МИНИМАЛЬНАЯ ПАРТИЯ_ВА НАКЛАДНАЯ ОТГРУЗКА ОТГРУЗКА подчиненная фо v.
Имя объекта Сохранение
Введите или выберите имя закрываемого объекта. В списке показываются все объекты текущей базы данных с типом, заданным е аргументе "Тип объекта'. Для справки об аргументе нажмите F1 .
Рис. 16.12. Макрос, обеспечивающий закрытие кнопочной формы Изменение элемента кнопочной формы Текст;
[Закрыть кн, форму
Команда:
|Выпопнить макрос
Макрос:
|3акрыть кнопочную форму
Q^ -I т
Отмена
I
Рис. 16.13. Выбор команды для закрытия кнопочной формы и выбор макроса
Перечень созданных элементов главной кнопочной формы Приложение ПОСТАВКА ТОВАРОВ представлен на рис 16.14. Изменение страницы кнопочной формы Название кнопочной формы;
Закрыть
Приложение ПОСТАВКА ТОВАРОВ Элементы данной кнопочной формы: Загрузка базы данных Анализ выполнения договоров Изменение главной формы Выход из приложения
Создать.., Изменить, . ,
Вверх Вниз
Рис. 16.14. Перечень созданных элементов главной кнопочной формы Приложение ПОСТАВКА ТОВАРОВ
648
Часть Я1. Разработка приложения пользователя
Закончив создание элементов главной кнопочной формы, нажмем кнопку Закрыть (Cancel). Это позволит вернуться к списку всех кнопочных форм приложения. После закрытия окна диспетчера кнопочных форм в списке форм окна базы данных появится форма с именем Кнопочная форма (Switchboard). При открытии полученной кнопочной формы на экране отображается главная форма (рис. 16.15) с созданными элементами управления.
LJ Загрузка базы данный J Анализ выполнения договоров J
Изменение главной Формы
J Выход из приложения J Закрыть кн. Форму
Рис. 16.15. Главная кнопочная форма Приложение ПОСТАВКА ТОВАРОВ
Создание элементов управления в подчиненных кнопочных формах Для создания элементов управления в подчиненной форме, например, в форме Загрузка базы данных, надо вернуться к окну Диспетчер кнопочных форм, выделить нужную подчиненную форму (рис. 16.16) и нажать кнопку Изменить. Создадим сначала в подчиненной кнопочной форме кнопку для возврата к главной форме, указав в окне Изменение элемента кнопочной формы (Edit Switchboard Item) для поля Текст значение Возврат к главной форме приложения, выбрав в списке Команда (Command) значение Перейти к кнопочной форме, а в списке Кнопочная форма (Switchboard) — Приложение ПОСТАВКА ТОВАРОВ. Таким образом могут быть установлены обратные связи от каждой подчиненной кнопочной формы к главной. На связи кнопочных форм и число уровней практически не накладывается ограничений, и могут быть созданы любые удобные пользователю переходы по кнопочным формам.
Глава 16. Управление приложением пользователя
649
1 Диспетчер кнопочных форм
^^^Н
Страницы кнопочной формы: Приложение ПОСТАВКА ТОВАРОВ (По умолчанию) Анализ выполнения договоров
^^^^МННН^НЙ
Создать., .
Удалить По умолчанию
Рис. 16.16. Выбор кнопочной формы из ранее созданных Формирование элементов для открытия объектов приложения Для формирования в кнопочных формах элементов, обеспечивающих переход к объектам приложения, необходимо, чтобы элементы были связаны с соответствующим объектом. Диспетчер кнопочных форм обеспечивает связь (открытие, выполнение) с формами, отчетами, макросами и модулями. Для создания кнопки, связанной с нужным объектом, следует в окне диспетчера форм выбрать подчиненную кнопочную форму, создать описанным ранее способом новую кнопку. Затем в окне Изменение элемента кнопочной формы (Edit Switchboard Item) можно выбрать нужную команду в раскрывающемся списке Команда (Command): О Открыть форму для добавления (Open Form in Add Mode); П Открыть форму для изменения (Open Form in Edit Mode); П Открыть отчет (Open Report); П Выполнить макрос (Run Macro); О Выполнить программу (Run Code). Нижний раскрывающийся список окна Изменение элемента кнопочной формы (Edit Switchboard Item) будет иметь наименование (форма, отчет или другое), соответствующее выбранной команде. Например, если выбрать в раскрывающемся списке Команда (Command) пункт Открыть отчет (Open Report), появится третья строка с наименованием Отчет (Report), где можно будет выбрать имя открываемого отчета. Рассмотрим в качестве примера создание в подчиненной кнопочной форме Загрузка базы данных кнопки, обеспечивающей переход к режиму ввода данных по договорам. После выбора формы Загрузка базы данных в окне диспетчера форм выполним команду Изменить, а затем в открывшемся в
Часть III. Разработка приложения пользователя
650
окне Изменение страницы кнопочной формы (Edit Switchboard Page) выполним команду Создать (New). Далее выберем в списке команду Открыть форму для изменения (Open Form in Edit Mode) (рис. 16.17), тогда ниже появится список доступных форм с наименованием Ферма (Form). В этом списке выберем форму ДОГОВОР С ПОКУПАТЕЛЕМ. В строке Текст (Text) введем подпись кнопки Просмотр и загрузка договоров. Изменение элемента кнопочной формы Текст;
Просмотр н загрузка договоров
Команда:
[Открыть форм/ для изменения
Форма;
[ДОГОВОР С ПОКУПАТЕЛЕМ
Отмена -I
Рис. 16.17. Выбор команды для элемента кнопочной формы
Далее в кнопочной форме Загрузка базы данных (рис. 16.18) создадим кнопку Учет отпуска товаров для открытия формы Накладная и кнопку Справочные данные для перехода к следующей подчиненной кнопочной форме, в которой предусмотрим кнопки для открытия форм справочной информации по товарам., складам и покупателям. В этой подчиненной кнопочной форме целесообразно создать кнопку возврата к форме Загрузка базы данных.
Г ]| Возврат к главной Форме приложения J Формирование портфеля договоров J Учет отпуска товаров J Справочные дэнные
Рис. 16.18. Подчиненная кнопочная форма Загрузка базы данных
ЗАДАНИЕ 1 Создайте кнопки управления в подчиненной кнопочной форме Анализ выполнения договоров, позволяющие выполнить переход к различным объектам приложения, в которых формируются результаты анализа.
Глава 16. Управление приложением пользователя
__
_ 65 1
Замечание При создании кнопочной формы с помощью диспетчера кнопочных форм Access генерирует таблицу Элементы кнопочной формы, содержащую описания кнопок, выводящихся в форме, и выполняемых ими действий.
Добавление рисунка в кнопочную форму В стандартную кнопочную форму в левой части области данных можно вставить рисунок.
Замечание Попытка модифицировать кнопочную форму в режиме конструктора формы может привести к тому, что приложение перестанет работать. Вставка в кнопочную форму рисунков не приводит к таким последствиям.
Воспользовавшись кнопкой Вид (View), переключим кнопочную форму в режим конструктора. В левой части этой формы уже размещен элемент управления типа Рисунок (Picture), в котором рисунок отсутствует, но создана рамка для размещения конкретного изображения. Заметим, что такой элемент может быть создан в любой форме с помощью кнопки панели элементов Рисунок (Image). Для выделения рамки рисунка щелкнем кнопкой мыши на области формы слева и нажмем правую кнопку мыши. В открывшемся окне свойств этого элемента (рис. 16.19) на вкладке Макет (Format) в строке Рисунок (Picture) можно указать путь и имя файла с рисунком. Такой файл должен иметь формат одного из графических приложений (BMP, GIF, JPG и т. п.), которые поддерживаются установленными в системе фильтрами. Если путь или имя файла неизвестны, можно выбрать рисунок с помощью построителя рисунков, который вызывается нажатием кнопки построителя в конце строки Рисунок (Picture). В открывшемся окне Выбор рисунка (Insert Picture) откроем папку, в которой хранится файл с нужным рисунком, и выберем этот файл. Предоставляемая построителем возможность просматривать изображения значительно облегчает процесс поиска рисунка. По умолчанию в свойствах рисунка определен тип рисунка: Внедренный. Изменив это свойство на значение Связанный, можно получить в форме рисунок, вид которого будет соответствовать сохраняемому рисунку в связанном файле. На рис. 16.20 приведена кнопочная форма рассматриваемого приложения, в которую изображение вставлено вторым способом.
Часть III. Разработка приложения пользователя
652 S? Рисунок: Picture Picture
,
вызов построителя
Макет [ Данные j События j Другие j Все j Рисунок E:\DocuSnsnts and 5afctings\UBB\MoH документы\Мои рис у нки\ггап! _DELLAximX5.jpg Гип рисунка Внедренный Установка размеров Вписать в рамку Выравнивание рисунка По центру Мозаичное заполнение Нет Ддрес гиперссылки Дополнительный адрес Вывод на экран Да Режим вывода Всегда От левого края , , Осм От верхнего края Осм Ширина 4,735см Высота 8,413см Тип фона .,.,,, Обычный Цвет фона , 8421376 Оформление обычное Отсутствует Тип границы Цвет границы О Ширина границы , . , Сверхтонкая
d
Рис. 16.19. Окно свойств элемента Рисунок
В Приложение ПОСТАВКА ТОВАРОВ
Поставка товаров jjj Загрузка базы данных J Анализ выполнения договоров I Изменение главной Формы I Выход из приложения J
Закрыть кн. форму
Рис. 16.20. Кнопочная форма приложения с рисунком
Запуск Access с открытием приложения пользователя Главная кнопочная форма управления приложением может запускаться сразу при открытии файла базы данных. Для задания такого режима данных
653
Глава 16. Управление приложением пользователя
нужно при открытой базе выполнить команду меню Сервис]Параметры запуска (Tools(Startup). В окне параметров запуска (рис. 16.21) в строке Вывод формы/страницы (Dislay Form/Page) выбирается кнопочная форма.
Параметры запуска Заголовок приложения:
Вывод фор мы/страницы;
; Поставка товаров
;Кнопочная форма
Значок приложения:
R Окно базы данных Р Строка состояния
Г
-•-,.г,
Строка меню:
Контекстное меню:
(по умолчанию)
! (по умолчанию)
У Полный набор меню Access
К? Встроенные панели инструментов
Р Контекстные меню по умолчанию
15* Изменение панелей инструментов/меню
v
Г"/ Специальные клавиши Access (Вывод окна базы данных, окна проверки и окна Visual Basic, приостановка выполнения)
Рис. 16.21. Окно параметров запуска приложения
Остальные параметры запуска определяют вид окна приложения при его открытии. Эти параметры позволяют задать заголовок окна приложения, отказаться от вывода полного набора меню Access при работе приложения, строка которого отображается по умолчанию. При отказе от полного набора меню будет выведен ограниченный набор команд меню: Файл, Правка, Вставка, Записи, Окно. В него не включаются меню Вид и Сервис. Заметим, что в рассмотренном случае окно базы данных также открывается.
Создание меню приложения Работа с приложением пользователя в обычном режиме делается более упорядоченной, если при запуске открывается окно приложения, в котором имеется собственное меню с необходимыми только для приложения командами, без доступа к окну базы данных и командам инструментальных средств Access. Кроме того, можно предусмотреть, как было показано ранее, автоматическое открытие по умолчанию либо кнопочной формы для управления приложением, либо другой формы — интерфейса приложения. Для получения окна приложения, имеющего только собственное меню, можно воспользоваться командой Вид]Панели инструментов/Настройка (View) Toolbars]Customize). Затем снять там флажки со всех стандартных панелей
Часть III. Разработка приложения пользователя
654
Access. Для снятия флажка с панели Строка меню (Menu Bar) следует предварительно в окне свойств для этой строки (рис. 16.22) поставить флажок: отображение и скрытие (Allow Showwing/Hiding).
Свойства панели инструментов Выбранная панель;
Строка меню
Свойства панели инструментов
.>;? меню закрепление:
Любое
Г" й'оС'."
перемещение
Р настройка
[отображение и скрытие!
!•? изменение размера Сброс
Закрыть
Рис. 16.22. Корректировка свойств строки меню Access
Замечание Если при запуске приложения стандартная строка меню Access выводится по умолчанию, то можно модифицировать ее, удалив ненужные подменю и команды при открытом окне настройки панелей инструментов. В этом случае при запуске приложения будет выводиться не полная, а усеченная строка меню Access.
Для создания панели меню приложения в окне настройки панелей инструментов (рис. 16.23) следует выполнить команду Создать (New) и присвоить новой панели название, например, Меню приложения, вместо имени по умолчанию Настраиваемая 1. Далее для формирования иерархического меню приложения надо подготовить несколько подменю на панели команд приложения. Для этого на вкладке Команды (Commands) необходимо выбрать категорию Новое меню (New Menu) и перетащить курсором мыши команду Новое меню (New Menu) на создаваемую панель приложения (рис. 16.24). Аналогичные действия следует повторить для создания других подменю в формируемой строке меню приложения. По правой кнопке мыши можно перейти к переименованию подменю. Например, назовем одно из подменю для формирования набора общих команд Файл, другое — Справочники (рис. 16.25).
Глава 16. Управление приложением пользователя
655
Панели инструментов | Команды [ Параметры Панели инструментов; База данных Создать.,, Г" Веб-узел Г" Выравнивание и размер Г" Запрос в режиме таблицы Г~ Конструктор запросов Г* Конструктор макросов Г" Конструктор отчетов Сброс.,. Конструктор таблиц Конструктор форм Свойства Контекстные пении Маке Г~0бла Создание панели инструментов _ Пред| Панель инструментов: Работ Разме Отмена • Закрыть
Рис. 16.23. Создание меню для приложения
Новое меню » [новое меню '
Настройка Панели инструментов
Команды
Параметры
Чтобы добавить команду на панель инструментов, категорию и перетащите команду из этого окна на п&нель Категории: Команды: 'абота с исходным Teh * j Зс трое иные меню Все таблицы Все запросы Зсе формы Все отчеты Все веб-страницы Все макросы Элементы ActiveX Изменить выделенный объект »|
Новое меню
Упорядочить команды..,
Закрыть
Рис. 16.24. Создание подменю для строки меню приложения
Часть III. Разработка приложения пользователя
656 Неин> (юипожс *•* х Файл - |Справочник;
Удалить • Имя: Справочники
_i>:~.,:4ii:>i L г ••'•'.• .-. с
SKC
'к.Сз
' >n< : "?•..• •- ".• . -iV. ,гчН
Начать группу
войства
Рис. 16.25. Присвоение имени подменю приложения
Файп * Справочники ' f. Открыть...
Панели инструментов
Ком.знды
CtH+0
Паранетрь
Чтобы добавить команду на памеле инструмектов,\вы6еритв категорию и перетащите команду из этого окна на панель. Категории; Коцанды! • чети 11БШг^Н Специальная Правка Создать.,, Зставка Открыть.., 'ежим таблицо! Записи jj Импорт,,. Сводная таблица и ли, Окна и справка *-J: Связь с таблицами,., Конструктор таблиц J" Закрь(Ть <онструктор запросов
J
Закрыть
Рис. 16.26. Создание команды Открыть в подменю Файл
Глава 16. Управление приложением пользователя
657
Для формирования раскрывающегося списка команд каждого подменю необходимо в окне настройки панелей инструментов перейти на вкладку Команды (Commands). В зависимости от формируемого набора команд следует выбрать нужную категорию из предложенного списка Команды (Commands) и перетащить в соответствующее подменю. На рис. 16.26 показано формирование строки с командой Открыть (Open) в подменю Файл. Через параметры запуска (см. рис. 16.21) можно ограничить пользователю доступ к объектам базы данных. В этом случае он сможет выполнять только те действия, которые предусмотрены в меню приложения. Для того чтобы пользователь, работая с приложением, не имел доступа к окну базы данных, нужно снять флажки Окно базы данных (Display Database Window) и Специальные клавиши Access (Use Access Special Keys). Если в параметрах запуска установлена ссылка на кнопочную форму, обеспечивается автоматическое открытие этой формы при открытии базы данных. При необходимости можно указать любую форму, открываемую по умолчанию при запуске приложения вместо кнопочной формы.-
Запуск приложения с рабочего стола На рабочем столе Windows можно создать ярлык для запуска Access с автоматическим открытием базы данных. Пользователю достаточно будет сделать двойной щелчок мышью на этом ярлыке, чтобы сразу попасть в среду приложения. Для запуска Access с автоматическим открытием базы данных можно создать ярлык для Access или ярлык для базы данных. Наиболее простым способом запуска Access с открытием базы данных является создание ярлыка для базы данных. Откроем папку, в которой хранится файл базы данных. Установим курсор на значок файла базы данных, нажмем правую кнопку мыши и в контекстном меню выберем команду Создать ярлык. Перетащим созданный ярлык на рабочий стол. Созданный на рабочем столе ярлык для базы данных "Поставка товаров" представлен на рис. 16.27.
Ярлык для Поставка товарoe.mdb
Рис. 16.27. Ярлык запуска приложения с рабочего стола
Возможно создание ярлыка и для отдельного объекта базы данных, в том числе и для кнопочной формы, управляющей приложением. Такой ярлык позволяет запустить Access, открыть в нем базу данных и кнопочную форму.
658
Часть lit. Разработка приложения пользователя
Для создания ярлыка достаточно перетащить объект из окна базы данных на рабочий стол. Созданный на рабочем столе ярлык для кнопочной формы базы данных "Поставка товаров" представлен на рис. 16.28.
Ярлык 'Кнопочная форма' (Поставка товаров) •ншн^н
Рис. 16.28, Ярлык запуска кнопочной формы приложения с рабочего стола
Использование конструктора форм для создания интерфейса управления приложением Интерфейс, из которого осуществляется управление приложением, может быть создан пользователем самостоятельно в режиме конструктора форм. В этом режиме в отличие от кнопочных форм, создаваемых диспетчером, может быть реализован интерфейс практически любого вида. Для создания интерфейса приложения необходимо в окне базы данных на вкладке Формы (Forms) нажать кнопку Создать (New). В окне Новая форма (New Form) нужно выбрать пункт Конструктор (Design). При этом источник данных не должен указываться. После нажатия кнопки ОК открывается форма в режиме конструктора. В этой форме можно создать кнопки для вызова (открытия) других форм, в том числе — кнопочных, или выполнения любых объектов приложения. Создаваемая форма может быть сохранена под любым именем и в любой момент отредактирована в режиме конструктора. Таким образом могут быть созданы взаимосвязанные формы, образующие интерфейс приложения. Каждая из этих форм будет являться отдельным объектом и, в отличие от созданных диспетчером кнопочных форм, будет представлена в списке форм в окне базы данных. Пользователь имеет возможность создать в формах кнопки самостоятельно или с помощью мастера. Мастер значительно ускоряет процесс построения кнопки и связывания ее с нужными действиями, автоматически выполняя всю необходимую работу. Мастер ведет диалог с пользователем и на основе его ответов создает кнопку. Технология создания кнопок управления описана в главе 6.
Глава 16. Управление приложением пользователя
659
Мастер позволяет создавать кнопки более 30 типов, например, кнопки для открытия формы, страницы, выполнения запроса, макроса, выхода из приложения или выполнения других действий. При создании кнопки с помощью мастера Access генерирует процедуру обработки событий на языке Visual Basic. Эта процедура связывается с событием "нажатие кнопки" {On Click) и выполняет выбранное действие. Пользователь имеет возможность открыть процедуру, ознакомиться с программой и, при необходимости, внести в нее изменения. Для открытия этой процедуры обработки события требуется в режиме конструктора вызвать контекстное меню кнопки и выбрать команду этого меню Обработка событий (Build Event). Например, если в форме Рогт_Приложение создана кнопка Кнопка^договор для открытия формы Договор, то процедура, связанная с кнопкой, будет иметь вид, показанный на рис. 16.29.
Microsoft Visual Basic * Поставка товаров : File
|dit
View
Insert
Debug
Run
lools
Add-Ins
Window
Help
M Поставка товаров - Рогт_Приложение (Code) j Кнопка „договор End Sub
Private Sub Кнопка_договор_С11с]£ ( ) On Error GoTo Err_KHonKa__norosop_CIick Dim stDocNaine As String Dim stLinkCriteria As String stDocH&me = "Договор" DoCmd. OpenForm stDocMartte,
, stLinfcCriteria
E x i t Sub Егг_Кнопка_договор_С11сК:: HsgBox Err . D e s c r i p t i o n Resume Ех^_Кнопка_договор_С1асК End Sub
Рис. 16.29. Процедура открытия формы Договор, созданная мастером кнопок
22
Зак S35
660
Часть til. Разработка приложения пользователя
Контрольные вопросы 1. Какая служебная программа позволяет создать панель управления приложением? 2. Ограничено ли число страниц в кнопочной форме? 3. Какие команды можно связать с элементами кнопочной формы? 4. Какая команда позволяет открыть окно, в котором можно указать, что одновременно с запуском Access должна открываться кнопочная форма? 5. Можно ли запретить пользователю работу в окне базы данных, оставив только возможность выполнять задачи, предусмотренные в кнопочной форме? 6. В каком режиме кнопочной формы можно вставить в нее рисунок? 7. Можно ли с помощью мастера создать в форме кнопку для запуска запроса? 8. Какой объект создает мастер для выполнения нужной команды? 9. С каким событием связывается команда, выполняющаяся при щелчке на кнопке? 10. Можно ли создать ярлык для кнопочной формы? 11. Можно ли создать приложение пользователя с собственным меню? 12. С помощью какой команды можно создать и настроить меню приложения? Ответы 1. Диспетчер кнопочных форм.
2. Нет. 3. Открытие формы, отчета, выполнение макроса, программы, переход к другой странице кнопочной формы, конструктор приложения, выход из приложения. 4. Сервис|Параметры запуска (Tools Startup).
5. Да. 6. В режиме конструктора форм.
7. Да. 8. Процедуру обработки событий на языке VBA в модуле формы. 9. Нажатие кнопки (On Click). 10. Да, как для любого другого объекта Access. 11. Да.
12. Командой Вид|Панели инструментов)Настройка.
Глава 17
Пример практического приложения в сфере торговли Одной их важнейших сфер применения Access являются системы организационного экономического управления на малых и средних предприятиях. Наряду с мощными специализированными прикладными системами пользователь часто заинтересован в оригинальной разработке системы, при которой иногда проще учесть особенности деятельности предприятия, создать более простую информационную систему, не требующую сопровождения со стороны. В настоящей главе рассматривается пример реализации средствами Access базы данных и одного из компонентов практического приложения в сфере торговой деятельности гипотетической фирмы. Для разработки приложения пользователя, включая его базу данных, необходимо подготовить описание предметной области. Такое описание должно, в частности, содержать: общие требования к приложению, функциональные ограничения, описание технологии работы с данными и документами, требования к интерфейсу пользователя при работе с базой данных, вводу и корректировке справочной информации, подготовке и вводу документов оперативно-учетной информации, а также просмотру ранее подготовленных и сохраненных документов, требования к отчетам из базы данных. Далее приводится пример такого описания для предметной области "Покупкапродажа товаров".
Общие сведения о приложении Рассматриваемое приложение ограничивается управленческим учетом торговой деятельности мелкооптовой фирмы, имеющей несколько складов. Основная цель управленческого учета — формирование информации о деятельности фирмы для внутреннего использования, т. е. для руководителей и сотрудников фирмы. Объектом автоматизации является фирма, осуществляющая мелкооптовую торговлю. Фирма закупает товары у поставщиков и продает их мелким оп-
662
Часть III. Разработка приложения пользователя
том по безналичному расчету потребителям (покупателям). Фирма имеет один рублевый счет. Подробная информация о банковском счете и банке используется при подготовке и выводе платежных документов. Торговля ведется в базовой валюте. Базовой валютой являются рубли. Документы, учитывающие движение денег по безналичному расчету, подготавливаются только в базовой валюте. Отпуск, прием и учет товаров ведутся на складах фирмы. В фирме может быть произвольное число складов. Учет продаж и покупок товаров и расчеты с поставщиками и покупателями производятся на основе оперативно-учетных документов.
Функции приложения Управленческий учет торговой деятельности включает оперативный учет продаж товара и его покупки, анализ движения товаров, оценку запасов (остатков) товаров на складах фирмы, а также операции расчетов с покупателями и поставщиками. В данном примере ограничимся упрощенным рассмотрением следующих функций: П учет продаж (отпуска) и покупок (поступлений) товаров; П учет движения товаров на складах; П учет расчетов с поставщиками и покупателями (учет оплат за товары); П анализ товарного запаса на складах; П формирование отчетов. В приложении должны осуществляться подготовка, ввод в базу данных и вывод на печать документов: справочников, счетов на оплату, расходных накладных, счетов-фактур, приходных накладных, платежных поручений, выписок с расчетного счета фирмы. Учет расхода, прихода товаров и расчет текущих запасов товаров осуществляются в момент свершения операций в той последовательности, в которой они реально происходят.
Документы приложения Документы приложения включают документы справочной и оперативноучетной информации.
Справочная информация Справочная информация должна использоваться для получения достоверных сведений об объектах, с которыми оперирует приложение на основе идентификаторов (кодов объектов). При подготовке оперативно-учетных документов или их просмотре эти сведения должны быть доступны. Справочники являются первичным носителем этих данных, и поэтому такие
Глава 17. Пример практического приложения в сфере торговли
663
данные должны загружаться в базу данных только из них. Справочные данные подлежат однократному хранению в базе данных. К основной справочной информации приложения относится информация о фирме, ее складах, товарах, поставщиках и потребителях (контрагентах). Информация соответствующих справочников представлена совокупностью реквизитов, определяющих рассматриваемый объект предметной области. Справочники имеют коды, обеспечивающие уникальную идентификацию объекта.
Оперативно-учетная информация Для управленческого учета в приложении используются следующие документы оперативно-учетной информации: G счет на оплату; П расходная накладная; П приходная накладная; П счет-фактура (выдаваемый и получаемый); О выписка из банковского счета фирмы; П! платежное поручение банку фирмы. Все документы на практике, как правило, регистрируются в журналах, в которых представлен список документов за текущий учетный период. Каждая строка журнала является записью о документе. Записи в журнале сортируются по дате, а внутри даты — по времени ввода документа в журнал. Работа с документом начинается с журнала. При продаже (отпуске) товара на компьютере подготавливаются документы "Расходная накладная" и "Счет-фактура" (выдаваемый). Товар может отпускаться в соответствии с оплаченным счетом, выписанным предварительно покупателю, или без оформления счета, но при произведенной предоплате товара. Оплата покупателем товара фиксируется в базе на основе данных выписки из банка, подтверждающей поступление денежных средств на расчетный счет фирмы. При покупке (получении товара) от поставщика поступают приходная накладная и счет-фактура (получаемый), содержащие данные о приходе товара. Для оплаты полученного от поставщика товара фирмой подготавливается платежное поручение банку. Данные по фактической оплате, т. е. о переводе денежных средств со счета фирмы на расчетный счет поставщика, могут быть введены из документа "Выписка из банка". Схематично взаимосвязи документов приложения и базы данных показаны на рис. 17.1.
Часть III. Разработка приложения пользователя
664
Расходная накладная
Счет-фактура выдаваемая Документы фирмы
БАЗА ДАННЫХ ПРИЛОЖЕНИЯ "ПОКУПКА И ПРОДАЖА ТОВАРОВ"
Справочник товаров
Справочник складов
Рис. 17.1. Документы приложения "Покупка-продажа товаров"
Ограничимся при дальнейшем рассмотрении примера более подробным анализом приложения в части функции учета продаж и покупок товаров.
Технология учета продажи и покупки товаров Автоматизированный учет прихода (покупок) и расхода (продаж) товаров может осуществляться на основе данных документов "Расходная накладная" и "Приходная накладная". По мере подготовки расходных накладных и поступления приходных накладных данные по отпуску товаров со складов и поступления на склады должны вводиться, накапливаться и храниться в базе данных в течение регламентированного периода. В процессе ввода данных о приходе и расходе товаров производится'расчет текущих суммарных данных расхода, прихода товаров по складам за период и остатков продукции на складе. Новые подготовленные и введенные документы (счет, расходная накладная, счетфактура) распечатываются в стандартном виде для передачи покупателю. По запросу пользователя данные об остатке товаров на требуемую дату и движении товаров за период следует представлять в виде соответствующих отчетов. Подготовка отчетов из базы данных должна осуществляться в процессе диалога, который позволяет выбрать отчет и задать нужные парамет-
Глава 17. Пример практического приложения в сфере торговли
665
ры. Диалог запроса будет предусматривать вывод отчета по остаткам товаров и движению товаров на складах. По остаткам можно предоставить полный отчет по всем складам или частичный для заданного склада и для выбранного товара. Также будет предусмотрен вывод краткого отчета о движении товаров суммарно по всем складам фирмы, и более подробного отчета, отражающего процесс движения товаров при поступлении каждого приходно-расходного документа. Соответствующие формы отчетов приведены на рис. 17.2, 17.3, 17.4.
ОСТАТКИ ТОВАРОВ НА СКЛАДАХ на Склад Код
2002
Товар
Единица Нормативный Остаток Отклонение запас измерения Наименование Код Наименование
Рис. 17.2. Форма отчета по остаткам (запасам) товаров на складе
ОТЧЕТ О ДВИ)КЕНИИ ТОВАРОВ НА ФИРМЕ за пери од с Товар Код Наименование
2002 по
2002
Начальный Приход Расход Остаток остаток
Рис. 17.3. Форма обобщенного отчета о движении товаров по фирме в целом
ОТЧЕТ 0 ДВИЖЕНИИ ТОВАРОВ /подробно/ за период с
Вид товара
Товар
2002 по
в том числе по документам
Код Наименование Дата № Пр./Расх. накл Контрагент
2002
Начальный Остаток Приход Расход текущий остаток
Рис. 17.4. Форма подробного отчета о движении товаров по фирме в целом
666
Часть III. Разработка приложения пользователя
При использовании аналитического подхода к разработке базы данных рассматриваемого приложения нужно, прежде всего, проанализировать документы по отпуску и поступлению товаров на склады, которые должны храниться . в базе данных и обеспечивать информационные потребности приложения. Данные одних документов могут использоваться для подготовки других оперативно-учетных документов. Например, счет на оплату для расходной накладной, которая, в свою очередь, используется для подготовки счета-фактуры.
Учет отпуска товаров покупателям Данные о фактической отгрузке товаров покупателям со складов, которые должны сохраняться в базе данных, содержатся в расходной накладной (РН). При отпуске товара покупателю на компьютере подготавливается документ "Расходная накладная". При этом, в соответствии с заявкой на товары от покупателя, оплаченным им счетом, расходная накладная подготавливается с использованием справочной информации, уже имеющейся в базе данных. Данные новой расходной накладной вводятся в базу. Подготовка расходной накладной может основываться на ранее выписанном документе "Счет", данные которого уже были сохранены в базе. В этом случае спецификации расходной накладной могут формироваться на основе спецификации счета на оплату и затем сохраняются как данные о фактической отгрузке. Возможно отличие от спецификации выставленного счета в случае неполной оплаты по нему или частичной отгрузке по сравнению со спецификацией. На основании счета может быть выписано несколько расходных накладных, если они выписываются с разных складов. После подготовки расходной накладной обычно осуществляется "проводка" документа, при которой производится учет отгрузки в базе данных, рассчитывается остаток товара на складе и проверяется состояние взаиморасчетов с покупателем (долг или остаток по поступившим платежам).
Замечание Накладные на отпуск товаров, как правило, подготавливаются при работе с журналом расходных накладных. Новые накладные записываются в журнале,
В качестве грузоотправителя рассматривается конкретный- склад. Соответственно, все отгружаемые товары, которые содержатся в документе, — это те товары, которые хранятся на данном складе. В соответствии с расходной накладной на компьютере подготавливается для покупателя счет-фактура (выдаваемый) на отгруженные и оплаченные товары.
Глава 17. Пример практического приложения в сфере торговли
667
Учет поступления товаров Данные о поступлении товаров на склады содержатся в приходной накладной (ПН), которая наряду со счетом-фактурой является сопроводительным документом. Оба документа приходят от поставщика. Приходная накладная поступает при получении товара на склад. Товары, которые указаны в одной приходной накладной, могут поступать на один склад или на разные.
Замечание Для новой приходной накладной записывается соответствующая строка в журнале приходных накладных.
На практике при вводе данных приходной накладной осуществляется ее "проводка", при которой рассчитываются и обновляются данные о текущем остатке на складе поступивших товаров, а также проверяется состояние взаиморасчетов с покупателем.
Учет оплат товаров Автоматизированный учет расчетов с покупателями и поставщиками (учет оплат за товары) может осуществляться на основе документов "Счет", "Выписка из банка", "Платежное поручение". В процессе поступления данных, подтверждающих фактическую оплату о приходе и расходе товаров, производятся учет оплат и анализ оплаты за отгруженный и купленный товар. По запросу пользователя данные о взаимных расчетах с поставщиками и потребителями должны быть представлены в виде соответствующих отчетов.
Информационный анализ и выделение информационных объектов Произведем анализ документов приложения с целью определения состава и структуры информации, размещаемой в базе данных. Формы документов, а также дополнительные сведения из описания приложения позволяют определить роль реквизитов во взаимосвязанной информации, содержащейся в документе, установить функциональные зависимости реквизитов для выделения информационных объектов, которые должны быть представлены в базе данных. Как отмечалось в главе 2, для минимизации возможных ошибок семантический анализ целесообразно производить по каждой из форм документов в отдельности. Это связано с тем, что форма документа отображает структуру
Часть III. Разработка приложения пользователя
668
данных, т. к. любой документ объединяет логически взаимосвязанные реквизиты.
Анализ справочных документов Формы справочных документов, содержащих необходимую в данном приложении информацию, приведены на рис. 17.5, 17.6, 17.7. Справочник товаров Вид Код товара товара
Наименование Базовая ед. Нормативный Цена измерения запас мепкоопт. товара
Цена закупки
Ставка НДС
Рис. 17.5. Форма документа "Справочник товаров" В справочнике товаров хранятся значения цен на товары с учетом НДС. Для товара указывается мелкооптовая цена реализации и приходная (закупочная) цена. Реквизит товара ставка ндс может принимать только одно из фиксированных значений (без ндс, 2 0 % , ю%). Реквизит вид товара может принимать значение товар или набор. Товар характеризуется базовой единицей измерения. Базовая единица измерения — ЭТО СДИНИЦЗ, В КОТОРОЙ ведется учет НЭличия товара. Справочник складов Код
склада
Наименование Отв. лицо Почтовый Телефон склада адрес
Рис. 17.6. Форма документа "Справочник складов" Справочник контрагентов (поставщиков/покупателей) Номер Реквизиты банка контрагента Код ИНН Наименование Адрес ОКОНХ ОКПО рассчетного Банк Индекс Корр. счет БИК счета
Рис. 17.7. Форма документа "Справочник контрагентов (поставщиков/покупателей)'
Глава 17. Пример практического приложения в сфере торговли
669
Каждый справочник содержит только табличную часть. В каждом из них имеется реквизит, выполняющий роль идентификатора строки (код или номер). Например, в справочнике товаров идентификатором является кед товара, который однозначно определяет описательные реквизиты: наименование товара, единицу измерения и др. В справочнике складов идентификатором является код склада, который однозначно определяет наименование склада и другие реквизиты. В справочнике контрагентов (поставщиков и покупателей) уникальным идентификатором является инн, а также код контрагента.
Информационные объекты справочных документов Составим перечень реквизитов справочников товаров, контрагентов и складов. Дадим реквизитам справочника товаров сокращенные обозначения имена. Установим зависимости каждого описательного реквизита товара (наименование, базовая единица измерения и др.) от кода товара, который однозначно их определяет. Все описательные реквизиты в справочнике склада однозначно определены кодом склада. Соответственно образуется один информационный объект СКЛАД. В справочнике контрагентов (поставщиков/покупателей)., если в качестве ключа принять более короткий по сравнению с инн код контрагента, он ОДНОЗНачно определит реквизиты ИНН, Наименование, Адрес, ОКОНХ, СКПО,
Банк, номер расчетного счета. В свою очередь реквизиты банка однозначно определены его идентификатором. Соответственно, выделяются два информационных объекта: КОНТРАГЕНТ и БАНК. В результате получим реквизитный состав информационных объектов основных справочных документов (табл. 17.1). Таблица. 17.1, Информационные объекты справочных документов Реквизиты ИО
Признак ключа, индекса
ИмяИО
код тов
Ключ уникальный
ТОВАР
вид_т НАКМ_ТОВ ЦЕНА ОПТ ЦЕНА_ЗАКУПКИ ЕИ_БАЗ СТАВКА_НДС
Часть III. Разработка приложения пользователя
670
Таблица. 17.1 (окончание)
Реквизиты ИО
Признак ключа, индекса
ИмяИО
код скл
Ключ уникальный
СКЛАД
КОД К
Ключ уникальный
КОНТРАГЕНТ
инн_к
Индекс уникальный
вид_скл НАИМ СК
отв_лицо АДРЕС СК
НАИМ К АДРЕС_К
оконх окпо НОМ_РСЧ ИД БАНКА
Ключ уникальный
ИД БАНКА
БАНК
ИНД_БАНКА АДРЕС_БАНКА КОР_СЧ БИК_ВАНКА
г
Замечание
Структура справочных данных по фирме (объекту автоматизации в данном приложении) аналогична рассмотренной для контрагентов. Соответственно, можно образовать отдельный объект для данных по фирме со структурой, аналогичной объекту КОНТРАГЕНТ.
Анализ документов по отпуску товаров Произведем анализ оперативной информации приложения, необходимой для учета расхода товаров на складах.
Расходная накладная Форма-бланк документа "Расходная накладная" приведена на рис. 17.8.
Глава 17. Пример практического приложения в сфере торговли
671 (Признак накп)
Накладная № _ от Поставщик Покупатель Склад
код
название
код
название
200 г. ИНН ИНН
код
Документ-основание
наименование
200 г.
номер счета Дата оплаты
Наименование Код товара
1
2
Ед. изм. 3
Ставка НДС %
Цена за ед. (руб)
Количество
'\
5
6
Сумма
Без НДС НДС Всего с НДС 7
8
9
Сумма без НДС
НДС Сумма всего Отпустил Получил
подпись
ФИО материально-отв. лица
подпись
ФИО материально-отв. лица
Рис. 17.8. Форма (бланк) документа "Расходная накладная'
Замечание В процессе подготовки документа для удобства ввода и обработки информации на компьютере в расходную накладную введены Код товара, код покупателя.
Из расходной накладной в процессе ее подготовки в базу данных должны вводиться (загружаться) следующие данные: идентификаторы (номер расходной накладной, код склада, код покупателя (или ИНН), идентификатор документа основания — счеты, код товара), а также описательные реквизиты (дата отпуска товаров (дата накладной)). Для каждого товара указываются ЗНачеНИЯ атрибутов Количество (отпущенного Товара), Сумма
отпущенно-
го (без НДС, НДС и общая сумма). Справочная информация о покупателе: наименование покупателя и его другие реквизиты; дата выписки счета, справочная информация о товаре:
672
_
Часть
III.
Разработка
приложения
пользователя
наименование товара, единица измерения, цена, ставка НДС — к моменту решения задачи уже должны находиться в базе данных и могут быть получены по соответствующим идентификаторам при формировании документа и дальнейшей работе через пользовательский интерфейс. Ранее, в главе 2, производился информационный анализ накладной. В соответствии с изложенным подходом и с учетом особенностей реквизитного состава в рассматриваемой расходной накладной установим функциональные зависимости и выделим информационные объекты. Для уникальной идентификации расходных накладных по всей фирме установим составной идентификатор ИЗ Номера расходной накладной (НОМ_РНАКЛ) И Кеда склада
(код_скл). Дата выписки накладной (ДАТА)) и итоговые величины по всем товарам накладной: сумма без НДС (всего_без_ндс), сумма НДС (всего__ндс), сумма с учетом НДС (всего_с_ндс) — реквизиты, имеющие единственное значение в документе, однозначно определяются идентификатором накладной. Название (НАИМ_Ф) и ИНН фирмы-поставщика определяются однозначно идентификатором фирмы — кодом фирмы. Наименование склада (НАИМ_СК) однозначно определено кодом склада (код_скл). Наименование контрагента (НАИМ_К) и инн_к однозначно определены его идентификатором (код_к). Дата выписки счета (ДАТА_СЧ) однозначно определена номером счета (ном_сч). Идентификаторы Код фирмы-поставщика, Код покупателя, Номер счета ИГ-
рают в документе важную связующую роль накладной с соответствующими справочными данными. К этим данным относятся: данные по фирме, данные по покупателю (которому отпущен товар), данные по складу (с которого отпущен товар), данные по счету (на основании которого выписывается накладная). Каждый из идентификаторов имеет единственное значение в расходной накладной и, таким образом, однозначно определен идентификатором документа (Номер расходной накладной+Код склада).
Замечание Таким образом, реквизиты Код фирмы-поставщика, Код покупателя, Код склада, Номер Счета с одной стороны являются ключевыми для соответствующих справочных данных, а с другой — описательными для накладной.
Реквизиты табличной части накладной Табличная часть содержит реквизиты, имеющие множество значений в соответствующих столбцах, т. к. расходная накладная может включать несколько наименований товаров, код товара является идентификатором каждой строки в документе. Описательные реквизиты товара: наименование (НАКМ_ТОВ), единица измерения базовая (ЕИ_БАЗ), цена оптовая без НДС (ЦЕНА_ОПТ), ставка НДС (СТАВКА_НДС) — однозначно определены кодом товара (код_тов). Что касается реквизитов-оснований накладной, таких как:
Глава-17. Пример практического приложения в сфере торговли
673
количество выписанного товара (кол), сумма за товар без НДС (СУММА_Б_НДС), сумма НДС за товар (СУММА_НДС), сумма всего за каждый выписанный товар с учетом НДС (СУММА_ОТП), эти реквизиты внутри документа идентифицируются кодом товара в соответствующей строке, а полная идентификация образуется добавлением к коду товара идентификатора накладной. В соответствии с функциональными зависимостями реквизитов сгруппируем реквизиты, одинаково зависимые от ключевых, и объединим их с ключевыми реквизитами в один информационный объект (ИО). Результат группировки по ИО реквизитов расходной накладной представлен в табл. 17.2. Таблица 17.2. Информационные объекты расходной накладной Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
НОМ_РНАКЛ
Ключ составной уникальный
Р_НАКЛАД
Общие сведения в расходной накладной
ФИРМА
Справочные данные о срмрме
код_скл код_пок ДАТА
док_осн Всего без НДС
расчетный
Всего НДС
расчетный
Всего с НДС
расчетный
КОД_ФИРМЫ
Ключ уник.
ИНН_Ф
Индекс уник.
НАИМ О
код_скл
Ключ уник.
СКЛАД
Справочные данные о складе
НАИМ_СК
код_к
Ключ уник.
КОНТРАГЕНТ (ПОКУПАТЕЛЬ)
инн_к НАИМ_К
Индекс унмк.
Справочные данные о покупателе
Часть III. Разработка приложения пользователя
674
Таблица 17.2 (окончание) Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
ном_сч
Ключ уник.
СЧЕТ_ОПЛ
Данные о счете к оплате
Ключ уник.
ТОВАР
Справочные данные о товаре
Ключ составной уникальный
СП_РНАКЛ
Данные по отпуску товара {спецификация РН)
ДАТА СЧ КОД ТОВ
НАИН ТОВ ЦЕНА_ОПТ ЕЙ БАЗ
СТАВКА НДС НОМ_РНАКЛ
код_скл
код т кол СУММА_Б_НДС
расчетный
СУММА_НДС
расчетный
СУММА ОТП
расчетный
В результате выделения информационных объектов по расходной накладной были вторично выделены объекты справочной информации, которая содержится в накладной: СКЛАД, ПОКУПАТЕЛЬ, ТОВАР. При анализе справочников был выявлен более полный состав реквизитов объектов справочной информации. Объединим каждый из этих объектов с одноименным объектом, выделенным ранее из справочников, в один объект. Окончательный реквизитный состав каждого объекта имеет объединенный набор реквизитов в соответствии с правилом объединения множеств.
Выдаваемый счет-фактура На рис. 17.9 приведена форма-бланк документа "Счет-фактура", для которой будет произведен информационный анализ, Новый документ "Счет-фактура (выдаваемая)" в данном приложении будет формироваться на основании документа "Расходная накладная". Поскольку спецификация счета-фактуры совпадает со спецификацией расходной на-
Глава 17. Пример практического приложения в сфере торговли
675
кладной, ее можно не сохранять в базе данных, а офаничиться лишь вводом общих данных с чета-фактуры. СЧЕТ-ФАКТУРА №
200 г.
ПОСТАВЩИК Адрес
ПОКУПАТЕЛЬ Адрес
Расчетный счет №
Расчетный счет № в
БИК
Корр. счет.
Город.
ИНН
Код по ОКНХ
БИК
Корр. счет.
Город.
Код по ОКПО.
ИНН
Код по ОКНХ
Грузоотправитель _ (склад) адрес
Код по ОКПО
Грузоотправитель _ адрес. к документу
№
Наименование товара
Код
1
2
Код Ед. ОКДП изм.
3
4
Кол-во 5
Цена за ед. (РУб) 6
Сумма Ставка Сумма Всего без НДС НДС% НДС % с НДС
1
8
9
10
Всего Сумма прописью Руководитель предприятия Получил
М.П.
Гл. бухгалтер
Выдал ФИО покупателя или уполномоченного представителя покупатепя
подпись ответственного пииа от продавца
Рис. 17.9. Форма документа "Счет-фактура"
Таким образом, можно офаничиться анализом функциональных зависимостей реквизитов обшей части документа. Справочные реквизиты фирмы, покупателя, склада однозначно определяются соответствующим идентификатором. Эти функциональные зависимости соответствуют ранее выделенным объектам справочной информации. Уникальный составной идентификатор счета-фактуры образует ее ноиер (ном_сфп). Код склада-фузоотправителя (код_скл), дата выписки (ДАТА), код покупателя (код_пок), идентификатор документа-основания — расходной накладной — (док_осн), сумма всего без НДС (СУММА_БЕЗ_НДС), всего НДС (ндс), всего с НДС (ВСЕГО_С_НДС) функционально полно зависят от идентификатора счета-фактуры. Таким образом, выделяется один новый информационный объект данных СЧЕТ-ФАКТУРА ПОКУПАТЕЛЯ (СЧФАК_ПОК) с 23 Зак. 835
Часть III. Разработка приложения пользователя
676
названными здесь реквизитами и номером счета-фактуры в качестве ключа (табл. 17.3). Информационный объект СЧФАК_ПОК соответствует множеству счетов-фактур (без спецификаций). Таблица 17.3. Информационный объект по счету-фактуре выдаваемому Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
НОМ_СФП
Ключ. составной уникальный
СЧФАК ПОК
Общие сведения в счете-фактуре
код_скл код_пок ДАТА
•
док_осн СУММА_БЕЗ_НДС НДС
ВСЕГО__с_НДС
Анализ документов по поступлению товаров Произведем анализ информации приложения, необходимой для учета поступлений товаров на складах.
Приходная накладная Документ "Приходная накладная" поступает от поставщика на склад фирмы вместе с товаром. Форма документа практически совпадает с рассмотренной выше расходной накладной. Ввод данных с документа в базу приложения предполагает формирование ряда дополнительных реквизитов, которых нет в документе-источнике. К таким данным относятся: дата (текущая) приемки товара, код склада, на который поступил товар, возможно, порядковый номер приходной накладной, если предусмотрено формирование его для идентификации документа. В зависимости от этого может меняться идентификация приходной накладной. Для учета поступления товаров на склады с этого документа должны поступать следующие сведения в базу данных: П идентификаторы: номер накладной, код поставщика (или ИНН), номер склада, на который поступает товар, код товара; П описательные реквизиты: дата выписки накладной поставщиком, текущая дата приемки товара (ввода документа), количество поступившего товара, суммы принятого товара (без НДС, НДС и общая сумма).
Глава 17. Пример практического приложения в сфере торговли
677
Справочные данные о поставщике (наименование и другие его реквизиты), о товаре (наименование товара, единица измерения, цена, ставка НДС), а также данные о складе к моменту учета поступлений товара уже должны находиться в базе данных. Эти справочные данные могут быть получены по соответствующим идентификаторам при подготовке документа "Приходная накладная" и дальнейшей работе через интерфейс документа. Идентификация приходной накладной
Среди реквизитов общей части (шапки) документа особую роль играет номер накладной. Если номер приходной накладной присваивается в процессе ввода данных в базу, как уникальный в пределах конкретного склада, то для идентификации приходных накладных надо объединить его с кодом склада. В таком составном идентификаторе нет необходимости, если возможна уникальная нумерация накладных по всей фирме. В качестве уникального идентификатора приходной накладной можно использовать номер накладной, присвоенный поставщиком, и тогда надо объединить его с кодом поставщика. В остальном анализ информации приходной накладной аналогичен анализу расходной накладной. Определив функциональные зависимости реквизитов приходной накладной, по форме совпадающей с рассмотренной ранее расходной накладной (см. рис. 17.9), получим новые информационные объекты, представленные в табл. 17.4. Таблица 17.4. Информационные объекты по приходной накладной Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
НОМ_ПНАКЛ
Ключ составной уникальный
ПР_НАКЛАД
Общие сведения в Приходной накладной
код_пост код_скл КОД_Ф ДАТА ДАТА_ПР ДОК_ОСН Всего без НДС Всего_НДС Всего с НДС
'
Часть III. Разработка приложения пользователя
678
Таблица 17.4 (окончание) Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
НОМ_ПНАКЛ
Ключ составной уникальный
СП_ПРНАКЛ
Данные по отпуску товара (спецификация приходной накладной)
код_пост код_т КОЛ_ПОЛУЧ СУММА_Б_НДС СУММА_НДС СУММА_ПОЛУЧ
Счет-фактура получаемая Документ "Счет-фактура получаемая" поступает от поставщика и соответствует документу "Приходная накладная". Поскольку спецификация счетафактуры совпадает со спецификацией приходной накладной, то при регистрации ее можно не сохранять отдельно в базе данных, а ограничиться лишь вводом общих данных счета-фактуры. Анализ функциональных зависимостей реквизитов общей части документа аналогичен рассмотренному ранее для выдаваемой покупателю счетафактуры. Справочные реквизиты фирмы, выступающей в данном документе в роли покупателя, и справочные реквизиты поставщика однозначно определяются соответствующими идентификаторами этих объектов. Такие функциональные зависимости реквизитов соответствуют ранее выделенным объектам справочной информации. Уникальный составной идентификатор получаемой счета-фактуры образуют ее номер и код поставщика. В случае присвоения регистрационного номера по фирме (получателю товара) можно принять в качестве идентификатора документа этот номер. Реквизиты: дата (выписки), дата регистрации (получения документа), дата оплаты, идентификатор фирмы (покупателя), идентификатор документа-основания (расходной накладной), сумма без НДС, сумма НДС, всего с НДС — функционально полно зависят от идентификатора счета-фактуры. В результате анализа выделяется один новый информационный объект СЧФАК_ПОСТ (счет-фактура поставщика) с названными здесь реквизитами и
Глава 17. Пример практического приложения в сфере торговли
679
идентификатором счета-фактуры в качестве ключа. Такой объект (табл. 17.5) соответствует множеству получаемых счетов-фактур (без спецификаций). Таблица 17.5. Информационный объект по счету-фактуре (получаемому) Реквизиты ИО
Признак ключа, индекса (ИНД)
ИмяИО
Семантика ИО (описание)
НОМ_СФПОСТ
Ключ составной уникальный
СЧФАК ПОСТ
Общие сведения по счету-фактуре получаемой
код_пост КОД_Ф ДАТА ДАТА_ПОЛУЧ ДАТА_ОШ1 ДОК_ОСН Сумма без НДС Сумма НДС Всего с НДС
Анализ документов по оплате Счет на оплату Документ "Счет на оплату товара" (рис. 17.10), выданный фирмой покупателю, имеет уникальный идентификатор — порядковый номер счета, который присваивается при подготовке документа. Этот номер однозначно определяет как поставщика (фирму), так и покупателя (плательщика), которые указаны в документе. Следовательно, идентификатор фирмы, идентификатор покупателя, а также общая сумма и НДС по счету функционально полно зависят от номера счета. Кроме того, в базе данных можно предусмотреть хранение данных фактической оплаты по счету (суммы и даты), которые также однозначно определяются номером счета. Справочные реквизиты поставщика, т. е. данной фирмы, и справочные реквизиты покупателя однозначно определены своими идентификаторами. Количество каждого товара и сумма за него определяются составным идентификатором — номером счета и кодом товара.
Часть III. Разработка приложения пользователя
680
В результате анализа документа "Счет на оплату товара" выделяются два новых информационных объекта (табл. 17.6).
Поставщик Код Сч.№ Отправитель
СЧЕТ № Да га Всего
Получатель Коя
Расчетный счет Банк Корр. счет №
i
Дата отправки Накладная
Предмет счета Наименование товара
Код
Отметка об оплате
Шифр
Цена с НДС
Сумма
Количество
ИТОГО в том числе НДС ИТОГО без НДС
Всего к оплате: В т.ч. НДС:
Рис. 17.10. Фома документа "Счет на оплату товара"
Таблица 17.6. Информационный объект по документу "Счетна оплату товара' Реквизиты ИО
Признак ключа, индекса
ИмяИО
ном_сч
Ключ уникальный
СЧЕТ ОПЛ
Глава 17. Пример практического приложения в сфере торговли
681
Таблица 17,6 (окончание) Реквизиты ИО
Признак ключа, индекса
ИмяИО
Ключ
СП СЧЕТА
ДАТА^СЧ
код_пок НОМЕР_РСЧФ СУММА_ВСЕГО НДС_БСЕГО ОПЛАЧЕНО ДАТА_ОПЛ НОМ СЧ
код_т
составной уникальный
кол СУММА_с_НДС
Выписка из банка Учет поступления денежных средств (получение) за отгруженный товар и снятия их со счета (выплата) за купленный товар осуществляется на основе данных документа "Выписка из банка", подтверждающих фактическое прохождение денег по расчетному счету фирмы. Документ используется для учета движения денежных средств и анализа оплаты за товар. Выписка при вводе в базе данных получает порядковый номер, который является ее уникальным идентификатором, однозначно определяющим дату ВЫПИСКИ, сумму всего выплачено, сумму всего получено.
Каждая операция по приходу или расходу денежных средств определяется номером выписки и номером строки. Описательные реквизиты по операции включают такие реквизиты, как вид движения по расчетному счету (поступление или выплата), номер и дата платежного документа плательщика, документ — основание платежа, идентификатор покупателя или поставщика, сумма платежа (приход или расход), ставка НДС (для поступлений). В результате анализа документа "Выписка из банка" выделяются два новых информационных объекта (табл. 17.7).
Часть III. Разработка приложения пользователя
682
Таблица 17.7. Информационные объекты по документу "Выписка из банка" Реквизиты ИО
Признак ключа, индекса
ИмяИО
ном_вып
Ключ уникальный
ВЫПИСКА
Ключ составной уникаль-
движ_опл
КОД_Ф ДАТА_ВЫП ВСЕГО_ПОЛУЧ ВСЕГО_ВЫПЛ
ном_вып НОМ СТР
ный
вид_движ код_к ном_пл_док ДАТА_ПЛ__ДОК
док_осн СУММА_ПЛ СТАВКА НДС
Платежное поручение Для оплаты полученного от поставщика товара фирмой выписывается платежное поручение банку (ПП), форма которого представлена на рис. 17.11, Фактический перевод денежных средств со счета фирмы на расчетный счет поставщика подтверждает выписка из банка. Номер платежного поручения присваивается данной фирмой (в данном случае покупателем) и потому является уникальным общим идентификатором ПП. От этого номера функционально полно зависят реквизиты дата ПП, вид платежа, идентификаторы получателя и плательщика, срок платежа, назначение платежа, документ-основание (счет, счет-фактура и т. п.), сумма, в том числе НДС. Описательные реквизиты поставщика (получателя платежа) однозначно определяются его идентификатором. Аналогично описательные реквизиты фирмы (плательщика) однозначно определяются своим идентификатором. Таким образом, выделяется один новый информационный объект с уникальным КЛЮЧОМ — номер платежного поручения (табл. 17.8).
Глава 17. Пример практического приложения в сфере торговли
ПЛАТЕЖНОЕ ПОРУЧЕНИЕ №
Дата
683
Вид платежа
Сумма прописью Сумма
ИНН
Плательщик Сч. № БИК
Банк плательщика
Сч. № БИК
Банк получателя
Сч. № Сч. №
ИНН
Вид. оп.
Получатель
! ;. ;
Код
01
Срок плат. Очер. плат Рез. поле
Назначение платежа, наименование товара, выполненных работ, оказанных услуг №Пз и даты товарных документов, договоров, НДС
Рис. 17.11. Форма документа "Платежное поручение"
Таблица 17.8. Информационный объект по документу "Платежное поручение" Реквизиты ИО
Признак ключа, индекса
ИмяИО
ном_пп
Ключ уникальный
ПЛ ПОРУЧ
ДАТА ПП КОД ПОСТ КОД
Ф
док_осн ВИД ПЛАТ СРОК_ПЛ НАЗН_ПЛ СУММА_ПП
В тч НДС
,
684
Часть III. Разработка приложения пользователя
Структура базы данных приложения При определении связей выделенных информационных объектов (ИО) учитываются сведения из описания приложения, семантика ИО и их идентификация. Отобразим на рисунке выделенные информационные объекты с указанием ключей и связей между объектами. Заметим, что поскольку были выделены объекты, отвечающие требованиям нормализации, то установлены связи с отношением типа один-ко-многим. В каждой такой связи главный объект связан по уникальному ключу с подчиненным объектом. Объекты СКЛАД и ТОВАР связаны много-многозначными отношениями, поэтому здесь объект ЗАПАС товара на складе выполняет роль объекта-связки, с которым ТОВАР и СКЛАД имеют одно-многозначные отношения. Объект ЗАПАС имеет соответственно составной идентификатор из кода склада и кода товара, что позволит размещать в нем расчетную величину запаса товара на соответствующем складе. На рис. 17.12 представлено графическое изображение ИЛМ (информационно-логической модели данных) "Покупка-продажа товаров".
Рис. 17.12. Информационно-логическая модель данных приложения "Покупка-продажа товаров"
Глава 17. Прим_е_р_практического приложения в сфере торговли
685
Каждый информационный объект (ИО) этой модели отвечает требованиям нормализации данных: П содержит уникальный ключ; П все его описательные реквизиты взаимно независимы; П каждый описательный реквизит функционально полно зависит от его ключа; О каждый описательный реквизит зависит от ключа нетранзитивно.
Замечание На схеме ИЛМ для каждого ИО показаны поля, образующие ключ таблицы (выделены жирным шрифтом), и внешние ключи, по которым подчиненные таблицы связаны с главными таблицами.
Все связи представленной модели между ИО характеризуются отношениями типа 1:М. Информационные объекты размещены в соответствии с их взаимной подчиненностью: главный объект каждой связи типа один-ко-многим (со стороны "один") размещен выше, чем подчиненный объект связи (со стороны "многие"). 1
,
СКЛАД
ТОВАР
.— КОД_ОСЛ
— код_тов вид_т ндим_тсе
в-щ_скл ЧАИМ_СК ОТВ_ЛИЦС
Р НАКЛАД
*- код_ош
— юд пок ДАТА
док_оск
~1
СТАВКА НДС
НОМЕ=_РСЧФ СУ1^МА_ВСЕГС
— КОД..Т06 НО№1_ЭАПА'
ТЕК.ЗАПДС
КОД_Т КОЛ СУММА с НД|
СЧФАКТ ПОК
НСМ СФП
ДАТА
СУММА_Б_НД СП»-1А_НДС СУММА_ЗТП
СП СЧЕТА
- ном сч
1— код_скп
кол
НДС.ВСЕГО ОПЛАЧЕНО ДАТА_ОПЛ
— код_асл
Всего С НДС
1ЮМ_РНАКЛ
*ч
ДАТА 0-< КОД_Ф
есега_беэ_НД всего_ндс
СП PHAKJ]
СЧЕТ_ОПЛ 1 V-л м
ЦЕНА_ОПТ ЦЕНВ ЗАКУП1
ЗАПАС
1ЮМ_РНЛКЛ
ФИРМА
КОНТТ АГЕНТ1
БАНК
КОД^ФИЧЧЫ ИШ_Ф ДйТДР НОМ^РСЧ
ИД_ЕАНИА ИНД_БАНКА *ДРЕС_БАНКА КОР_СЧ БИК ЕцДНКА
ВЫПИСКА
ДАТА ВЬ'П
ДАТА ПП • ,', ! КОД.Ф ДОК_ОСН
1Р_НАЬЛАД
код_пос г 1
вид^плдт
код скл
НАЗН_ПЛ
ном_пл_сок ДДТА_ПП_ДОК СУМГ«1А_ПЛ
стАВкд.нас
ДАТА ДДТА_ПР
СУММА m
HCW_CTP ВИД №ИЖ
НСМ_РО-
ИОМ_ГИАКЛ 1
ДВИЖ^ОПЛ
иом_вьл
НАПМ_К ОКСНХ
скпо
ПЛ ПОРУЧ
КОД_Ф 6СЕГО_ПСЛУЧ ВСЕГО^ВЫПП
КОД_К
B_i4_HflC
ДОК ОСИ
—
СЧ*АКГ_ПОСТ
Всего бе! ндс Bcera.HQC
НСМ_СФПОСТ
зсего_с_1-дс
кодлост
-
СП ПРНАКЛ
ДАТД
ДДТА_ПОЛУ^,
НОМ_Г>1АКЛ I
док. ос н СУММА_БЕЗ_НДС
ДАТА.ОПЛ
НДС ВСЕГО_^_НДС
докроен
код_псхп- | код_т -соп_го1уч
Сумма без НДС Сучма НДС Всего с НДС
СУММА _fb_HflC СУММА_НДС СУГ/.М^.Г'ЮЛУ^
Рис. 17.13. Логическая структура реляционной базы данных приложения "По куп ка-продажа товаров"
ggg
Часть III. Разработка приложения пользователя
Заметим, что в уже рассмотренном примере наглядное графическое отображение модели затруднено. На практике число объектов модели данных приложения может быть значительно больше, что снижает наглядность графического представления модели. Для получения логической структуры реляционной базы данных на основе построенной ИЛМ достаточно каждый ИО представить соответствующей реляционной таблицей, структура которой будет соответствовать реквизитному составу ИО. Уникальный (первичный) ключ таблицы будет образован реквизитами, образующими ключ ИО. Каждая од но-многозначная связь между ИО должна быть представлена связью между соответствующими таблицами базы данных по уникальному ключу главной таблицы в связи. На схеме логической структуры базы данных (рис. 17.13) каждая таблица представлена в виде списка полей, из которых выделены образующие ключ. На этой схеме отображены также логические связи между таблицами, установленные по полям, которые должны быть одинаково определены в связываемых таблицах.
Разработка интерфейса приложения "Покупка-продажа товаров" Рассмотрим разработку интерфейса компонента приложения "Покупкапродажа товаров", обеспечивающего технологию работы с взаимосвязанными документами приложения при их подготовке и вводе в базу данных. В качестве примера выберем компонент приложения по подготовке и вводу документов отгрузки товаров.
Технология подготовки документов по отгрузке товаров Подготовка документов, сопровождающих отгрузку (отпуск) товаров со складов фирмы (поставщика) осуществляется по технологии, для которой нужна соответствующая компьютерная поддержка. Технология подготовки, ввода в БД, актуализации БД при проводке документов, с выполнением необходимых расчетов, печати документов и обеспечение взаимосвязи документов требует разработки соответствующего компонента приложения. Основой приложения является комплекс интерфейсов, обеспечивающих названную технологию. Для построения необходимых интерфейсов приложения могут использоваться инструменты конструирования форм Access. Ниже на примере анализируются особенности разработки взаимосвязанных форм, образующих интерфейс рассматриваемого компонента приложения.
Глава 17. Пример практического приложения в сфере торговли
.
687
При отпуске товаров покупателю на складе осушествляется подготовка и печать новой расходной накладной (РН). Подготовленные расходные накладные на отпуск товаров вводятся и сохраняются в БД. Перечень сохраненных накладных может быть представлен журналом расходных накладных. После того как расходная накладная полностью оформлена, выполняется проводка документа. При проводке документа "Расходная накладная" должен актуализироваться расчетный остаток товаров на складе, представленных в текущей РН. При полной реализации приложения с включением компонента отслеживания оплат за поставленные и купленные товары проверяется состояние взаиморасчетов с покупателем. При отпуске товаров расходная накладная может оформляться на основе сохраненного в базе данных счета, ранее выписанного фирмой и оплаченного покупателем. Счет на оплату товаров на практике фиксируется в журнале счетов. В этом случае многие данные при подготовке расходной накладной заимствуются из счета и, возможно, корректируются при записи в накладную. Подготовленная накладная должна быть сохранена в БД и распечатана по соответствующей форме для сопровождения отпускаемого товара.
Замечание В случае резервирования товаров по счету при выписке расходной накладной на основании документа "Счет", кроме обычного учета изменения остатков товаров и взаиморасчетов с покупателем, может производиться снятие проданных товаров с резервирования.
После создания, ввода в базу данных новой расходной накладной и ее проведения предусматривается формирование соответствующего этой накладной счета- фактуры.
Подготовка новой расходной накладной Для обеспечения технологии подготовки новых РН, их ввода, просмотра ранее введенных документов, доступа для подготовки РН к данным документа-основания ("Счет"), печати и ввода соответствующего счета-фактуры необходим интерфейс соответствующего компонента приложения. Рассмотрим пример построения такого интерфейса на основе инструментов конструирования форм Access. В процессе подготовки новой РН на компьютере на основе данных из БД рассматриваемого приложения требуется выполнить следующие действия: I. В пустой форме РН в общей части документа нужно: • выбрать склад фирмы, откуда отпускается товар; • отобразить реквизиты фирмы-поставщика; •
ввести очередной по порядку номер счета;
668
Часть III. Разработка приложения пользователя
• выбрать покупателя из справочника контрагентов в БД; • получить итоговые суммы по РН и возможность их сохранить в соответствующих таблицах БД. 2. При формировании строки спецификации РН на основе заявки покупателя или спецификации счета следует: • выбрать нужный товар из списка по справочнику товаров. При этом в строке формы отображаются реквизиты из справочника товаров: Наименование, Единица измерения, Ставка НДС;
• ввести количество отпускаемого товара; • осуществить автоматический расчет для получения сумм за товары по строкам РН. 3. После заполнения РН данными необходимо: • сохранить (ввести) документ "Расходная накладная"; • распечатать документ "Расходная накладная" на основе введенных данных в соответствии со стандартным бланком документа (см. рис. 17.8) с помощью кнопки Печать; •
просмотреть для контроля текущий остаток по товарам, представленным в формируемой РН;
• провести документ "Расходная накладная", обновляя расчетный запас соответствующих товаров. Рассмотренные требования интерфейса РН могут быть обеспечены, если при конструировании формы предусмотреть следующие элементы: 3 поля со списком: СКЛАД, КОНТРАГЕНТ, ТОВАР; П по умолчанию (для нового документа) ввод текущей даты; CJ автоматические вычисления в полях сумм с сохранением в БД с помощью соответствующих процедур VBA; П кнопки управления: Печать (вывод отчета РН), Вперед, Назад, Закрыть, Новый документ (добавление записи), Открыть источник (счет), Ввести счет-фактуру; П при наличии документа-основания ("Счет") копирование строк спецификации источника в новую РН и их корректировка; О возможность формирования счета-фактуры по открытой (текущей) РН.
Таблицы — источники основной и подчиненной частей формы РН На рис. 17.14 показана подсхема базы данных приложения. Схема данных этой базы была приведена ранее на рис. 17.13. Подсхема включает таблицы, на основе которых строится форма для подготовки документов по отгрузке.
Глава 17. Пример практического приложения в сфере торговли
689
Рис. 17.14. Подсхема формы-интерфейса работы с расходной накладной и отчета (печать РН) IP1
Расходная накладная :
* Загопоеок форны * Область данных
I] •* Заголовок форпы Eji. нзм| J
л
•* Область данных HAHMJCB
Ueija
Ставка (НДС К^лк
UEHAjmjCTABKA.HflC^
j НДС
ШЛ
]СЫММА_Н, ]СУММА,0ТП
* Примечание формы ЙТ"б11о"йёэ> ДС"1
ИТОГЗ , =5ит([ЦЕНА_ОЛ'
НДС:| [Всего'нДС ... 'Всего j НДСГ| [Всего^с_НДС ]
.. .
I
. . . I
.
}
' ' Г
. Т-
. .1.
..)...
j Рис. 17.15. Форма для подготовки документов отгрузки в режиме конструктора
690
Часть III. Разработка приложения пользователя
Форма интерфейса, отвечающего сформулированным выше требованиям, в режиме конструктора показана на рис. 17.15.
Вычисление и сохранение итоговых сумм Для того чтобы сумма по товару в строке спецификации РН рассчитывалась и сохранялась в соответствующей таблице базы данных (СП_РНАКЛ), можно подготовить процедуру обработки события по полю количества. Для расчета суммы и записи в поле СУММА_ОТП запишем процедуру обработки события После обновления (AfterUpdate) по полю кол: Private Sub КОЛ _AfterUpdate() СУММА_ОТП=ЦЕНА_ОПТ * КОЛ End Sub
Этот расчет необходимо выполнить в процедуре, потому что, если в форме предусмотреть просто вычисляемое поле, его значение нельзя сохранить в таблице БД. Для записи этой процедуры надо вызвать окно свойств поля кол. На вкладке События в строке После обновления следует выбрать значение Процедура обработки события. Затем нужно вызвать построитель и записать выражение: СУММА_ОТП=ЦЕНА_ОПТ*КОЛ
в соответствующем модуле процедуры VBA: Private Sub КОЛ AfterUpdate(} выражение
End Sub
Для получения общей суммы по РН можно предусмотреть вычисляемое поле, которое должно быть включено в область примечания подчиненной части формы. Для сохранения результата суммирования необходимо подготовить процедуру обновления поля суммы в таблице Р_НАКЛАДНАЯ из вычисляемого поля. Для расчета итоговой суммы по РН в области примечания подчиненной формы (без сохранения в БД) создадим вычисляемое поле (с именем ITOGO), не связанное с БД. Источником вычисляемого поля должно быть выражение, которое записывается вместо имени в поле: =Sum([ЦЕНА_ОПТ]*[КОЛ])
Для записи вычисленного значения в связанное с таблицей поле всего_с_ ндс общей части формы и его сохранения в соответствующем поле таблицы Р_НАКЛАДНАЯ необходимо дополнить ранее приведенную процедуру выражением: [Гоггп_имя основной части формы] . Всего_с_НДС=1ТОСО
Глава 17. Пример практического приложения в сфере торговли
691
Кроме того, в разделе примечания подчиненной формы создается вычисляемое поле итого без ндс с записанным в нем выражением: =Sum([ЦЕНА_ОПТ]*[КОЛ]/(!+[СТАВКА_НДС]))
и вычисляемое поле итого ндс с записанным в него выражением: =Sum([СТАВКА_ДЦС]*[ЦЕНА_ОПТ]*[КОЛ]/(1+[СТАВКА_НДС]})
Для сохранения вычисленных в подчиненной форме суммарных значений в соответствующих полях таблицы Р_НАКЛАДНАЯ при их отображении в основной части формы (ниже подчиненной формы) написаны процедуры. Эти процедуры присваивают значения из вычисляемых полей полям в основной форме РН по событиям После обновления и После щелчка на поле количества (кол) в спецификации. Все названные выше процедуры представлены в окне редактора модуля VBA (рис. 17.16).
tools 'f ,
Add-Ins
J^jndow
\jeAp
JJ
Aft*iUpdate
КОЛ
Option Compare Database Private 5Ш Kon_ArterVpdate ( ) СУМНА^ОТП - ЦЕНА_ОПТ * КОЛ СУММА^ОТП = [СТАВКА_НДС] * [ЦЕНА_ОПТ]
* [КОЛ]
/
(1
[СТА8КА_НДС]
[Р"огт__Расходная накладная] .Всего_е__НДС = Поле23 [Гогт^Расходная накладная] -Бсего_беэ_НДС - Поле25 [Гоггп^Расходная накладная] .Всего_НДС * Поле27 End Sub Private Sub КОЛ_С.Иск.О СУННА^ОТП - ЦЕНА_ОПТ * КОЛ СУИМА^НДС = [СТАВКА^НДС] *
[ЦЕНА_ОПТ]
/
(1 + [СТАВКА_НДС])
[Рогт^Расходная накладная].Всего_с_НДС * Поле2Э
* [KOJ
[Form Расходная накладная].Всего_без_НДС = Поле25 [Form Расходная накладная].Всего_НДС = Поле27 End Sub
Рис. 17.16. Процедуры обработки событий в окне редактора модуля VBA
По событию После щелчка на поле всего_с_ндс можно тоже предусмотреть обновление поля суммы в общей части формы; Private Sub Всего_с_НДС_С11сК() [Еогта_Расходная накладная].Всего_с_НДС=[Рогт__СП_РНАКЛ],Поле23 /
End Sub
Часть III. Разработка приложения пользователя
692
На рис. 17.17 представлена форма, соответствующая макету на рис. 17.15. с вычисленными значениями в подчиненной части и обновленными итоговыми полями. Ш РЛАКЛЛДНАЯ
•+ ЗМВ
Ф нрма
^
<-• дрвс
]ОПТТОРГ
ИНН
|969736429473
Склад
PACXD ДНАЯ Покупатель Основание Счет N Наименование тов ^ Монитор 17LG
[Главный
Код:
[Центральный, 33 НАКЛАДНАЯ
N |0001
Компьютер маркет
nun
_ij
j
2510.2003
_-J ИНН^К [778987651111
_.J от | 15.10.2003
Код Ед. иэм. 001 jj| шт^
сп:
_^J
J01
ОтквытьСчег
j
Цена Ставка НДС Количество НДС 6587.00р. 2Q% 1D ЮЭ73,ЗЗр.
Сумма 65870.00р
:D-RDM Panasonic IDF
ij05 _J| штука
1153,00р.
205:
20
3843,33р.
23060,00р.
СканерАсе!
008 jj| штука
2338,00р
202
1
383,67р.
2333,00р.
*
3
*l ИТОГО des НДС
7SQ56,6?
ИТОГО НДС
ИТОГО
91268.00
152П.ЭЗ
Запись; H| -UJ Всего беа НДС: | Отпустил
76056,S7p.
Всего НДС: | 15211,33р.
[Йёа мов т£
Всего с НДС
Новая накладная
;
,
па складе |
|
91 2Б8.00р.
Проводка расхода
| ,
• ВводСч-Ф
Получил
Сохранить}
Печать
Закрыть
!
!
Запись: 14 | ^ | [
1
»lnl>»Un
Рис. 17.17. Форма для подготовки документов отгрузки с вычисляемыми полями в подчиненной части
Просмотр текущих остатков для товаров накладной на складах Для оценки возможности отпуска товаров по накладной со склада перед вводом в базу предусматривается проверка текущих запасов товаров, внесенных в спецификацию накладной, и прогноз по остаткам после отпуска товаров. Для такой проверки предусмотрена кнопка На складе (см. рис. 17.17), по которой выполняется запрос, показывающий текущие запасы из базы данных для товаров, внесенных в спецификацию. Запрос для просмотра текущих запасов товаров приведен в режиме конструктора на рис. 17.18. Для получения данных по остаткам только для товаров текущего номера накладной в запросе предусмотрено условие отбора по номеру НОМ_РНАКЛ: • [ F o r m s ] ! [ Р а с х о д н а я н а к л а д н а я ] ! [ И О М РНАКЛ]
Глава 17. Пример практического приложения в сфере торговли
ям
СГ РпАКЛ Группировка
-
КОД.СКЛ ;,(,,ц
чНИМ Г ОБ
НАИМ о;
СЛ РНДКП
ТОВАР
СКПАД
Гзупчировк
Sur,
1
0
0
[г/ППЦгЖг
0
-- *
в
и
693
MOM РНИКЛ СП РНйКЛ
ТЕ< ЗАПЬС ЗАГАС Гр. -пиром
[р^ппиои^а
у
"р>ппнрои а
Е
0
[Forrr«]i [Расходная Hwnsinsaji[HOMJ=HuKn]
>,
<Mf~
Рис. 17.18. Запрос для просмотра текущих запасов товаров
ззш
> Фирма
(ОПТТОРГ
Адрес
ИН И
|Э6Э73'842Эа73
Склад
РАСХОДНАЯ НАКЛАДНАЯ Покупатель Основание Счет N
| Главный
(Компьюте эмар«.ет J111111
г
N |0001
_iJ
от:
|
25.102001
_J ИНН_К |778Э37651111
от | 15.10.2001
ОТКРЫТЬ Счет
Наименование тов Код Ед иэм. Цена Ставка НДС Количество НДС t> | Монитор 17LG | 001 _^J[ штука 6587.00р [ 2 0 2 10 10 378,33р. |:D-ROM Panasonic IDE |
JJ
Км:
Ц енг р .а л ь м ый, 33
СкднерАсег
005 _J| штука
1 153,00р. j
OOS jj| штука . 2 338.00р. j
202
20
|3S43,33p.
23 060,00р.
202
1
399,67р.
2 338,00р.
BE®
на складе : wnpoc на выборку КОД.СКЛ
Сумма 65 870,00р.
НАИМ_ТОВ | НАИМ_СК|НОМ_РНАПЕК_ЗАПАС| будетзапас
Q •
10 Монитор 17LG Главный
0001
14
20 CD-ROM Panas Главный
OD01
105 23"
1 СкзнерАсаг
Тлавный
00011_
\ Всего йез НДС: | Отпустил Получил
76 056,67р • Всего НДС: ) 15211,33р. \Bcero с НДС
91 26В.ООр
|Иеансе Т.С. Ввод Сч-Ф
Сохранить
Печатв
Запись: J<JT_1J |
Рис. 17.19. Результат просмотра и прогноз текущих остатков для подготавливаемой расходной накладной
4! К] 221
л.
Часть 1П. Разработка приложения пользователя
694
Внимание Запрос выполняется только при открытой форме.
Для прогноза остатков по каждому из товаров из накладной в запросе предусмотрено вычисление будущих остатков по формуле [ТЕК_ЗАПАС]-[кол], где вычитается количество отпускаемого, взятое из поля кол в накладной. Результат просмотра и прогноз текущих остатков для подготавливаемой расходной накладной показаны на рис. 17.19.
Расчет и обновление текущих остатков товаров накладной (проводка) После ввода данных накладной в базе проводится расчет фактических остатков и текущий остаток в БД по товарам, представленным в новой накладной, актуализируется. Такое обновление текущих остатков можно осуществить с помощью кнопки Проводка расхода, по которой выполняется соответствующий макрос (нов_запас). В макросе выполняется сначала запрос расчет ост (рис. 17.20) на создание таблицы с результатами расчета текущих запасов товаров, внесенных В спецификацию. Затем выполняется запрос обновление запаса (см. рис. 17.21) на обновление текущих запасов в соответствующей таблице ЗАПАС.
I;1 pdi.4ei ш f : i.ni|ii)i и,. i:iii,i.j(iii.> таблицы
Гр/ггцу D Вывод ча яфя. Условие отбора
Рис. 17.20. Запрос на создание таблицы с результатами расчета текущих запасов товаров, внесенных в спецификацию
Глава 17. Пример практического приложения в сфере торговли
695
- л
Поле: ТЕК_ЗАПАС Имя таблицы: ЗАПАС Обновление; [hoB_sanac] Условие отбора:
•v
<
'
!>
Рис. 17.21. Запрос на обновление текущих запасов в таблице ЗАПАС
После этого выполняется запрос после выдачи (рис. 17.22) на выборку данных по обновленным текущим запасам для товаров, отпущенных по новой расходной накладной. после вмпачи : запрос на выборку
Рис. 17.22. Запрос на выборку данных по обновленным текущим запасам для товаров, отпущенных по новой расходной накладной
Результат проводки расходов товаров по новой РН представлен на рис. 17.23.
Часть III. Разработка приложения пользователя
696
|ОПТТОРГ
Фирма
ИНН
369733429473
Центральный.ЭЗ
Адрес
РАСХОДНАЯ Покупатель
[Компьютер маркег
КОД_Т
| КОД_СКЛ |
-|
Ш1
ИНН_К |77898765111
от 1 15.10.200l" Код 001
D-ROM Panasonic IDE
[Главный
Ксс: НАКЛАДНАЯ
Основание Счет N Наименование тов
Склад
Цена
Ед. HSM. I
штука
6587,00р
Открыть Счет Ставка НДС Количество НДС 10 ЮЭ73,ЗЗр.
005
3 843,33р.
отпущено
Di
НАИМ_ТОВ
НАИМ_СК | НОМ_РНАКЛ |ТЕК_ЗАПАС
10 Монитдр 17LG Главный
0001
20 CD-ROM Рапа; Главный
0001
1.СканерАсег
Б5В70.00р 23 ОбО.ООр
Главный
0001
1 И Hi'..•_] из 3 Всего без НДС; Г Отпустил
^ 056,67р.
Всего НДС: | 15211,33р.
Всего с НДС \ |
Hoeaa накладная
Иванов Т С.
ВводСч-Ф
Получил
На складе
Сохранить
91 269,00р.
О доводка расхода Печать
Закрьлъ
Рис. 17.23. Результат проводки расходов товаров по новой расходной накладной
Подготовка документа "Расходная накладная" на основе оплаченного счета Расходная накладная может подготавливаться на основе сохраненного в базе данных соответствующего счета. В этом случае многие данные заимствуются из ранее сохраненного счета и, возможно, корректируются при записи в расходную накладную. На основании счета может быть выписано несколько накладных, если накладные выписываются с разных складов.
Замечание
>
Счета должны быть доступны с разных складов, очевидно, что отпущенный товар должен быть помечен в счете.
Глава 17. Пример практического приложения в сфере торговли
697
Интерфейс документа "Счет" Для создания нового счета предусматривается такая форма, где в основной части отображаются реквизиты фирмы, осуществляется ввод очередного по порядку номера счета, выбор покупателя из справочника контрагентов в БД, ввод по умолчанию для нового счета текущей даты (задается в свойствах таблицы источника). При формировании строки спецификации счета осуществляется выбор нужного товара. При этом отображаются справочные реквизиты из справочника товаров: наименование, единица измерения. Затем вводится количество товара на оплату. На рис. 17.24 и 17.25 показана форма документа "Счет" в режиме конструктора и в режиме формы соответственно.
fc СЧЕТ_ОПЛ : форма -
•-•; 1 'i
-
•
-
> i•i • i•г• i•з•
-
—
* Область д ИНЫХ
рщ.*
.
< |колJ10K
окупа гель
а
• i .1 • i •г• i
*
-
5
-
ПГ" |ном_ C4^J d
-"•"--
—
BOW
и^^и
Нанм.|товар|а
НДС || |Коя^честв(||' | J_ Сум)иа
1 * Область данны С <ОД_Т
>янк- л.^АНК ФИРМЫ ** ! |ДАТА СЧ i
• 3 • i • 4 • > ' 5 > i • $ • i • 7 ' i • 3 ' i • 9 • i • 10 ' i • 11 ' i • 12 • i • !3 • . • 14 - . ^ •
1 * Заголовок формы
_lJ|KQJ3_T |ЕИ_БАЗ |ЦЕНА_ОП |СТА8КА_НДС
КОЛ
|СУММА_с_НДС
II * Примечание фориь
-
ЕЁ
j.Sum([LIEHA_OnT
эго
-_J
3 -
"1.
Новый Счет
4 flpt печание формы
Сохранить
i
i
си» Й.ВСЕГ 3
:ЕГО|"[
'НДС 1СЕГО" J-IQJ ЛМА.В
-1
-"
[Рк четиы 1 счет НОМ_РСЧ_Ф
3
;СЧЕ
7
'
* Заголовок формы
|*И1 MA
е
-
• 1 • i • Б • i • 6 • i > 7 • i • 8 • i • 9 • i > tO • i • 11 > i > 12 • i • 13 • i ' 14 • i • !Б • i • h_^,
jfCblMMA ВСЕГО
Выход
Печать
i
.
.
.
i
i
.
i
i
1
Рис. 17.24. Форма документа "Счет" в режиме конструктора
,1 >]
Часть III. Разработка приложения пользователя
698
to СЧЕТ„ОПЛ ь
E0®
+1 "ч ФИРМА
[ОППОРГ
jj
Расчетнь и счет [76358509763264536765 Банк: СЧЕТЫ
Покупатель
(Компьютер маркет
Наим товара Код* ^ MoHnrop17LE_iJ|001
|111111
^_
JMocr
от
|
15.10.2001
.jj
Ед. изм: Цена Ставка НДС Количество' [6587.00р. [ ' LI, [штука 10]
Счмма 65870.00р.
JLJ [002
[штука
| ЗбЭ.ООр. [
20%
10 1
CD-RDM Pana:_d|Q05
[штука
[1 153,00р. |
2(К
20 | 23 060,00р.
FDD 3,5 СканерАсег
*
_ij |008
[штука
1
-ill
[2 эза.оор. [ 1
м.
I
1
,
Новый Счет j
Запись: H H J |
|
Э4898
--
Ц ^ | И i>*| Hi -К
НДС ВСЕГО |
|
3630,00р.
1 ] г зза.оор. | Итого
Запись: И | * ||
*
1581Бр.
Сиранигь
СУММАВСЕГО
Печать
|
94896р.
;
Г > J ^Ll^* из 5
Рис. 17.25. Документ "Счет" — источник данных для расходной накладной (см. рис. 17.17}
В форме для счета предусмотрены: G поля со списком — КОНТРАГЕНТ, ТОВАР; П кнопки управления: Печать (вывод отчета "Счет"), Вперед, Назад, Закрыть, Новый документ (добавление записи), Сохранить, Отмена (для отказа от сохранения изменений). Кроме того, в форме предусматриваются расчетные поля для получения сумм по строкам спецификации счета и итоговых сумм по счету. Для того чтобы сумма по товару в строке сохранялась в соответствующей таблице базы данных, нужно подготовить процедуру для события После обновления по полю количество. Процедура для события После обновления по полю количество (кол), обеспечивающая расчет суммы в строке спецификации СУММА_С_НДС с сохранением в таблице СП__СЧЕТА, приведена на рис. 17.26. Для получения общей суммы по счету предусмотрено вычисляемое поле итого (поле 20), которое включено в область примечания подчиненной части формы. В поле осуществляется расчет суммы: -SUM(ЦЕНА ОПТ*КОЛ)
Глава 17. Пример практического приложения в сфере торговли
699
Microsoft Visual Basic - ТОРГОВЛЯ 2004 Edit
y\ew
;nsert
debug
gun - Tods'. fidd-Ins • 5#jndo«
« ТОРГОВЛЯ„2004 Formj:n_C4ETA подчине иная форма (Code)
Private Sub кол_А£cecUpdate() СУННА_с_НДС - ЦЕНА_ОПТ * КОЛ End Sub
Рис. 17.26. Процедура, обеспечивающая расчет суммы в строке счета с сохранением результата в таблице
Для сохранения этой расчетной суммы в таблице СЧЕТ_ОПЛ предусмотрим в ранее приведенной процедуре (см. рис. 17.26) присвоение полю СУММА^ВСЕГО основной части формы, связанному с таблицей СЧЕТ_ОПЛ, значения из вычисляемого поля итого (поле 20). Отредактированная процедура показана на рис. 17.27. Microsoft Visual Basic -ТОРГОВЛЯ 2004
м ТОРГОВЛЯ_2004 - Гогт_СП„СЧЕТА подчиненная форма (Code)
Privace Sub KOJI_Clictef) СУММА_с_НДС - ЦЕНА_ОПТ * КОЛ [Гогт_СЧЕТ_ОПЛ].СУННА_ВСЕГО = End Sub
Рис. 17.27. Процедура расчета сумм по строкам счета и сохранения итоговой суммы Microsoft Visual Basic ТОРГОВЛЯ 2004
м ТОРГОВЛЯ_2004 Рогт_СЧЕТ_СПЛ (CodeJ СУММА ВСЕГО
Private Sub СУИНА_ВСЕГО_С11е*[) |[ГОС1П_СЧЕТ_ОПЛ] .СУНМА_ВСЕГО = [Гогм_СП__СЧЕТА подчиненная форма] .Поле20 End Sub
Рис. 17.28. Процедура присвоения значения из вычисляемого поля для события После щелчка по полю СУММА ВСЕГО
Часть ///. Разработка приложения пользователя
700
Для события После щелчка по полю СУММА_ВСЕГО также- можно предусмотреть процедуру (рис. 17.28) присвоения ему значения из вычисляемого поля итого (поле 20).
Журнал счетов Рассмотрим формирование журнала на примере документа "Счет", стандартный бланк которого был приведен на рис. 17.10, а форма - на рис. 17.25. Форму журнала счетов (рис. 17.29) создадим мастером на основе таблиц сч_опл и КОНТРАГЕНТ. Предусмотрим в форме кнопку Открыть счет для открытия формы счета из соответствующей строки журнала счетов. te Журнал счетов Ном, счнг.
Дата
rn't'l 1
|STCJOC1 {Коыгьютер маркет
Покупатель
ИНН покупатедя
(511.3001 [Компьютер маркет
J778987S51111
ЭЗЗЗЭЗ
|tt [H.20Q1 (Компьютер маркег
j778987651111
5ЭЭЭЗЭ
|5ЖгСШ {Компьютер марк.ет
[778987651111
33234 "
fl 01.2002 |Мон.<гар
С^ммд всего
| 7 7 8 9 8 7 6 5 П 1 1 9 J В98р
Дата оплат» Оплачено:
НДС [
15816рГ f 4627р.
23 450р.
ЗЭОвр.
14Ир
237р. :
Затсь: И
-4
Рис. 17.29. Форма журнала счетов
Создание кнопок Требуется пи отбор сведений для отображения в форме?
pj кнопка позволяет открыть форму со сведениями об определенном клиенте или сотруднике. ^Открыть форму для отобранных записей. Открыть форму и показать все записи.
Отмена
< Назад
алее
4
Готово
Рис. 17.30. Выбор параметров кнопки открытия счета из журнала
Глава 17. Пример практического приложения в сфере торговли
701
Для создания средствами мастера в форме журнала счетов кнопок для открытия счета выбирается категория Работа с формой, действие -- Открыть форму. После выбора формы СЧЕТ_ОПЛ задается вариант Открыть форму для отобранных записей. Затем устанавливается поле связи (ном__сч) формы Журнал счетов и формы Счет. Такой вариант обеспечивает при ленточном 1 режиме формы Журнал счетов возможность вставить кнопку в область данных. Это позволит открывать счет кнопкой в каждой текущей записи журнала. Выбор параметров в окне мастера кнопок показан на рис. 17.30. Далее надо указать поле, по которому устанавливается связь строки журнала и формы счета (рис. 17.31).
Создание кнопок Укажите соответствующие поля, которые следует использовать для отбора данных. Выберите поля и нажните кнопку <->, Журнал счетов:
СЧЕТ_ОПЛ:
1!ЫМЦ!1 ДА7А_СЧ
ДАТА_СЧ КОД_Ф КОД_ПОК СУММА _ВСЕГО НДС_ВСЕГО ДАТА_ОПЛ
СУММА _всего НДС_БСЕГО ДАТА_ОПЛ НДИМ_К
инн_к
Соответствующие поля: НОМ СЧ<->НОМ СЧ
Отмена
< Назад
Далее >
Готово
Рис. 17.31. Выбор полей для связи форм журнала и счета
Алгоритм подготовки расходной накладной на основе данных документа "Счет" При подготовке расходной накладной (РН) на основе данных счета, представленных в рассмотренной ранее форме (см. рис, 17.25), нужно выполнить действия, приведенные ниже. В пустой форме накладной (см. рис. 17.17), как видно на рис. 17.32, необходимо: 1. Выбрать склад, откуда отгружается товар. 2. Указать для документа-основания "Счет" его номер.
Часть ///. Разработка приложения пользователя
702
3. Открыть соответствующий документ-основание "Счет" и сформировать на основе его спецификации спецификацию РН. 4. Ввести новую расходную накладную с помощью кнопки Сохранить. 5. Распечатать расходную накладную с помощью кнопки Печать. 6. Провести документ "Расходная накладная" с помощью кнопки Проводка расхода (при условии оплаты товара). 7. Перейти к формированию документа "Счет-фактура" на отгруженные и оплаченные товары на основании данных сохраненной расходной накладной. На рис. 17.32 показаны два связанных документа: доку мент-источник "Счет" и расходная накладная с номером счета (111111), введенным в поле Основание СчетЫ.
+ММИ1
> Ф ирма А црвс
(аПТТОРГ
ИНН
(96973842Э47Э
Склад
РАСХОДНАЯ НАКЛАДНАЯ Покчлатеяь
|Компыотвр маркет
N |0001
_J
or:
25.102003
_;J ИНН_К ]77е9876511П Открыть С чет
Основание Счет Н |Ш111 " . | о т ! 15 1C 2003
»п
| Главный
^°&
1 Центральный, 33
,
Наименование тов Ко* ^д. изм. Цена Ставка НДС Количества /НДС Сумма MoHnrop17LG | 001 _J| Ыука 6Б87,ООр. | 20* 10 jljD 978,33р. ] 65870,00р.
1 0-ROM Panasonic IDE 1 СканерАсег ±1 В? СЧЕТ „ОПЛ i
COS _J| turyh^
1 153-OQp |
202 20%
COS _jj| шгака \2 338,00р. [
Щ t|
20
/3843,33р. j 23060,00р.
1
/] 389,67р | 2338.00р.
0"ВД
\ Расчстж,* счет |7Б 3585037632645 36765 Банк: jMccr
\ C4ETN Покупатель
*
|111111
jj
ст
*_ I
(Компьютер маркет
ЕМ
На им. товара Код* 1 MoHWOp17LG^J|001
1}
FDD 3.5
II
_d|002
CD-ROM Pana:jJ]Q05 СквнерАсег
Запись: 1
* 14
ись:
-Ll-I^J-J I
Ед. изм Цена Ставка НДС Количество* Сумма (штука |6Б87,ООр. | 20S 10 j Б5 870.00р. (штч^а [шт^ка
20?
10|
ЭбЗШр.
р 153,00р. |
| 363,00р. |
20Х
20 j
230GQ.OOp.
202
^J|006
[штука
[2333,ОСр. j
.zJI
I
I
I
1 |
*•
2 ЗЗВ.ООр.
1
1 К 1 И 1^1 и' 1 (Фильтр)
Рис. 17.32. Подготовка расходной накладной на основе счета
Jd
Глава 17. Пример практического приложения в сфере торговли
703
Печать расходной накладной — отчет После сохранения (ввода) новой расходной накладной она, в соответствии со стандартным бланком документа (см. рис. 17.8), должна быть выведена на печать при нажатии соответствующей кнопки Печать интерфейса компонента приложения для подготовки документов отгрузки (см. рис. 17.17). Для этого нужно сконструировать макет отчета (рис. 17.33) для вывода сохраненных данных по накладной из базы данных. Такой макет отчета готовится мастером отчетов на основе таблиц Р_НАКЛАДНАЯ, КОНТРАГЕНТ, СЧЕТ_ОПЛ, ФИРМА, СКЛАД, СП РНАКЛ, ТОВАР.
Отчет_РН : отчет
3
9 • i > 10 • i • 11 > i • 12 • i • 13 • i • 14 • i • 15
•f Область данных jIToci* 1Щ11К IHA^MJD Lm*m
[ЙЙ
f >асхо
[Попуп iienb
Йай
§ пад"] ,НАИМ_СК
[АДРЕС!:' ~~
1
18
С'1 II:
3
.Hue лека в мои то
Код
nIU
ДОК ОСИ]
г
• I ' 1 ' i ' 2 ' i ' 3 > i ' 4 ' i
| * Заголовок отчета
II ii
1
j
р
цная накл ад на)i h
J НАЙМ_К
Доку», ент-ос новлн |
И Hit*•\J>
АДРЕС_Ф
[oi
т
ИНН К
{
5 ' l ' 6 > i
И ДАТА
РдНАКЛАДНА
ДАТА СЧ
7- i •
1
J
i
• i • э • i • Ю ' » • fl • i • G • i • U • i • 14 • ^_ -
1J& .юн.]Стакха .Ж . №? _JI<олнч*СТВФ 0
l^?11*
—
j •* Область данных
•i"
EH _ЕАЗ
6д"*]НАЙ 1 TUII
УСТАВ^НДС
|ЦЕШ _ОП'| !
сол
I УМУ с сего;!
Oiny тил
j
JOTBJIVILIO
Полу
3
tРИО ПО ЛУЧ
НМЛ
1
J j^MjaA.bi]
i—
рсёго_с_НДС
! 1
Рис. 17.33. Макет отчета для распечатки расходной накладной
Мастер отчетов формирует запрос -источник для основной части формы. Сохраненный запрос -источник (Запрос!) представлен на рис. 17.34.
Часть III. Разработка приложения пользователя
704 1
к Запрос! ; построитель ипросо»
Поле Иня таблииы Сортнрсека Вывод на >>фаи Условие отбора
р НАКЛАДНАЯ
ФИРМА.'
Р НАКЛАДНАЯ
ФИРМА
0 <
СКЛАД.» СКЛАД
и
КОНТРАГЕНТ КОНТРАГЕНТ
ном РНАКЛ
ДАТА СН СЧЕТ СЧЛ
С 4ДКПДДНДЯ
0
И
13 [Forms] 1{Растадная накладная] ![НС#1_РНАК Л] ;
0 •
;
1
Рис. 17.34. Запрос-источник основной части отчета
.y,
Ф нрма
|ОПТТ
ярее
| Центра
^
По
Основание Н анменОЕ » Момита p-RQM Par Скане
ИТОГО бе
Расходная накладная N
lOK^naienb \црес
KQiuntwep маркет
от
2S.io.2003
778987651 М1
Бкгебскай, 12
Цок>|.|е«1 -ocHoeiiiie Сч II: Код
ИНН
Ш01
Глаетый
111111
«
15.102003
Нкпгенованнг тов. Ед.ичм Стажа НДС Цсиа
Колкчхстю
Сумма
Ш1
Мстит 17LG
игсуи
0^
6S7,QQp.
10
65870,00р
Ш5
CD-ROM PuiuoHi: IDE
штуи
ОД
1 153,ODp
20
ИОбЦСОр.
BOB
СыигА*,-
i^rrta
0,2
2 338,Шр.
1
2 338,00р.
ИТОГО Сумма кет: Отпусшл 1. го вез НД1
Получил траниил;
Иj * J|
Г > j »' ,
Получи я
: .
зге* i«| .||
91 263.00р.
Иванов Т .С .
_j»J
Ввод Сч-Ф | .
„Z^s^— Сохранить |
Печать
Jj :'; |
Закрыть ]
...
I
r_LlMJi*J»H
Рис. 17.35. Отчет для печати расходной накладной, вызываемый в интерфейсе
Глава 17. Пример практического приложения в сфере торговли
705
Необходимо предусмотреть после формирования новой расходной накладной вывод накладной в соответствии с установленной формой бланка. Для этого в запросе-источнике отчета (см. рис. 17.34) необходимо задать в условии отбора с помощью построителя выражений соответствие номера РН. по которому будет выводиться отчет, номеру РН из открытой формы (текущей) Расходная накладная: [Forms]![Расходная накладная]![КОМ_РНАКЛ]
В макет отчета (см. рис. 17.33) включена подчиненная ленточная форма, построенная на основе таблиц СП_РНАКЛ, ТОВАР. Ниже показан в режиме просмотра отчет (рис. 17.35), т. е. распечатка данных, соответствующих открытой РН, в нужном виде. Отчет будет получен при нажатии кнопки Печать в интерфейсе компонента подготовки документов отгрузки товаров.
Ввод нового счета-фактуры по расходной накладной После подготовки новой расходной накладной и ее проведения предусматривается формирование счета-фактуры по соответствующей кнопке в интерфейсе рассматриваемого компонента приложения (см. рис. 17.17), Для подготовки нового счета-фактуры на основе данных открытой накладной следует предусмотреть ряд требований к интерфейсу счета-фактуры. 1. В пустой форме счета-фактуры в общей части документа необходимо обеспечить: •
выбор склада фирмы, откуда отпущен товар по накладной, и отображение реквизитов фирмы-поставщика;
•
ввод очередного по порядку номера счета-фактуры;
• выбор покупателя из справочника контрагентов (можно скопировать из накладной); •
ввод для документа-основания номера накладной с последующим отображением спецификации отгруженных товаров;
• получение итоговых сумм по счету -фактуре и возможность их сохранить в соответствующей таблице базы данных. .
Замечание
)
Формирование строк спецификации счета-фактуры осуществляется автоматически отображением спецификации РН.
Часть 1И. Разработка приложения пользователя
706
2. После заполнения счета-фактуры данными необходимо: • ввести данные счета-фактуры; • распечатать документ "Счет-фактура" на основе введенных данных по стандартной форме с помощью кнопки Печать; Рассмотренные требования интерфейса счета-фактуры обеспечиваются при конструировании формы рядом мер: • включение полей со списком: СКЛАД, КОНТРАГЕНТ, ТОВАР," номер документа-основания (РН); • ввод текущей даты для нового документа по умолчанию (свойство поля в таблице БД); • присвоение значений итоговых сумм по счету-фактуре на основе значений итогов из основной части формы РН с сохранением в БД с помощью соответствующих процедур VBA; • создание кнопок управления Ввод Счет-Фактуры, Печать (вывод отчета счета-фактуры), Вперед, Назад, Закрыть.
Н9ШЁ
IF СЧФАКТ_ПОК : форма I
i
• i•i • i•2> i *3•
4 • 1 • В • i • 6 • i • 7 • I • в • i • S • i • W • i • 11 • I • 12 • I ' О • i • М • i • 15 • ( • 16 - I • '^,
i
1 * Заголовок формы 1
й| Ш
4
Новая Сч-Ф i >
5'
* Область данных
КIPHAJ НАИМ .*Р
[Скда I
М_№
э;ЧФАК
КОД_( ХЛ
J
-
|По* inarei ь |Ь од_пок wean вЬмоди. |я нак идна> | ^Тр
-•*
|| • i • 1 • i • г 4
5 ,
&
7 j
а
P_HAKnAflHAf
Z
В - I • 6 • i • 7 • i • 8 ' I • Э • I - ТО • I • 11 • I • \2 • I • 13 • I • W • I • в • i _±
i•4
* Заголовок формы
"1
"i -1 i• Л1
Намь^еновафмвто^;
[E^MSMJ] Uet^a | Ставка )) ДС|К(шнчефво1 [ НДС
К^д
•# Область данных КОД_Т_гЛ ЕИ.БАЗ ЦЕНА_От|СТАВКА_НДС
НАИМ.ТОВ
г
КОЛ
I
^мна|
Н
|СУММА_Н, |СУММА_ОТП Щ
# Примечание формы
ШШ
J»* В -Sum{[UEHA_ ОПТИКОЛ]/(1
— t* 6№Ь
1
аЕг
^__. НМД НЕЭ> ДС: 1
г
1ИТ raj|-SunflUE HA_UI I ГНКОЛ]]
urr(|CT 1 >
1 -IMMA
i
d
i
_J :'•
[Все^беэ^ДС. |ВСего_бвэ_Н ДС
Jjjaaieocjj [т
'•
НДС
!
|HflC
|НДС
:
ВсегЬ :|СЧФАКТ ПОК Всего
1Я£.е4-Н^!1ВсеГ07НДС ,
:Р^^РА-Д-Н^]|р7НАКЛАДНАЯ.Всег
i Рис. 17.36. Конструирование формы для подготовки и ввода счета-фактуры
|
т
Ч
Глава 17. Пример практического приложения в сфере торговли
707
В соответствии с рассмотренными требованиями получим интерфейс (рис. 17.36) для подготовки и ввода счета-фактуры, Формирование и сохранение итоговых величин счета-фактуры Для поля со списком докроен подготовим процедуру обработки события После обновления (рис. 17.37). Microsoft Visual Basic - ТОРГОВЯЯ„2004 File
Edit
Wew
insert
Run
£ods
•M ТОРГОВЛЯ_2004 - Гогт_СЧФАКТЛОК (Code)
Private Sub ПолеСоСписконгЗ_А£terUpdate() [СЧФАКТ_ПОК.ВС£ГО_с_НДС] = [Р_НАКЛАДНАЯ.ВСЕГО_с_НДС] СУИНА^БЕЗ^НДС - Всего_без_НДС НДС = Всего_НДС End Sub
Рис. 17.37. Процедура обработки события для присвоения значений полям итоговых сумм счета-фактуры & ^НАКЛАДНАЯ. ИНН
Фирма
J969738423473"
|ЦангралвЬый.ЗЗ
Адрес
РДО<ОДНАЯ
П Основание
НАКЛАДНАЯ
Новая Сч-f »ИРМА |ОПТТОРГ
Монигэд
PD-RQM P Сиане,
N ICD01
*• СЧФАН г i ш Склад
]ГЛАВ-ы)
-J
СЧЕТ ФАКТУРА Покупатель
•
]КялЧ)«тер марает
Основаннн - Расходная наклаяная I [0001 Наименование тов Монитор 17LG
ИТОГО бе;
итога
En. мэм. Цена штцкэ 65В7,ООс.
pD ROM Panasonic IDE 005 _J| штука j
Всего йеа Н Д[
Кол
Сканецйс
V
э
1153,00р.
таена НДС Количество "20
НДС Сумма (Ю978.3Эр. | 65Э70,ООр7 | 3 843,33р. | 23 ОбО.ООр
Ld
Запись! Jl
Рис. 17.38. Расходная накладная и подготовленный на ее основе счет-фактура 24 Зяк. 835
Часть III. Разработка приложения пользователя
708
В процедуре осуществляется присвоение полям итоговых сумм счетафактуры значений соответствующих расчетных полей из формы Р_НАКЛАДНАЯ с сохранением в таблице СЧФАКТ_ПОК базы данных. На рис. 17.39 показаны два связанных документа отгрузки: "Расходная накладная" и подготовленный на ее основе -- "Счет-фактура".
Формирование окна приложения "Покупка-продажа товаров" Параметры запуска приложения При запуске приложения можно предусмотреть, чтобы в его окне сразу открывался один из компонентов приложения. Предусмотрим при запуске приложения открытие компонента подготовки документов отгрузки. Выполним команду Сервис|Параметры запуска (TooIs|Startup). В окне параметров (рис. 17.39) надо выбрать в строке Вывод формы/страницы форму Расходная накладная. Здесь также задается заголовок окна приложения, выбирается значок для него. Для того чтобы при работе приложения сделать недоступным окно базы данных, нужно снять флажок Окно базы данных (Display Database Window). Параметры запуск.» Заголовок приложения:
Вывод формы/страницы:
'Продажа _пок у пка_т оваров
;Расходная накладная
Значок приложения;
Г Окно базы данных I"? Строка состояния
Г •-• чок форм иотое
е
Строка иеию:
Контекстное меню;
(по умолчанию)
(по умолчанию)
[У Полный набор меню Access
!*? Встроенные панели инструментов
$У Контекстные меню по умолчанию
К* Изменение панелей инструментов/пеню
^ Специальные клавиши Access (Вывод окна базы данных, окна проверки и окна Visual Basic, приостановка выполнения)
Рис. 17.39. Окно параметров запуска приложения
Формирование меню приложения Рассмотрим формирование меню приложения, ориентированного на работу с его объектами. Подготовим окно Етриложения, в котором будет только соб-
Глава 17. Пример практического приложения^) сфере торговли
709
ственное меню с необходимыми для приложения "Покупка-продажа товаров" командами, без доступа к командам инструментальных средств Access. Воспользуемся командой Вид] Панели инструментов!Настройка и сначала снимем флажки со всех стандартных панелей Access. Далее перейдем к формированию новой панели Меню приложения. Порядок подготовки иерархического меню был рассмотрен в главе 16 (см. рис. 16.23—16.26). На рис. 17.40 показано формирование команды открытия формы приходной накладной в подменю Документы приходные.
Панели инструментов Чтобы добавить команду на панель инструментов, выберите категорию и перетащите команду из этого окна на панель, Категории:
N 0001
_^j
Команды:
Работа с исходным тек * ] Устроенные пеню Все таблицы Все запросы
СЛ_СЧЕТА подчиненная форме,,
Все отчеты Зсв веб-страницы Все макросы Элементы ActiveX Новое меню
Р Н оси часть
СЧФАКТ_ПОК
020QT
Слисок_СЧЕТОВ
ена Ставка Н 7,00р.
о
3,00р.
ПР_НАКЛАДНАЯ
8,00р.
СП_ПРНАКЛ подчиненная форг Упорядочить команды...
Закрыть 1 - —- --——'
15211,33р.
Рис. 17.40. Создание меню приложения "Продажа-покупка товаров" Окно приложения "Продажа-покупка товаров" с собственным иерархическим меню команд и открытым при запуске компонентом подготовки документов отгрузки показано на рис. 17.41.
С
Замечание
Модификация меню приложения обеспечивается стандартным образом, что показано на приведенном рисунке.
Часть III. Разработка приложения пользователя
710 ПРОДАЖА-ПОКУПКА ТОВАРОВ
отгрузки- Документы приходные * Документы оплаты • Отчеты- Сервис-. Окна * Помощь- Г
;,файл-. Справочной'. Докум
Добавить или удагить кнопки *
Ш Р_НАКЛАДНЛЯ Фирма Адрес
(ЬПТТОРГ"
ИНН
Главный
1369738423473
[Центральный, 33" РАСХОДНАЯ Покупатель
Основание Счет Н
НАКЛАДНАЯ
(Компьютер маркет 111111
N ШИТ" •] ИНН_К [778387651111
_-J от | 15.10.2001
Наименование то в Код Eft. нам. Цена f MonnrcplTLG | ОН _ij| штчка 6587.QQP
Открыть аокчмент Ставка НДС Количество НДС 20^ 10 |Ю 978.33р.
Сумма 65 870,00р.
| 3 ВШЭр
23 ОбОЛОр.
ЗВЭ.67р.
2 338,00р.
:0 -RDM Panasonic IDE
005 _-JJ оп-цка
1 153.000
20^
Cuanepftcei
DOS jjj шгчка
233B,OQ B
202
Ж
20
- :
-
I
я НДС:
Отпустил Получил
7605Б.Б7р. (ИвлноеТ.С.
ВсвгоНДС. | 15211,33р. , ;
Всего с НДС
Новая накладная Ввод Сч-Ф I
На склада
Сохранить I
Проводка раскада Печать
I
Закрьгть
Рис. 17.41. Окно приложения "Продажа-покупка товаров" с собственным иерархическим меню команд и открытым при запуске компонентом приложения
ПРИЛОЖЕНИЯ
'
Приложение 1
Параметры структуры таблиц базы данных "Поставка товаров" Таблицы справочных данных Таблица П1.1. Описание свойств полей таблицы ТОВАР
Имя поля
Признак Обяза- Тип первич- тельное данных поле ного ключа
код_тов
Простой Да
Размер Формат
Число Подпись дес. поля знаков
Текстовый
5
Код товара
25
Наименование товара
НАИМ_ТОВ
Нет
Текстовый
ЦЕНА
Нет
Денежный
ЕЙ
Нет
Текстовый
СТАВКА НДС
Нет
Числовой
ФОТО
Нет
Поле объекта OLE
Денежный 8
ОдинарПроцентное с пла- ный вающей точкой
2
Цена Единица измерения Ставка НДС
Фото товара
Требования к заполнению таблицы: 1. Для поля СТАВКА_НДС нужно предусмотреть условие на значение: > = о , С 5 And <=0,35 и сообщение об ошибке: "Ставка НДС должна быть >=5% и
Приложения
714
2. Для поля ЦЕНА нужно предусмотреть условие на значение: >=о And <=35000 и сообщение об ошибке: "Цена должна быть >=0 и <=35000". 3. Для данной таблицы и остальных: если для поля указан признак первичного ключа, это означает следующее: •
когда ключ "простой", его надо выделить и присвоить признак ключа (нажатием кнопки Ключевое поле), при этом в свойстве Индексированное поле автоматически установится значение "Да (Совпадения не допускаются)";
•
когда ключ "составной", надо выделить все поля, образующие первичный ключ, и только после этого присвоить признак ключа. При этом в свойстве Индексированное поле для каждого поля, входящего в ключ, нужно оставить значение по умолчанию "Нет".
4. Не указанные в таблице параметры в конструкторе таблиц должны сохранить значение по умолчанию. Таблица П1.2. Описание свойств полей таблицы СКЛАД
Имя поля
Признак первичного ключа
Обязательное поле
Тип данных
Размер
Подпись поля
ном_скл
Простой
Да
Текстовый
5
Номер склада
КОД_Ф
Нет
Текстовый
5
Код фирмы
НАИМ_СК
Нет
Текстовый
20
Наименование
отв лицо
Нет
Текстовый
20
Ответственное лицо
АДРЕС_СК
Нет
Текстовый
20
Адрес склада
Таблица П1.3. Описание свойств полей таблицы ПОКУПАТЕЛЬ
Имя поля
Признак первичного ключа
Обязательное поле
Тип данных
код_пок
Простой
Да
ИНН
Размер
Подпись поля
Текстовый
5
Код покупателя
Нет
Текстовый
12
НАИМ ПОК
Нет
Текстовый
20
Наименование
АДРЕС_ПОК
Нет
Текстовый
20
Адрес
ТЕЛ
Нет
Текстовый
10
Телефон
Приложение^. Параметры структуры таблиц базы данных "Поставка товаров"
715
Таблица П1.3 (окончание) Имя поля
Признак первичного ключа
Обязательное поле
Размер Подпись поля
Тип данных
НОМ_РСЧ
Текстовый
20
БАНК
Текстовый
10
ОПИСАНИЕ
Поле MEMO
ИЕВ_ДЦРЕС
Гиперссылка
Номер расч. счета
Требования к заполнению таблицы: 1. Для поля телефон следует задать маску ввода: \ ( 9 9 9 \ ) о о о \ - о о 9 9 . 2. Для поля инн нужно выполнить следующие операции: • •
указать маску ввода: оооооооооооо; в свойстве Индексированное поле выбрать значение "Да (Совпадения не допускаются)".
Таблицы плановых данных Таблица П1.4. Описание свойств полей таблицы ДОГОВОР Раз- Формат мер
Имя поля
Признак первичного ключа
Обяза- Тип тельное данных поле
ном
Простой
Да
Текстовый
5
Нет
Дата/время
5
код пок
Да
Текстовый
5
СУММА
Нет
Денежный
ДОГ
ДАТА ДОГ
дог
Маска ввода поля ДАТА дог: оо. о о . оооо.
Число Подпись поля Две. знаков Номер договора
Краткий формат даты
Дата
Код покупателя Денежный Авто
Сумма по договору
Приложения
716
Таблица П1.5. Описание свойств полей таблицы ПОСТАВКА_ПЛАН Обяза- Тип Признак данных первично- тельго ключа ное поле
ном_
Составной Да
Текстовый
5
Номер договора
код_ тов
Да
Текстовый
5
Код товара
СРОК_
Да
Числовой
Байт
мин пост
Нет
Числовой
Целое
Авто
Мин. партия поставки
кол_ пост
Нет
Числовой
Длинное целое
Авто
Количество поставки
СУММА_
Нет
Денежный
Денежный Авто
Сумма поставки
ДОГ
пост
пост
Размер
Формат
Число Подпись ПОЛЯ Две. знаков
Имя поля
Срок поставки (ном. месяца)
Фиксированный
Таблицы оперативно-учетных данных Таблица П1.6. Описание свойств полей таблицы НАКЛАДНАЯ Имя поля
Обяза- Тип Признак первично- тельданных го ключа ное поле
ном
Составной
Размер
Формат
Число две. знаков
Подпись ПОЛЯ
Да
Текстовый
5
Номер накладной
код ск
Да
Текстовый
5
Код склада
ДАТА
Нет
Дата/время
НАКЛ
отг
Краткий формат даты
Дата отгрузки
Приложение 1. Параметры структуры таблиц базы данных "Поставка товаров"
717
Таблица П1.6 (окончание) Имя поля
Признак Обяза- Тип первично- тельданных го ключа ное поле
ном дог
Нет
Текстовый
СУММА НАКЛ
Нет
Денежный
Раз-
Формат
мер
Число дес. знаков
5
Подпись ПОЛЯ
Номер договора Денежный Авто
Сумма по накладной
Необходимо предусмотреть для поля ДАТА_ОТГ ввод значения по умолчанию текущей даты: Date ( ) . Таблица П1.7. Описание свойств полей таблицы ОТГРУЗКА Имя поля
Признак Обяза- Тип первично- тельданных го ключа ное поле
ном_
Составной
Размер
Формат
Число дес. знаков
Подпись ПОЛЯ
Да
Текстовый
5
Номер накладной
код_ ск
Да
Текстовый
5
Код склада
код
Да
Текстовый
5
Код товара
Нет
Числовой
Нет
Денежный
НАКЛ
Т ОБ
кол ОТГР
СУММА ОТГР
Длинное целое
Авто
Денежный Авто
Количест во Сумма по товару
Приложение 2
Пример заполненных документов для загрузки в базу данных "Поставка товаров" Справочная информация Справочник товаров | Код товара ;Т001 ;
Т002 ТООЗ Т004 Т005
'тось
;ТТШ -TDOS
ТЮЗ
тою
rail -TD12
Наименование товара Монитор 17LG
Ценз
[Единица изм Ставка НДС
5% 20% 10%' 20% 30% 15% 10% 15% 5% 5% 10% 15%
6 687 ДОр. штука 363,00р. коробка FDD 3.5 HDD Ma*1or20GB 2 590 ЛОр. штука Корпус MiniTower 1 916ДОр. штука CD-ROM Panasonic IDE 1 153ДОр. : штука DIMM64MPC100 360 ДОр. штука Принтер HPLaserJet122C 5 432 ДОр. штука Ска нер Acer 2 338 ДОр. .штука Зв Карта Genius LJv 799 ДОр. штука Модем Genius ext 1 295 ДОр. штука 3000 ДОр. штука Плоттер. Э9 000 ДОр. штука Мичикомпьютер
Справочник складов Номер склада
01 02 03
Код фирмы Наименование]
100 100 " 100
Главный Оптовый Торговый
Оте. лицо
Г~Адрес "скл" ""
Иванов Т.С. Петров А.А. Смирнов О.Н
Свердлова,29 Речной, 33
Мичуринская,
Справочник покупателей ИНН | Код попупатэля 778957S51 1 1 1 П001 П002 789339798798 ПООЭ 77023941.3213 П004 456575575577 771243567322 П005 587679675123 П006
Наииенивэ-ые Компьютер маркет Перспектива Инфоцентр Монитор Коыпьтер лэнд Компьютерная техника
Адрес Витебская, 12 Ладожский, 38 Кодратьевский , 54 Средний. 4 Кавалергардский .9 Малый,1Э
Телефон (8 12)345-2345 P95V3W-6789 (234)234-45 ( )12Э-4667 ( J123-56 ( )12Э-4567
Номе расч. счета 7635B5Q9763264536567 7Б35В509763264536765 56568789766974647954 59796908790679942539 763585097Б32Б4536Э5Л
"1 "БАНК Мост Кредит Мост Надгода Инвест Мост
|
Приложение 2. Пример заполненных документов для загрузки в базу данных.
Плановая информация ДОГОВОР
mi
N
ПОКУПАТЕЛЬ Кодпок1-ртателя Код товара
01
| 08.01.2003
Перспектива П002
Наименование товара
Месяц поставки
Мин. партия пос тевкн
Количество поставки
TTJ01
Монитор 17LG
1
10
100
7П01
Монитор 17LG
2
5
20
"ПНИ
Монитор 17LG
3
5
30
TTJ02
FDD 3,5
1
Hi
SO
IDC?
FDD 3.E
3
5
10
ДОГОВОР
Д 122
N
ПОКУПАТЕЛЬ Код покупателя
От
23,12.2003
Компьютер маркет ГИ 01
Код товара
Наименование товара
Месяц поставки
Мин. партия поставки
Количество поставки
TTJ01
Монитор 17LG
1
10
100
ТШИ
Монитор 17LG
2
А
IZ
1ТЮЭ
HDDMaxtor20GB
2
5
10
TTJ04
Корпус MiniTower
3
15
m
ДОГОВОР
N
ДЗЗЗ
ПОКУПАТЕЛЬ Код покупателя
с)Т
12.12.2003
Перспектива П002
Код товара
Наименование товара
Месяц поставки
Ми н. партия 1 п эстовки |
Количество поставки
TD05
CD-ROM Panasonic IDE
1
10
40
719
Приложения
720
Оперативно-учетная информация НАКЛАДНАЯ N
0001
Номер скллда
01
HoMq) договора
Д111
Код товара
от
Наименование товара
25.01.2004
Количество
ТОСИ
Монитор 17LG
10
ТСЮ2
FDD 3.5
40
НАКЛАДНАЯ N
20 022004
0002
стада
02
Номер догов^й
Д1 1 1
Код тсварп
Наименование товара
ТСЮ1
Монитор 17LG
Т002
FDD 3,5
НАКЛАДНАЯ N
230
2503.2004
0003
Номер склада Номе]) договора
03 Д11 1
I- 0.1 i"i. >j>;i
Наименование товара
ТОО 2
FDD 3,5
НАКЛАДНАЯ N
Количество
12 29.04.2004
0004
Номер склада
01
Номер договора
Д222
Код товара
Количество
Наименование товара
Количество
Т004
Корпус MiniTower
А
Т001
Монитор 17LG
5
НАКЛАДНАЯ N
0006
Номер склада
02
Номе]) договор!»
Д222
от
Код товара
Наименование товара
Т001
Монитор 17LG
ТООЗ
HDD Maxtor20GB
14.02.200Л
Количество 10 8
Предметный указатель
D, I Drag and Drop 21, 252 Intranet 31
M
SQL 34, 92, 162, 388 SQL Server 34; 385 SQL Server 2000 Desktop Engine 386 SQL-сервер 416
MSDE 10, 35
О ODBC 34, 390 драйверы 391 определение источников данных 391 OLE 29, 99 Object 92, 106 OLE DB 390 OLE DB35, 417 провайдеры 418
Q QBE 137
VBA:
процедура обработки события, примеры 605, 608, 613, 621, 624, 627
w Windows NT Server 32 Workstation 32
XML 32, 36 XSL 32, 37
722
Предметный указатель
В Автозамена имен объектов 22 Автоотчет 346 Автоформа 227 Администратор рабочих групп 368 Алгоритм 513 Архитектура "клиент-сервер" 384
ь База данных: SQL-сервера 386, 423 представления 443 свойства таблицы 435 сохраненные процедуры 448 схемы баз данных 439 загрузка 267 логическая структура 50, 52 пример 76 многопользовательская 32, 363 блокировка записей 374 изменение данных 374 изменение объектов 379 монопольный доступ 371 монопольный режим 370 общий доступ 372 последняя версия данных 377 разделение 380 режим доступа по умолчанию 373 режим чтения 372 открытие 44 реляционная 11, 50 структура 81 репликация 33 создание 51, 81, 82 технология загрузки 270 типовая 27 этапы проектирования 51 Бланк запроса 143, 167 Блокировка: записей 260, 374 на уровне записи 33 на уровне страниц 33
Внешние источники данных 384 Внешний ключ 12 Всплывающая подсказка 20 Вычисляемые поля 330
Главная таблица \1 Групповые операции 154
Д Диалоговое окно 43 Диспетчер кнопочных форм 639
Задача 513 атгоритмизация 513 постановка 513 Запись 12 добавление 105 изменение значений 106 удаление 105 Запросы 16, 45, 137 бланк запроса 142, 143, 167 вычисляемое поле I486 153 групповые операции 155 условия отбора 160 добавление таблиц 141 к серверу SQL 390, 399 примеры 402 строка подключения 400 конструирование 139, 155 перекрестный запрос 207 многотабличные запросы 138, 165, 166, 173 на выборку 138, 139 на добавление 19! на обновление 139, 187 на обновление на создание таблицы 139, 186
Предметный указатель
на удаление 197 панель инструментов 139 пример 172 параметры 153 режим SQL 162, 169, 173, 176, 180, 189, 194, 196,200, 207 режим таблицы 139, 189 схема данных 142 условия отбора 145, 146, 160, 167, 175 формирование записей 168 Запуск Access 38, 657 Зашита базы данных Access 363 на уровне объектов БД 370 на уровне пользователей 364
И Идентификатор 145 Импорт 390, 412, 433, 454 Инструкции SQL 164, 169, 173, 176, 181 DELETE 200 INSERT INTO 194, 195, 196 TRANSFORM 207 UPDATE 189 способы объединения записей 170 Инструкция 568, 572 Const 579 Dim 574, 577 Option Explicit 574 Public 575 Set 577 Информационно-логическая модель 50, 52 каноническая 75 пример 75 разработка 51 Информационный объект 52, 53 выделение 55, 58 пример 59 главный 72 ключ 53 объект-связка 73 подчиненный 72 связи 71 экземпляр 53
723
К Каскадное обновление связанных записей 121 Каскадное удаление связанных записей 121 Ключ: первичный 93
связи 12, 77 Кнопка: Восстановить 39, 105 Закрыть 39 Новая запись 105 Открыть 104 Развернуть 39 Свернуть 38 Свойства 130 системного меню 38, 45 Схема данных 117 Удалить запись 105 Команда: Подтаблица 129 Константа 145, 573, 579 встроенная 579 Конструктор 22, 45 запросов 207 панель инструментов 140 форм 229, 278 панель инструментов 215 Корпоративная сеть 31
л Литерал 145 Локальная сеть одноранговая 32 с файловым сервером 32 Локальная сеть 32 NetWare Novell 32
м Макет таблицы 103 Макрокоманды 518 аргументы 520, 522, 546 Восстановить 540 (окончание рубрики см. на с. 724)
Предметный указатель
724
Макрокоманды (окончание): ЗадатьЗначение 546. 547, 551, 553 Закрыть 547 ЗапускМакроса 523 ЗапускПрограммы 572 НаЗапись 553 ОткрытьЗапрос 537, 538, 552 ОткрытьОтчет 547, 548 ОткрытьТаблицу 539 Свернуть 539 СдвигРазмер 540 Сообщение 540, 553 условия выполнения 524 УстановитьСообщения 538, 540, 553 формирование 521, 538 Макросы 45, 518 AutoExec 533 блок-схема выполнения 525 выполнение 520, 532 порядок 535 группа 522 запуск 532 автоматический 533 нажатием кнопки 535 через события 532, 534 примеры 537 создание 520 Маска ввода 100 мастер 101 Мастера Access 22 баз данных 27 запрос для поиска записей, не имеющих подчиненных 203 запрос для поиска повторяющихся записей 203 запросов 201 защиты 26 кнопок 658 отчетов 337 перекрестных запросов примеры 204 по анализу таблиц 24 по импорту/экспорту 25 по разделению базы данных 26 подстановок 22, 109 преобразования в формат SQL Server 26
простой запрос 201 сводных таблиц 24 создания баз данных на SQL Server 424 форм 213, 226, 237, 276 элементов 264 Метол 572 GoToRecord 584 Open Form 584 Многотабличный запрос 165 Модули 17, 45 компиляция 595 стандартные 564, 591 структура 566 форм и отчетов 564, 591 структура 567
н Нормализация данных 12, 52 требования 55
о Область задач 20, 43, 44 Объединение таблиц 123, 125 Объект DoCmd 558, 584 Объект OLE: внедренный 99 пример 106 связанный 99 Объекты Access 15, 558 Объекты доступа к данным 558, 560, 562 Оглавление справочной системы 46 Однократный ввод данных 267 Одноранговая сеть 361 Окно: Access 38 строка меню 39 базы данных 44, 86 конструктора запросов 141 конструктора отчетов 321 макросов 520 модуля 592 просмотра объектов 591
Предметный указатель
Оператор 146 Отчеты 16, 45, 320 вычисляемое поле 330 однотабличные 323 печать 334 подчиненные 347, включение 348 просмотр 333 разделы 321 свойства 357, 533 Сумма с накоплением 354
п Панель: инстиументов 39 форматирования 223 элементов 22, 215 конструктора запросов 140, 144 конструктора таблиц 88 конструктора форм 215, 220, 245 настройка 41 таблица в режиме таблицы 101 Параметры запроса 153, 172, 207, 208 Пароль базы данных 370 Первичный ключ 12, 97, См. Уникальный ключ составной 100 Перекрестный запрос 204, 207 параметры 206 Переменные 574 инструкция: Dim 574, 577 Public 575 Set 577 явное описание 574 Подчиненная таблица 12 Поле 12 Memo 99 бланка запроса 144 гиперссылка 100 Дата/время 100 зашита от изменений 259 имя 90
725
Мастер подстановок 109 общие свойства 90, 95 подпись 91 размер 90, 91 формат 91 число десятичных знаков 91 объекта OLE: вставка 106, 115 пример 99 определение 89 свойства 89 со списком 92, 109. 281 создание мастером 282 сообщение об ошибке 92 тип данных 90, 112 условие на значение 92 Построитель выражений 531 условие на значение 96 Права доступа 101 Предметная область 50 документы 60, 61 пример описания 60 Приложение 513, 638 запуск 657 интерфейс пользователя 638 панель управления 639 этапы создания 516 Проект Access 416 новая база данных 423 подключение к серверу 422 создание 83 существующая база данных 420 Процедура 564, 568 Function 567, 570 создание 591 Sub 567, 568, 569 создание 591 выполнение 571 имена 575 компиляция 595 обработка событий 565, 659, 660 создание 570 раздел описаний 574 типы данных 576
726
Рабочая станция 32, 362 Рабочие группы 367 Разделение базы данных 380 Расширенная обработка событий 532, 639 Режим ввода записи 101 Реквизиты: зависимые 54, 79 ключевые 53 описательные 53 транзитивная зависимость 55, 59 функциональная зависимость пример 62, 64, 66, 67, 69, 70 Реляционная таблица 11 Репликация баз данных 33
Сводные диаграммы 17 Сводные таблицы 17 Свойства поля 111 Связи информационных объектов 71 много-многозначные 72 примеры 74 одно-многозначные 72 примеры 74, 77 одно-однозначные 72 примеры 74 Связная целостность 14 Связь и внедрение объектов (OLE) 29, 99, 106 Связь с таблицами SQL-сервера 390, 404 примеры запросов 409 Связь таблиц 12, 116 Сервер баз данных 385 Сервер баз данных SQL 34 Сети: одноранговые 361 с файловым сервером 362 Система управления базой данных (СУБД) 8 Системное меню 39 Системные требования 10 С март-теги 20
Предметный указатель
События 519, 638 Список 92 Справка по Access 46 Ссылка: на метод 572 на подчиненную форму/отчет 529, 530 на свойство 528, 551 на элемент управления 528 создание построителем 531 Страницы доступа к данным: создание 82 Схема данных 14, 116 модификация 134 определение связей 118 по составному ключу 119 пример 77, 122 создание 117 пример 117
Таблицы БД 15, 45 SQL-сервера 434 ввод данных 101 логически связанных 108 пример 104 индексы 93 макет 103 режим конструктора 88 режим таблицы 98 создание 87 пример 95 структура 81, 87, 88 изменение 133 пример 95 Технология IntelliSense 21 Тип данных: Мастер подстановок 109
у Уникальный ключ 12 определение 93 простой 55 составной 55 удаление 133
Предметный указатель Ф
Файл: adp 421 mdb 85 mdf424 ud!418, 419 Файл базы данных 19 имя 84 окно 85 рабочий каталог 84 создание 84 Файл рабочих групп 367 Файл сведений о блокировках 377 Файловый сервер 32, 362 Формат даты 100 Формы 16, 45 диалоговое средство работы пользователя 638 загрузка БД 268 защита данных 259 кнопки управления 536, 539, 658 кнопочные 639 добавление рисунка 651 запуск 652, 657 режим конструктора 658 связь 644 создание 641 элементы 643 конструирование 243, 278 макет 269 многотабличные 234 без подчиненных 236 подсхема данных 273 создание 235, 276 на основе запроса 236 панель конструктора 220, 221, 233, 264 настройка 224
727
подготовка к созданию 267, 269 подчиненные 235, 276 зашита данных 261 связь 249 режим конструктора 229 режим формы 233, 289 свойства 219, 252, 253, 254 связанные 236 элемент управления 216 Надпись 230 Поле 231 Поле со списком 286 свойства 218 Функционально-технологическая схема 514
Целостность данных 52, 120 задание параметров 120 проверка 122 условия установления 120
э Экспорт 412 Элемент управления: свойства 535, 536
я Ядро базы данных 560 Язык XML 32 Ярлык: для базы данных 657 для объекта базы данных 657
как повысить отдачу от вложении в информационную инфраструктуру компании? о б у ч и т ь с п е ц и о л и ст о в в у ч е б н о м ц е н т ре s o l t l i n e ® ! Деже грамотный специалист, занятый текущей работой, не в состоянии самостоятельна повышать свою квалификацию- Для этого у него нет ни времени, ни методически» материалов. Только авторизованное обучение под руководством опытного инструктора позволяет эффективно на 100% использовать все возможности как ГГ-инфраструктуры, так и персонала компании. Непрерывное обучение. Информационные технологии быстро меняются Так же быстро устаревают знания сотрудников. Мы предлагаем экономичный и эффективный способ непрерывного обучения. Мы готовы разработать корпоративную приграччу обучения специально лля сотрулников Вашей компании. Широкий выбор курсов дн* профессионал он ыйлас-тТТ, которые КСПЯГПСРННСИТЬ спой уровень. Большое внимание уделяется вопросам по<Трое1Н1й прдвиль1]Ы51Г-и11фр1СТрукт>рысх)1Ч1емс1111ай компании— вопросам безопасности, защиты данных, резервному копированию, администрированию сети и др. Авторизованное обучение. SoftUne* является авторизованным учейным центром компаний Microsoft Symantec, Cltrln, VF.RJTAS и др. Высокое качество обучения. Обучение падут сертифицированные препо.'1анагчпи па официальным методическим материалам. Высокое качество обучения подтверждается откликами крупнейших компании, входящих в ТОП 100 российского ринка Корпоративные программы обучения. SolH.tnc* ориентируется на долгосрочные отношения с корпоративными клиентами. Мы npeAJiaiiCMpajpaiinrKy нспрсрынной npoi рам мм обучении сотрудников, которая позволит экономить ресурсы, выделяемые па обучение. Обратитесь к консультантам учебного центра Анне Дмитрановой или Нине Доминго потел.: +7(095)231-39-39 и закажите бесплатный каталог учебных курсе I.
программное обеспечение — лицензирование, обучение, консалтинг 7(095)331-39-39 www.softline.ru
Книги издательства "БХВ-Петербург" в продаже: www.bhv.ru Магазин "Новая техническая книга": СПб., Измайловский пр., д. 29, тел. (812)251-41-10 Отдел оптовых поставок: e-mail: [email protected]
Серая "В подлиннике" Адаменко А., Кучуков А. Логическое программирование и Visual Prolog (+CD-ROM)
992 с.
Андреев А и др. Microsoft Windows XP. Home Edition и Professional. Русские версии
640 с.
Андреев А. и др. Microsoft Windows 2000 Professional. Русская версия
752 с.
Андреев А. и др. Microsoft Windows 2000 Server. Русская версия Андреев А. и др. Microsoft Windows 2000 Server и Professional. Русские версии
960 с. 1056 с.
Андреев А. и др. Microsoft Windows XP. Руководство администратора
848 с.
Ахаян P. Macromedia ColdFusion
672 с.
Бурлаков М. Создание видеоклипов
1216 с.
Бурлаков М. CorelDRAW 11
720 с.
Бурлаков М. CorelDRAW 12
720 с.
Власенко С. Microsoft Office XP: компакт-диск с примерами Власенко С. Microsoft Word 2002 Гофман В., Хомоненко A., Delphi 6
32 с. 992 с 1152 с.
Долженков В . Microsoft Excel 2000
1088 с.
Долженков В., Колесников Ю. Microsoft Excel 2002
1072 с.
Долженков В., Колесников Ю. Microsoft Excel 2003
1024 с.
Дронов В. Macromedia Dreamweaver MX
736 с.
Дронов В. Macromedia Dreamweaver MX 2004
736 с.
Дронов В. Macromedia Flash MX
848 с.
Дронов В. Macromedia Flash MX 2004
800 с.
Закер К. Компьютерные сети. Модернизация и поиск неисправностей
1088 с,
Кокорева О.,Чекмарев A. Microsoft Windows Server 2003
1184 с.
Колесниченко О., Шишигин И. Аппаратные средства PC, 4-е изд,
1024 с.
Макдональд М. ASP.NET Мамаев Е. Microsoft SQL Server 2000 Матросов А., Сергеев А., Чаунин М. HTML 4.0 Михеева В., . Microsoft Access 2000 Михеева В., Харитонова И. Microsoft Access 2002
992 с. 1280 с. 672 с, 1088 с. 1040 с.
Новиков Ф. Microsoft Office 2000 в целом Новиков Ф. Microsoft Office XP в целом
728 с. 928 с.
Новиков Ф. Microsoft Word 2003 (+CD) Нортон Р., Мюллер Дж. Windows 98
1000 с. 592 с.
Ноултон П., Шилдт Г. Java 2 Пауэлл Т. Web-дизайн, 2-е изд. Пауэлл Т. Web-дизайн Персон Р., Роуз К. Microsoft Word 97 в подлиннике
1072 с. 1072 с. 1024 с. 1120 с.
Питц-Моултис Н., Кирк Ч. XML Полещук Н. AutoCAD 2002 (+дискета)
736 с. 1200 с.
Полещук Н. AutoCAD 2004 Полещук Н. AutoCAD 2004. Разработка приложений и адаптация Пономаренко С. Adobe Illustrator 10
976 с, 624 с. 688 с.
Пономаренко С. Adobe Illustrator CS
768 с.
Пономаренко С. Adobe Photoshop 6.0
832 с.
Пономаренко С. Adobe Photoshop 7
928 с.
Пономаренко С. Adobe Photoshop CS
928 с.
Пономаренко С Free Hand 7 в подлиннике
320 с.
Русеев С. WAP: технология и приложения
432 с.
Стахнов A. Linux
912 с.
Стивене Р. Протоколы TCP/IP. Практическое руководство
672 с.
Сузи P. Python (+CD-ROM)
768 с.
Тайц А. М., Тайц A. A. Adobe InDesign
704 с.
Тайц А. М., Тайц A. A. Adobe PageMaker 7.0
784 с.
Тайц А. М., Тайц A. A. CorelDRAW Graphics Suite 11: все программы пакета
1200с.
Тихомиров Ю. Microsoft SQL Server 7.0
720 с.
Уильяме Э. Active Server Pages (,+CD-ROM)
672 с.
Усаров Г. Microsoft Outlook 2002 Фаронов В. Turbo Pascal Фаронов В. Система программирования Delphi
656 с. 1056 с. 912 с.
Хомоненко А. и др. Delphi 7
1216 с.
Чекмарев А., Вишневский А., Кокорева О. Microsoft Windows Server 2003. Русская версия
1184 с.
Хант Ш. Эффекты в Corel DRAW (+CD-ROM)
704 с.
Серия "Самоучитель" Авдюхин А., Жуков А. Самоучитель Ассемблер С+дискета)
448 с.
Альберт Д. И., Альберт Е. Э. Самоучитель Macromedia Flash MX 2004
624 с.
Ананьев А., Федоров А. Самоучитель Visual Basic 6.0
624 с.
Ануфриев И. Самоучитель MatLab 5.3/б.х (+дискета)
736 с.
Бекаревич Ю., Пушкина Н. Самоучитель Microsoft Access 2002 Будилов В. Основы программирования для Интернета
720 с, 736 с.
Бурлаков М. Самоучитель Macromedia Flash MX
656 с.
Бурлаков М. Самоучитель Adobe Illustrator CS
736 с.
Бурлаков М. Самоучитель Adobe Photoshop CS
720 с.
Васильев В., Малиновский А. Основы работы на ПК
448 с.
Воробьев С., Сироткин С., Чалышев И. Самоучитель WML и WMLScript
240 с.
Гаевский А. Основы работы в Интернете
464 с.
Гарнаев А. Самоучитель Visual Studio .NET 2003
688 с.
Гарнаев А. Самоучитель VBA
512 с.
Герасевич В. Компьютер для врача, 2-е издание
512 с.
Герасевич В. Самоучитель. Компьютер для врача
640 с.
Гофман В., Хомоненко А. Самоучитель Delphi
576 с.
Деревских В. Синтез и обработка звука на PC
352 с.
Дмитриева М. Самоучитель JavaScript Долженков В., Колесников Ю. Самоучитель Excel 2000 (+дискета)
512 с. 368 с.
Долженков В., Колесников Ю. Самоучитель Microsoft Excel 2002 (+дискета)
416 с.
Долженков В., Колесников Ю. Самоучитель Microsoft Excel 2003
432 с.
Дунаев В., Дунаев В. Графика для Web
640 с.
Жаринов К. Основы веб-мастеринга
352 с.
Жуков А., Авдюхин А. Ассемблер. Самоучитель (+дискета)
448 с.
Исагулиев К. Самоучитель Macromedia Flash 5
368 с.
Исагулиев К. Самоучитель Macromedia Dreamweaver 3
432 с.
Кетков Ю., Кетков А. Практика программирования: Visual Basic, C++ Builder, Delphi (+дискета)
464 с.
Кетков Ю., Кетков А. Практика программирования: Бейсик, Си, Паскаль (+дискета)
480 с,
Кирьянов Д. Самоучитель Mathcad 11
560 с.
Кирьянов Д. Самоучитель Mathcad 2001 Кирьянов Д., Кирьянова Е. Самоучитель Adobe After Effects 6.0
544 с. 368 с.
Кирьянов Д., Кирьянова Е. Самоучитель Adobe Premiere 6.0
480 с.
Кирьянов Д., Кирьянова Е. Самоучитель Adobe Premiere Pro
448 с.
Кирьянов Д., Кирьянова Е. Самоучитель Adobe Premiere 6.5
480 с.
Клюквин А. Краткий самоучитель работы на ПК
432 с.
Комолоаа Н. Компьютерная верстка и дизайн
512 с.
Коркин И. Самоучитель Microsoft Internet Explorer 6.0
288 с.
Костромин В. Самоучитель Linux для пользователя
672 с.
Костромин В. Приложение к книге Костромина В. Самоучитель Linux для пользователя 4 CD-ROM " Дистрибутив Red Hat L Котеров Д. Самоучитель РНР 4
576 с,
Кузнецов И. Самоучитель видео на ПК (+CD-ROM)
416 с.
Кузнецов М., Симдянов И. РНР 5
560 с.
Куэютина А., Шапошников И. Самоучитель Adobe GoLive 6
352 с.
Культин Н. Delphi 6. Программирование на Object Pascal
528 с.
Культин Н. Основы программирования в Delphi 7 (+дискета)
608 с.
Культин Н. Программирование в TurboPascal 7 и Delphi, 2-е изд. (+дискета) Культин Н. C++ Builder (+прил. на CD-ROM)
416 с. 320 с.
Леоненков А. Самоучитель UML
304 с.
Леоненков А. Самоучитель UML 2-изд.
432 с.
Матросов А., Чаунин М. Самоучитель Perl
432 с,
Медведев Е., Урусова В. Музыкальная азбука на PC (+ дискета)
496 с.
Медников В. Основы комьютерной музыки
336 с.
Мур М. и др. Телекоммуникации. Руководство для начинающих
624 с.
Надеждин Н. Цифровая фотография. Практическое руководство
368 с.
Немнюгин С. Современный Фортран
496 с.
Омельченко Л. Самоучитель Visual Foxpro
688 с.
Омельченко Л., Федоров А. Самоучитель Microsoft Windows XP
560 с.
Омельченко Л., Федоров А. Самоучитель Windows 2000 Professional
528 с.
Омельченко Л. Самоучитель Visual FoxPro 7.0
678 с.
Омельченко Л. Самоучитель Visual FoxPro 8 Пекарев Л. Самоучитель 3ds max 5
688 с. 336 с.
Полещук Н. Самоучитель AutoCAD 2002
608 с.
Полещук Н., Савельева В. Самоучитель AutoCAD 2004
640 с.
Поляк-Брагинский А. Сеть своими руками
320 с.
Поляк-Брагинский А. Сеть своими руками, 2-е изд.
432 с.
Понамарев В. Самоучитель Delphi 7 Studio
512 с.
Понамарев В. Самоучитель JBuilder 6/7
304 с.
Понамарев В. Самоучитель KYLIX
416 с.
Правин О. Правильный самоучитель работы на компьютере 2-е изд.
496 с.
Секуноа Н. Самоучитель С#
576 с,
Секунов Н. Самоучитель Visual C++ .NET (+дискета)
738 с.
Секунов Н. Самоучитель Visual C++ 6 (+дискета)
960 с,
Сироткин С., Малышев И., Воробьев С. Самоучитель WML и WMLScript
240 с.
Соломенчук В. Аппаратные средства персональных компьютеров
512 с.
Тайц А. М., Тайц А. А. Самоучитель Adobe Photoshop 7 (+дмскета)
688 с.
Тайц А. М., Тайц А. А. Самоучитель CorelDRAW 11
704 с.
Тихомиров Ю. Самоучитель MFC (+дискета)
640 с.
Токарев С. Самоучитель Macromedia Dreamweaver MX
544 с.
Токарев С. Самоучитель Macromedia Fireworks
448 с.
Трасковский А. Устройство, модернизация, ремонт IBM PC
608 с.
Трасковский А. Сбои и неполадки домашнего ПК
384 с.
Трусова В., Медведев Е. Музыкальная азбука на PC (+дискета)
496 с.
Федорова А. Самоучитель Adobe PageMaker 7
736 с.
Хабибуллин И. Самоучитель Java
464 с.
Хабибуллин И. Самоучитель XML
336 с.
Хомоненко А. Самоучитель Microsoft Word 2000
688 с.
Хомоненко А. Самоучитель Microsoft Word 2002
п2'' с
Хомоненко А., Хомоненко Н. Самоучитель Microsoft Word 2003
672 с.
Хомоненко А., Гофман В. Самоучитель Delphi
576 с.
Шапошников И. Самоучитель HTML 4
?Ш с
Шапошников И. Интернет. Быстрый старт
272 с.
Шапошников И. Самоучитель ASP.NET
368 с.
Шилдт Г. Самоучитель C++, 3-е изд. (+дискета)
688 с,
Серия "Учебное пособие" Арбузов, Гук, Соловьева И. И., Солонина А., Улахович Д. Основы цифровой обработки сигналов
576 с.
Белов Д. Л., Гаврилова Т. А., Частиков А. Разработка экспертных систем. Среда CLIPS
608 с.
Бенькович Е., Колесов Ю., Сениченков Ю. Практическое моделирование динамических систем (+CD-ROM)
464 с.
Бойко В. Схемотехника электронных систем. Аналоговые и импульсные устройства
450 с.
Бутиков Е. Оптика: Учебное пособие для студентов физических специальностей вузов
480 с.
Буль В. Электронные издания (+дискета)
560 с.
Гомоюнов К. Транзисторные цепи
240 с.
Грушвицкий Р., Мурсаев А., Угрюмое Е. Проектирование систем на микросхемах программируемой логики
608 с.
Доманова Ю., Черняк А. А., Черняк Ж. Высшая математика на базе Mathcad. Общий курс
608 с.
Дорот В., Новиков Ф. Толковый словарь современной компьютерной лексики, 2-е изд.
512 с.
Ирвин Дж., Харль Д. Передача данных в сетях: инженерный подход
448 с.
Иртегов Д. Введение в операционные системы
624 с,
Кочетов В., Кочетов М., Павленко А. Сопротивление материалов, 3-е издание
450 с.
Кузнецов А. В., Мельников О. И., Новиков В. А., Черняк А. А. Математика для экономистов на базе Mathcad
496 с.
Культин Н. C/C++ в задачах и примерах
288 с.
Культин Н. Turbo Pascal в задачах и примерах
256 с.
Малыхина М. Базы данных: основы, проектирование, использование
512 с.
Никулин Е. Компьютерная геометрия и алгоритмы машинной графики
560 с.
Порев В. Компьютерная графика
432 с.
Поршнев С. Вычислительная математика. Курс лекций
320 с.
Рапаков Г., Ржеуцкая С. Программирование на языке Pascal
480 с.
Романовский И. Дискретный анализ: Учебное пособие для студентов, специализирующихся по прикладной математике и информатике
320 с,
Сафронов И. Бейсик в задачах и примерах
224 с.
Сеннов А. Курс практической работы на ПК
576 с,
Солонина А., Улахович Д., Яковлев Л. Алгоритмы и процессоры цифровой обработки сигналов
464 с.
Солонина А. Основы цифровой обработки сигналов. Курс лекций
576 с.
Солонина А., Улахович Д., Яковлев Л. Цифровые процессоры обработки сигналов фирмы MOTOROLA
512 с,
Сорокина С., Тихонов А., Щербаков А. Программирование драйверов и систем безопасности
256 с.
Стешенко В. P-CAD, Технология проектирования печатных плат
720 с,
Суворова Е., Шейнин Ю. Проектирование цифровых систем на VHDL
576 с,
Титтел Э., Чеппел Л. TCP/IP. Учебный курс.(+СО)
976 с.'
Угрюмов Е. Цифровая схемотехника
528 с.
Ускова О. и др, Программирование алгоритмов обработки данных
192 с.
Частиков А., Гаврилова Т., Белов Д. Разработка экспертных систем, Среда CLIPS Чемоданова Т. Pro/Engineer: деталь, сборка,чертеж
608 с. 560 с.
Черняк А. и др. Математика для экономистов на базе Mathcad
496 с.
Хрящев В., Шилова Г. Моделирование и создание чертежей в системе AutoCAD
224 с.
Шелест В. Программирование
592 с.
Серия "Быстрый старт" Васильева В. Персональный компьютер, Быстрый старт
480 с.
Гофман В., Хомоненко A. Delphi. Быстрый старт
288 с.
Гридин В. В., Хомоненко A. Microsoft Access. Быстрый старт
304 с.
Дмитриева М. JavaScript. Быстрый старт
334 с.
Культин Н. Microsoft Excel. Быстрый старт
208 с.
Культин Н. Microsoft Word. Быстрый старт
176 с.
Хомоненко А., Гридин В. Microsoft Access. Быстрый старт
304 с.
Серия
"Экспресс-курс"
Васильева В. Обслуживание ПК своими руками. Экспресс-курс
320 с.
Дронов В. Macromedia Flash MX. Экспресс-курс
352 с.
Комолова Н. Adobe Photoshop CS. Экспресс-курс
384 с.
Лаптев В. C++ Экспресс курс
512 с.
Омельченко Л,, Федоров A. Microsoft Windows 98/ME/XP. Экспресс-курс
352 с.
Петюшкин A. HTML. Экспресс-курс
258 с.
Погорелое В. AutoCAD. Экспресс-курс
352 с.
Поляк-Брагинский А. Сеть под Windows. Экспресс-курс
336 с.
Понамарев В. Visual Basic, Net. Экспресс-курс
304 с.
Роэенталь М. Как собрать свой компьютер, 3-е изд.
256 с.
Федорова A. Adobe Illustrator CS. Экспресс-курс
368 с.
Серия "Научное издание" Воеводин В., Воеводин В. Параллельные вычисления
608 с.
Гуц Н., Изотов Б., Молдовян А., Молдовян Н. Криптография: скоростные шифры
496 с.
Касьянов В., Евстигнеев В. Графы в программировании: обработка, визуализация и применение
1104 с.
Молдовян А. и др. Криптография: скоростные шифры
496 с.
www.bhv.ru
Книги издательства "БХВ-Петербург" в продаже:
Магазин "Новая техническая книга": СПб., Измайловский пр., д. 29, тел. (812) 251-41-10 Отдел оптовых поставок: e-mail: [email protected]
Внесерийные книги Андрианов В., Соколов А. Автомобильные охранные системы. Справочное пособие Богданов-Катьков Н. Струйные принтеры для дома и офиса
272 с.
Бурлаков М. Macromedia Flash MX 2004: сборка видеоклипов Бутиков Е. Оптика: Учебное пособие для студентов физических специальностей вузов, 2-е изд.
720 с. 480 с.
Быков А. и др. ADEM CAD/CAM/TDM. Черчение, модернизация, механообработка (+CD-ROM) Гасфмлд Д. Строки, деревья и последовательности в алгоритмах Гольдштейн Б. Стек протоколов ОКС7. Подсистема ISUP: Справочник
320 с, 654 с. 480 с.
Гольдштейн Б. Интерфейсы V5.1 и V5.2. Справочник Гольдштейн Б. Системы коммутации
288 с. 318 с.
Гольдштейн Б. Call-центры и компьютерная телефония Гурова А. Герои меча и магии. По мотивам одноименной компьютерной игры
372 с. 320 с.
Живайкмн П. 600 звуковых и музыкальных программ Зыль С. Операционная система реального времени QNX: от теории к практике (+CD-ROM) Зыль С. Операционная система реального времени QNX: от теории к практике, 2-е изд. (+ прил. на CD)
624 с. 192 с.
Идельсон А., Кохась К. Задачи Санкт-Петербургской олимпиады школьников по математике 2003 год Карпюк В. MS Windows XP Professional. Опыт сдачи сертификационного экзамена 70-270 Коновалов Д. Знакомый английский
224 с.
Корнеев В., Киселев А. Современные микропроцессоры, 3-е изд. Малыхина М. Базы данных: основы, проектирование, использование Мещеряков М. Linux: инсталляция и основы работы (+CD-ROM)
448 с. 512 с. 144 с.
Палмер М., Синклер Р. Б. Проектирование и внедрение компьютерных сетей. Учебный курс 2-е изд.
240 с.
Петелин P. Adobe Audition. Обработка звука для цифрового видео (+CD) Петров Ю. П. Новые главы теории управления и компьютерных вычислений Пирогов В. Ю. Ассемблер для Windows.- 2-е изд
400 с. 192 с, 656 с.
Пирогов В. Ю. Ассемблер. Учебный курс. - 2-е изд., перераб. и доп Пог Д. MS Windows XP Home Edition: недокументированные возможности Попов А. Администрирование Windows с помощью WMI и WMIC (+CD-ROM)
1056 с. 768 с. 752 с.
224 с.
192 с.
528 с. 64 с.
Попов С. Аппаратные средства мультимедиа. Видеосистема PC Правим О. Правильный самоучитель работы на компьютере, 2-е изд. Прохоров А. Интернет: как это работает Роб П. Системы баз данных: проектирование, реализация и управление, 5-е изд. Роб П. Системы баз данных: проектирование, разработка и испеользование Робачевский А. Операционная система UNIX Романовский И. Дискретный анализ, 3-е изд. Скляров Д. Искусство защиты и взлома информации Соколов А., Андрианов В. Альтернатива сотовой связи: транкингоаые системы Соломенчук В. Интернет: поиск работы,учеба,гранты Соломенчук В. Как сделать карьеру с помощью Интернета Соломенчук В., Соломенчук П. Железо ПК 2004 Суворов К. А., Черемных М. Н. Справочник Delphi. Базовые классы Успенский И. Интернет как инструмент маркетинга Феличи Д. Типографика: шрифт, верстка, дизайн Фленов М, Библия Delphi (+ CD) Фленов М. Программирование в Delphi глазами хакера (+CD-ROM) Фрей Д. AutoCAD и AutoCAD LT для начинающих Частиков А. Архитекторы компьютерного мира Чеппел Л., Титтел Э. TCP/IP. Учебный курс (+CD-ROM) Шарыгин М. Сканеры и цифровые камеры
400 с. 496 с. 280 с. 299 с. 1200 с. 528 с. 320 с. 28В с. 448 с. 288 с. 416 с. 368 с. 576 с. 256 с. 360 с. 880 с. 368 с. 680 с. 384 с. 976 с. 384 с.
Магазин-салон -НОВАЯ ТЕХНИЧЕСКАЯ КНИГА' 190005, Санкт-Петербург, Измайловский пр., 29
В магазине представлена литература по компьютерным технологиям радиотехнике и электронике физике и математике экономике медицине и др.
Низкие цены Прямые поставки от издательств Ежедневное пополнение ассортимента Подарки и скидки покупателям Магазин работает с 10.00 до 20.00 без обеденного перерыва выходной день - воскресенье Тел.: (812)251-41-10, e-mail: [email protected]
САМФУЧИТЕ Microsoft
Подробное описание действий пользователя в процессе разработки таблиц, запросов, форм, отчетов, интерактивных Web-страниц доступа к данным и выполнение примеров, приведенных в книге, позволит самостоятельно освоить средства и получить устойчивые навыки по созданию баз данных и работе с ними. С этой книгой Вы быстро изучите программирование макросов и процедур на Visual Basic АЛЯ приложений. Благодаря понятному изложению материала, большому количеству иллюстраций Вы сможете создать собственное локальное приложение или приложение архитектуры "клиент-сервер" и эффективно работать сланными: публиковать в Интернете, обеспечивать просмотр и ввод новых данных в среде Web-браузера, быстро выполнять многомерный анализ и другие операции. Создатели книги имеют большой опыт работы и являются авторами многочисленных трудов в области информационных технологий. В настоящее время Бекаревич Юрий Борисович, преподаватель экономического факультета Санкт-Петербургского государственного университета - ведет курсы по системам управления базами данных и информатике. Пушкина Нина Васильевна, преподаватель Санкт-Петербургского государственного университета экономики и финансов - ведет курсы по информатике, по информационным системам и технологиям в экономике. Работая в системе повышения квалификации по методам и технике управления и обучая студентов в университете, авторы внесли значительный вклад в подготовку специалистов по автоматизированным системам управления предприятий и базам данных. С 1997 г. в издательстве "БХВ-Петербург" они выпустили ряд книг по СУБД Microsoft Access в сериях "В примерах", "Самоучитель", "За 30 занятий". iqRM я 441^7 4Г)^
БХВ-Петербург
E-mail: [email protected] Internet: www.bhv.ru
190005, Санкт-Петербург, Измайловский пр., 29
тел.: (812)251-42-44 факс: (812) 251-12-95
785941H574056I