This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Э а -
* - <S ''
9.1
и Form2: Form '"l
1
\
I
"
I
4
I
r
i
6
I
7
i
8
1
i
1 I
i
11
I
1
i l
i
nHeati
-i
Контрольно-измерительные приборы
i
2 i
J
4
1 t
Страны 14
For i F u j f e r
1 Рис 4 22
Таким образом, фактически кнопка в начальной форме уже создана Вам осталось тотько изменить ее имя и, если надо, размеры и шрифт Все эти операции вам уже знакомы выполнив их, вы выходите в окно, показанное на рис 4 21, и дальше повто ряете все действия, описанные в разделе «Командные кнопки» Все остапьные кноп ки, открывающие формы, вводятся в начальную форму аналогичным способом Немною иначе создается кнопка, которая закрывает начальную форму, то есть позволяет выйти из формы в окно базы данных В этом случае в окне мастера кно пок (см рис 4 17) следует выбрать в правом поле среди команд работы с формами вместо Open Form (Открыть форму) команду Close Form (Закрыть форму) В по явившемся окне (см рис 4 20) надо активизировать не Text, a Picture Тогда в пра вом поте этого окна вместо MSAccess Form появится ряд опций, среди которых НУЖНО выбрать Exit Когда вы завершите все описанные операции, кнопка закры тия начальной формы будет выглядеть так, как показано на рис 4 24 Если щелк, VTb п о этой кнопке, Access 2000 закроет начальную форму и выведет вас в окно оаз ы данных ''так, вы создали и кнопки для открытия всех форм, и кнопку закрытия начальи формы Останется только дать ей имя, ведь до сих пор ее рабочее название Form с каким-либо индексом (в нашем случае Form2) Это очень просто сделать Когда вы в первый раз захотите закрыть начальную форму с помощью кнопки xj, \с ss 2000 предложит вам назвать новую форму или согласиться с ее рабочим е м Здесь вы и введете свое название - Контрольно-измерительные приборы
74
Создание форм новой базы данных
l-lnlxi
1Ш Microsoft Access
^Jn|j^
Б Form2 : Form 1
1•
1
I
2
1
1 4
'
1
>
1
7
I
1
4
I
1
I
II
k
i
l
l
Form Hen jet
Контрольно-измерительные приборы
i
1
2
1
1•fDet d
1
1 • *
< "1
i
ComrnaricL'5
r
• Forr i Fuofer
1 A Рис 4 23 |g|x|
Ы Microsoft Access
• &a a a v
k£ • В
'
OD- I ? =S
a a v-
' 05-
с в а - >:
Ф\
^•.льр-
| В Контр ольно-измеритеАные приборы: Form
Контрольно-измерительные приборы
Страны
Фирмы
Менеджер
Назначение -
Типы приборов
Приборы
Щ*
1
«1
Рис 4 24
-Г1
Начальная форма при открытии базы данных или прилосожения
75
На рис 4 24 показано, как будет выглядеть начальнаая форма по завершении всех описанных операций Щелкнув по любой кнопке сг именем этой формы, вы можете открыть ее
Начальная форма при открытии б*азы данных или приложения Чтобы база данных открывалась из начальной формы, ну^жна небольшая настрой ка В меню Tools (Сервис) следует активизировать опицию Startup (Параметры запуска) В появившемся диалоговом окне (см рис 4 2 5 ) щелкните по стрелке прокрутки, и откроется список Выберите в этом списк е имя начальной формы и введите его в поле Display Form/Page (Отобразить форму/странииу) Startup Application Title
Di'pla/ Form/Paae
OK
|Кснтр льнг ичмеритс-пьмыр n i r n t _ - j Application Icon - |
Menu Bar Kdcfault^
Г
Di'fld ' D a t a t a ' f Window
Г
Display Statu--Ear
Z\
Cani? Advance ^ >
Shortcut Menu Bar
Л
Ifdr-fajlO
P^ Allow Full Menus
N7 Allow Built in Toilbars
W Allow Default Shortcut Menus
W Allo'V Tooltarj'Mrnu Char.Qr-i,
A
Рис 4 25
Затем, чтобы при открытии базы данных на экран не к ыводилось ее окно, сни мите флажок в поле Display Database Windows (Показать окно базы данных) Это не лишает вас возможности открыть окно базы данн ых, достаточно восполь зоваться кнопкой ©I на панели инструментов (evi, например, рис 4 20 или кла впатурной клавишей F11 Еще одна существеннгя детали внесенные изменения, показанные на рис 4 25, вступают в силу только при следующем открытии базы данных
Построение запросов для отбора нужных данных Одна из разновидностей запроса на выборку - (жльтр н а основе формы Базой Для него может служить любая заранее подготовленная форма В качестве при мера мы рассмотрим форму Приборы, котордя показана на рис 4 26 Она взята из реальной рабочей практики и содержит 173 записи, ка.к видно из окна номера записи Чтобы произвести фильтрацию по полю Приборы, щ;елкните по кнопке "й|, с помощью которой можно изменить фильтр, и все окна формы очистяТ-Я Форма готова к работе в режиме фильтра (см рис 4 27)
76
Создание форм новой базы данных l-tn|x|
ьЛ Mirrosoft Ас г ess File gdit View
Insert Format Record.
Wmduv
Hflu
©
J-
Uj 1-lDlx
Б Приборы
Назначение прибора
Вес кг
"3I
Назначение не указано
Примечание2
Характе РИС-ТИКИ Категория модель тип Фирма Цена $ I
(портативный
3
Checker В
3 3
рН-метр |ЗК0ХЕЛП И НСТРУМЕНТС
J
Карманный прибор фирмы HANNA без электрода с BNC-разьемом С вместимость с широким спектром различных рН-электродов Диапазон измереннии 0-10 рН Точность 0 2 рН Питание батареи на 3000 час
Пасса 52 6 г
42
№ по каталог;/ Примечание Год по каталог/ Цена! $ |
Г
0
Примечание! Новый тип прибора
Новая Фирма
Новое назначение прибора
Изменить запись
Удалить запись
^
• | и [»»[ of 172
Рис 4 26
Выберите поле, где вы зададите условия отбора, которому должны удовлетво рять записи, включаемые в итоговый набор записей. Установим два таких крите рия: Назначение (в данном случае приборы для контроля кислотности) и Фир мы (нас интересуют лишь те приборы, которые выпускаются фирмой ORION). Сначала задайте условие для поля Назначение. Справа от него находится стрел ка прокрутки. Щелкните по ней, и на фоне формы появится список назначений (см. рис. 4.28). Выберите опцию Измерение кислотности, и этот критерий будет зафиксирован в поле. Точно так же задайте в поле Фирмы позицию ORION. В результате в двух полях формы появятся установленные вами условия, или критерии отбора (см. рис. 4.29). Это будет соответствовать логической схеме «И». Если вы хотите сохранить записи, отобранные в результате запроса, щелкните по кнопке й | (сохранить как запрос) на панели инструментов. На экране появит ся окно Save As Query (Сохраненить в виде запроса), в котором предлагается имя сохраняемого запроса. Либо примите предлагаемое название, либо введите иное. Во втором случае программа иногда может сообщить, что запрос с таким названи ем уже существует. Тогда следует заменить предыдущий запрос. Кнопка @| воз никает на панели инструментов только на данном этапе работы, поэтому щелк нуть по ней надо именно здесь.
Построение запросов для отбора нужных данных
ЕШЗ
Q Microsoft Access PIIP Ed
77
v Insert R l t f
Tiols Wirdo* Help
В Приборы: Filter by Form
Назначение прибора
Вес кг
^3
Примечание2 Характеристики
категория г i цель
1 |
1
тип Фирма Црна i
3
1
J 3
|
№ по каталогу Г[.имечание Год по каталогу ^на! $ 1 «—и.
Ггимечание'
з" Рис 4 27
Теперь можно выполнить подготовленный запрос. Для этого щелкните по кноп ке v | (Применение фильтра). В полях формы появятся значения полей одной из отобранных записей (см. рис. 4.30). Это будет та же самая форма Записи, но со держащая все данные (см. поле номера записи), которые были отобраны на осно ве заданного фильтра. В поле номера появившейся записи вы увидите ее номер и общее количество отобранных (отфильтрованных) записей. Переходя от одной записи к другой, вы «листаете» их так же, как делали это в начальной форме. За прос, который вы только что сохранили, заносится в виде таблицы под заданным вами именем в окне базы данных во вкладку Queries. При необходимости вы мо жете ввести на данном этапе работы новьге условия отбора, уменьшая количество итоговых записей. Это делается с помощью описанных выше кнопок, расположен ных на панели инструментов. Предположим, вы хотите отфильтровывать записи последовательно, от шага к шагу задавая дополнительные условия в новых полях и постепенно снижая чис ло отобранных записей. В таком случае повторяйте описанные выше действия, на чиная с щелчка по кнопке JjjJ (Изменить фильтр) Чтобы вернуться к исходному состоянию формы и подготовить ее к обработке нового запроса на выборку, щелкните по кнопке JTJ (Удалить фильтр) на панели инструментов.
78
Создание форм новой базы донных
В Microsoft Access File? Edit t i e . " In si t Filter Tr.nl. Window Help
© a Dcjy
i' L
•"' Qo,e X V S -о г" • an •
Л • l-'.l . og . g .
H Приборы: Filter by Form Назначение прибора
Вес кг
"3
Примечэние2 Характеристики
Анализ воздуха на содержание аэрозолей и кислых газов анализ биообъектов _i Анализ летучих органических соединений (бензол толуол трихлорэтилен кснпол трихлорбензол) е поверхностных е Анализ летучих органических соединений (бензол толуол трихлорэтилен ксилол хлорбензол) в поверхностных ВОДЕ Анализ нелетучих гербицидов производных фенола, алкилсульфидов ионов тяжелых металлов и некоторых редких а Долговременный мониторинг растворенного кислородапроводимости солености кислотности температуры общей! Измерение растворенного кислорода температуры проводимости солености кислотности общей концентрации в П| Измерение аммония ^ __^_ Измерение кислотности
Цена$ Н- по каталог-/ Примечание Год по каталогу Цена! $ Примечание!
Рис 4 28
Итак, повторим и сведем воедино основные правила отбора (фильтрации) за писей с помощью формы: • отбор может осуществляться по нескольким условиям, как задаваемым од новременно (схема «И»), так и взаимоисключающим (схема «ИЛИ»); • если одновременно задать различные критерии отбора в нескольких полях (схема «И»), фильтр будет возвращать только те записи, в которых каждое из полей отвечает всем указанным условиям; • предположим, вы хотите указать несколько значений, которые запись, вклю чаемая в результирующий набор, может содержать в одном поле (схема «ИЛИ»), Выберите вкладку Ог (ИЛИ) (ее ярлычок находится в левом ниж нем углу окна). Фильтр будет возвращать записи, которые содержат в полях: - все значения, указанные во вкладке Look for (Найти для...); - все значения, указанные в первой вкладке Or; - все значения, указанные во второй вкладке Or, и т.д.; •
чтобы найти записи, имеющие в конкретном поле (в данном случае в поле без списка) пустые или непустые значения, введите в него выражение Is Null или Is Not Null1.
Величина поля, которому ЕЮ присвоено никакого значения. Отмстим, что она не яиляется эквивален том числа 0 или пустой строки
79
Ввод и корректировке данных
дВЗШШЗШШШШШШШШШШ^ШШШШ^Ш
ГЛ5Ш
File £dit View Insert Filter Jooh Window Help
& Q
.
< ibi
••' -
ciu-.e x 7 0 a -
L].
ош>
В Приборы: Filter by Form
Назначение прибора
Вес кг
"3
'И иерениекислотности'
Примечание^' <арактеристики
Категория
d
МОДеЛЬ
~3
тип Фирма
"3
Цена $ | N" по каталог)' Примечание Гол по каталогу Цена! $ | Примечание!
15
J Рис 4 29
Ввод и корректировка данных Как уже говорилось, для ввода новых данных иногда используются таблицы, но удобнее применять для этой цели формы. Рассмотрим такую возможность на примере формы Приборы, с которой вы ра ботали в предыдущем разделе. Выведите ее на экран. Теперь с помощью кнопки в поле номера записи задайте его максимально возможное значение (см. рис. 4.31). Всего в форме имеется 173 записи; значит, установите указатель на цифре 174. Как правило, перед вводом новых записей в основную форму необходимо предварительно пополнить или обновить словари (формы Страны, Фирмы, Типы приборов, Назначение). От крыть перечисленные формы можно как по отдельности, из их собственных окон, так и из формы Приборы. Рассмотрим последний вариант. Для подобных случаев в форме Приборы есть кнопки Новый тип прибора, Но вая фирма, Новое назначение прибора. Механизм их создания подробно обсуж ден выше. Предположим, что перед вводом новой записи по приборам необходимо ввести новые записи в словарные формы Страны и Фирмы. Начнем с последней. Щелкните по кнопке Новая фирма. На экране появится форма Фирмы, гото вая для ввода новой записи: все поля пусты, а в поле номера записи установлено
80
Создание форм новой базы данных
ЕШП
Ы Microsoft Access Tools
] File Edif View Insert Format
Window
H^l,_
i D c& e & a vM, • и в a v -
•
*
21
'il/'
"a v w • •
d-
g
назначение прииира IU
"3 ~2
кислотности
Категория модель тип Фирма
|портативныи
J
|[Иодель 265
-\
рН-метр JORION
Прим~чание2 Характеристики Полностью влагозащищенныи портативно рН-метр Встроенная память на 60 измерении Выход - интерфейс R5232 Точность по рН - 0 005 по напряжению-0 rnV по температуре - 0 1 ОМожет d комплектоваться полным набором пoлeвt zi принадлежностей
Цена$ I № по каталогу
яшнШш
Примечание Год по каталог/
1 mi
Цена1 $ 1 ••г Примечание Новый тип прибора
Новая фирма
Новое назначение прибора
>•! of -a (Filtered)
Изменить запись
Удалить запись
J T
_Г1Г Рис 4 30
значение 27, тогда как всего в словаре Фирмы 26 значений (см. рис. 4.32). Если вам не требуется заносить новое значение в словарь Страны, вводите новую фир му, которая зарегистрирована в одной из стран, уже включенных в этот словарь Если надо ввести также и новое значение страны, то в окне формы Фирмы (см рис. 4.32) следует щелкнуть по кнопке Новая страна. В результате на фоне двух предыдущих форм откроется форма Страны, готовая к вводу информации. Вне сите в поле Страна наименование страны - например, Португалия (см. рис. 4.33) Порядковый номер, выполняющий здесь функцию кода, вводится автоматичес ки. Затем воспользуйтесь клавишей Enter на клавиатуре. Теперь можно вносить текст в следующее поле - Примечания. После повторного нажатия клавиши Enter форма Страны закрывается. Далее введите название фирмы в соответствующее поле формы Фирмы (см. рис. 4.32). Новой фирме должна соответствовать страна, поэтому щелкните по стрелке прокрутки в этом поле и выберите любую страну из раскрывшегося контекстного списка. Обратите внимание, что в нем уже со держится и недавно введенная Португалия (см. рис. 4.34). Выбрав страну, введи те в одноименное поле название фирмы (в нашем примере - TAAG). Точно так же вы должны действовать, вводя запись о новом приборе в форме Приборы (см. рис. 4.35). Во все поля, содержащие стрелки прокрутки, данные можно включать двумя способами. Первый: вы выбираете нужную позицию из списка. (Так, в контекстном списке фирм, показанном на рис. 4.35, уже содержится
81
Ввод и корректировка данных
EMU Fj\t! Edt View Lnsert Fnrmat Records lools Window Help
D GS H - & E i "'• Назначение прибора
ТЗ 3
Примечание2 Характеристики
"3
Категория модель
3
тип
ЦенэЗ
11
~з
Фирма I
№ по каталогу Примечание Год по каталог,'
Цена! $ I Примечание! Новый
Нивая Фирма
Новое назначение прибора
Изменить запись
Удалить запись
Прибора 1"1 • ! °< " 4
Рис 4 31
новая фирма TAAG.) Второй вариант: вы вводите данные с помощью клавиа туры. При необходимости вы таким же образом вводите новые позиции в словарные формы Типы приборов и Назначение. В поля, не имеющие стрелок прокрутки, данные вводятся с клавиатуры. Так, в поле Вес, кг указано числовое значение 14. После ввода всех необходимых сведений нажмите клавишу Enter, чтобы запом нить все сделанные изменения. Форму можно использовать не только для ввода, но и для удаления информа ции. Обратите внимание, что каждая из форм, показанных на рис. 4.30-4.35, вклю чает кнопки Изменить запись и Удалить запись. Для корректировки данных от кройте нужную запись, произведите необходимые изменения, а затем с помощью клавиши Enter отдайте программе команду запомнить их. При удалении записи сначала откройте ее, а потом просто щелкните по кнопке Удалить запись. Итак, в этом разделе мы стремились показать, что формы - очень мощный и гиб кий инструмент работы с данными. Однако в ряде случаев (например, при подго товке формы для ввода, корректировки и удаления данных) штатного про граммного обеспечения Access 2000 может быть недостаточно для выполнения необходимых операций. Это легко объяснить: проблемы, которые возникают в по добных ситуациях, часто оказываются специфическими, и их решение не всегда предусмотрено стандартными программными средствами.
82
Создание форм новой базы данных l-lnlx
Ш Microsoft Access - [Фирмы] d
File £dit View Insert Format Records loots V^iridiv* Help
D ^ Q
SEi?
i/
й-и s a y Код Фиомы
' >i
• r>a •
og
t ^' -n •- $i \\ ъъ
- C7J .
*& •• *
© j -
0-
27
~Б
Название фирмы Стоана Апоес Ааэес2
Примечания
Изменить запись
Удалить запись
Но^ая страна
WI» Рис 4 32
В данном случае вы имеем дело именно с такой ситуацией Чтобы выполнить ряд функций, необходимо использовать не только язык запросов (SQL), no и мак росы, а также средства языка Visual Basic for Application (VBA) Подробнее об этом пойдет речь в главах 10 и 11
Использование гиперссылок Использование гиперссылок рассматривается здесь на примере работы с геогра фическими картами
Access и географические карты В ряде случаев сопряжение базы данных с географическими картами совершенно необходимо Однако такая функция в самой системе Access, взятой отдельно, не предусмотрена Если же рассматривать Access как часть программного продукта Microsoft Office, то некоторые возможности для работы с картами все-таки име ются В составе Microsoft Excel, входящем в пакет Microsoft Office, есть программ ный модуль Microsoft Map, предназначенный для отображения данных на гео графических картах Однако на практике пользоваться этой программой очень неудобно Во-первых, Microsoft Map работает только с картами формата MAP который поддерживается лишь в программных продуктах корпорации Maplnlo
83
Использование гиперссылок И Micro 5 ™* Access f\
Ed t Mew trrert Format P e c i r k
QtjU
S B »
T L : ) L ^/ndib/
°
Help
'DO-
=g
- 0 .
0JOj_Xj
I Фирмы К о п Фиомы
шш
На Код
Португалия
Страна
Кате i моден
Примечания тип Фи| г
Удалить
11
Изменить запись Г
Изменить
• ! • I " ! °< 11
Удалить запись ~
Ниеая страна
> | " | > « | ОТ 27
Рис 4 33
(1акой монополизм, как вы понимаете, создает для пользователя ряд трудностей) Во-вторых, программист вынужден постоянно переносить карты и другую инфор мацию из Access в Excel и обратно В настоящем разделе книги мы покажем, что возможен принципиально иной способ работы с картой в системе Access С по мощью гиперссылок - полей связи в базе данных Access - пользователь свобод но и быстро переходит к документу в сети Internet, в локальной сети или в теку щей базе данных, да и вообще практически к любому документу в самой системе Microsoft Office и вне ее Верно и обратное используя гиперссылки, вы можете перейти из любого документа в форму или табпицу базы данных Access
Поиск карты Выше уже говорилось, что Excel предъявляет к картам довольно жесткие требова ния Предлагаемая технология использования гиперссылок, напротив, допускает работу с любой картой в любом формате, если ее можно вывести на экран мо нитора Затем надо сделать снимок карты с помощью таких программ, как Adobe ' hotoShop, Screen Print Gold, HyperSnab-DxPro и др (которые не входят в состав Microsoft Office) Теперь можно конвертировать карту в любой нужный графи ческий формат Чтобы впоследствии у вас не возникало трудностей в работе с кар той в Access 2000, поместите ее из полученного файла в окно, открытое в Word 97 или й Word 2000 Карта будет иметь формат DOC Конвертированные таким образом
84
Создание форм новой базы данных
Ы Microsoft Access File- Edit View
Inceit
Former
Records
a ei Q ; <s a v
lindj.v
Help
i• " В
ПИ Прибор!
Г
E Фирмы
Коп Фиомы
мо дел тип
~3
ITAAG
~3
Страна Адрес Ааоес2
Фирг,
• гч .
шш
27
Название фирмы Катег
J
гз-
Германия Италия Россия США
Финляндия Франция Швейцария Португалия
Цена; Примечания
Изменить запись
Удалить I Запись
Новая страна I
•|"|"|<"27
Рис 4 34
файлы в формате DOC показаны на рис. 4.36 (для Архангельской области) и 4.37 (для Ленинградской области). В нашем примере для конвертирования были использованы карты, разработан ные в ФАПСИ и входящие в составе одного из банков данных по ЧС (он рассмат ривается в настоящей книге). Автор не участвовал в создании этих карт, и сначала они вовсе не предназначались для конвертирования - лишний аргумент в пользу того, что для подобных целей пригодны практически любые географические карты
Установка гиперссылок в базе данных Откройте таблицу Filel. Обратите внимание на поля Название области и Назва ние города (для наглядности они поставлены рядом, как показано на рис. 4.38) Две самые первые записи касаются Ленинградской (Санкт-Петербург) и Архан гельской (Архангельск) областей. Сформируйте гиперссылку, которая позволяла бы, например, из каждой стро ки быстро выйти в соответствующую карту. Для гиперссылки необходимо от дельное поле. Создайте его и назовите Карта, а затем определите его в конструк торе таблиц как поле гиперссылки (см. рис. 4.38). Теперь подготовка завершена, и можно непосредственно вводить гиперссылку. Как только вы устанавливаете курсор в новоиспеченное поле Карта, активизируется кнопка %\ - Insert HyperLink (Вставить гиперссылку). Щелкнув по ней, вы вызовете одноименное
85
Использование гиперссылок
Щх r^ pi|p ETdit View
Insei t F o r m a t
Re-Lurd.?
Tools
Window
sJiU
H>=lp
L'J.
© аНазначение прибора
Э-
14
Вес кг ~3
[ l_r IP._ рние гцюеодииости
Примечание2 Характеристики
Категория
[портативный
3
"3
тип
(шва
Фирма
Ч Г|
u
|
з 'У"«'.--
v/ilks Enterprise Inc YSI incorporated АО "ЭКРОС" ГЕОХИРАН Нефть-Гаэ-Наука НПГГ'ЭКОНИКС ОАО "Цвет"
4.зние
ь|
Прим « н и е !
Новая ?ирма
Новый ТИП
•-••*.
N° по каталогу ,
fflf^»^^
•-
••'•"•К"™
Год по каталогу
Н овое назначение прибора
Изменить запись
Удалить запить
прибора 1-4
i | > | | > » | of
171
lL
^L
Рис 4 35
окно (см. рис, 4.39) В нем вы можете ввести следующие варианты ссылок (Link To): • • • •
Existing File or Web page (Существующий файл или страница Internet); Object in This Database (Объект текущей базы данных); Create New Page (Новая страница); E-mail Address (Адрес электронной почты).
В рассматриваемом примере вы имеете дело с уже существующим файлом кар ты (допустим, это Архангельская область). Он расположен по адресу: С:\Мои документы\Мои рисунки\Архангельская областьЛос Поэтому следует воспользоваться вкладкой Existing File or Web page (Суще ствующий файл или страница Internet). Указанный выше адрес вводится в поле, к УДа Access 2000 предлагает поместить данные: Type the file or Web page name (Вве дите имя файла или Web-страницы1). Ввести адрес можно с помощью либо клавиа туры, либо кнопки Browse for => File (Просмотр => Файл) на рис. 4.39. Тем самым адрес включается в список, который раскрывается в этом же окне щелчком по стрел ке прокрутки и появляется в соответствующей строке поля Карта (см. рис. 4.38). ™eb, И'ш W W W ( W o r l d Wide W e b - Всемирная паутина), ( H T M L ) документов, которые размещены на серверах Internet
совокупность всех гипертекстовых
86
Создание форм новой базы донных
Рис 4 36 Если вы откроете теперь какую-либо форму, содержащую поле Карта, то обнару жите в нем такую же, как и выше, гиперссылку с теми же функциями (см. рис. 4.40) Однако помните, что поле гиперссылки не создается в форме автоматически: его надо включить туда с помощью мастера, конструктора и других уже известных вам средств. Итак, гиперссылка создана и введена. Обратите внимание на то, что гиперссыл ку можно создать из каждой записи в любой файл или его точку. Если вы теперь поставите в поле гиперссылки указатель мыши (при этом кур сор примет вид указательного пальца) и щелкнете, то мгновенно переместитесь в требуемый файл - в данном случае в карту Архангельской области, показанную на рис. 4.36 Если вы хотите выйти в заранее заданную точку этой карты, то предварительно следует открыть стандартную панель Рисование в программе Word и пометить нужную точку Затем оформите ее как закладку и укажите имя закладки в адресе гиперссылки, добавив символ #. НапримерС - \Мои документы\Мои рисунки\Архангельская область.doc#al Здесь al - название закладки
Установка гиперссылки из карты в базу данных Примерно так же можно построить и обратную гиперссылку - из карты в баз\ данных Сама карта в формате DOC уже является гиперссылкой (чтобы убедиться
87
Использование гиперссылок
Рис 4 37
в этим, достаточно открыть файл карты в Word и увидеть там курсор в виде указа тельного пальца). Она позволяет переместиться по любому адресу, если после дний включен в список, который раскрывается при щелчке по стрелке в поле Ад рес на панели инструментов. Вопрос только в том, как ввести нужный адрес в этот список Щелкните по уже знакомой вам кнопке <&| - Insert HyperLink (Вставить ги перссылку) В результате на экране появится другое поле с тем же названием Пусть вас не смущает то, что в данном случае оно русское - Добавить гиперссыл ку (Дело в том, что карты конвертированы не в Access 2000, а в русифицированной версии Word 97 ) В верхнее поле названного окна вводится адрес гиперссылки, ко торый обеспечивает переход в базу данных. Как и раньше, для этого есть два спосо ба набрать адрес с помощью клавиатуры либо выбрать его из списка, который от крывается при щелчке по кнопке Обзор. В нашем случае этот адрес будет таким: С:\Мои документы\Мои рисунки\Архангельская область doc#Form ЧС (Элемент Form ЧС предназначен для открытия формы ЧС непосредственно Ри переходе по гиперссылке.) Теперь щелкните по кнопке ОК, и адрес будет вне сен в список, показанный в окне карты (см. рис. 4 42) Вновь, как и в предыдущем Разделе, гиперссылка создана. Чтобы запустить ее, надо открыть список, найти ее адрес и нажать клавишу Enter. Форма ЧС (см. рис. 4 40) откроется непосредствен110 и* карты Точно таким же способом можно открыть и таблицу. п
88
Создоние форм новой базы данных
Q Microsoft Access File Ed г
Ё^
View
Insert ( : orrnat Records
aay
Tools Window
Help
X R5 IB
Filel: Table Нздизннд области
+ >X © £ • \2) .
ъ
| Название города |
шш Карта
САНКТ ПЕТЕРБУР С \Мои документы^! 1ои р и с у н к и У П р н и н г р ^ д г ы я о
г Санкт Петербург Архангельская область
АРХАНГЕЛЬСК
J3
1
С \Мои д о к у и е н т ы \ М п ц рисунки' А р к я н г е л ы t а* оЬгпсть
Тюменская область Калининградская область К А Л И Н И Н Г Р А Д (К Коми ССР Коми ССР Республика Саха (Якутия ЯКУТСК Калининградская область К А Л И Н И Н Г Р А Д (К г Москва Владимирская область Ростовская область Владимирская область
ДОМОДЕДОВО МОСКВА МОСКВА МОСКВА
Московская область г Москва г Москва г Москва ;old к |
Л
^
_d
I и |»»| of 846
ЕГ Рис 4 38 Insert Hyperlink Link to
7>xt to drplaj/
| _ \f1on д . ументь! \Мги рисунки мр/анг^нь к^я
ЯсгеепТ|С_
Tvpe th<=* file.or Web page name I,MLM ДОК^ МРНТЫ\МИИ рисунги\Архангельская область doc
Ьгс A>se fcr
select Frcm li<*
Q
Recent File-
© Browsed a Inserted «tinls
rile fffC /Мои%20документы/Банки%20даммыхи^. Fie tile jffC /Мои%20документы/Банки%20данных С \Мои документы\Банки данных^Ы mdb#Fon Web PdQe fil-= ///С /Мои%20документы/6 энки%20даннь СДМои документьцМои рисумки\Архангелы:ка tile ///С /Мои%20документы/Банки%20даммых \Мои документы\Мои рисунки\Ленинградо а \Мои документы\Бамки данных^Ы mdb#Tab hie ///С /Мои%20 документы/Рис 1 doc <~ \Мои документы\Рис1 doc _*J Bookmark
Рис 4 39
89
Использование гиперссылок
HME
В Microsoft Access File Edit Vien1 In^ei t Format Rei-urd., Tools Window H-\p v
£1 51
/ -Й
•*
Й'
©
?l
ГдШ ВиаыЧС
(10305
Наименован Обнаружение разлитии ртути е здании ДатаЧЭС
Последствие Пострадавших нет
2/09/1935 Название го LAHKT ПЕТЕРБУРГ
Время ЧЭС
00 00 Карта
С \Мои док4менты\Мои ри<
Название об г Санкт Петере чрг Название pa г Санкт Петерб-ipr Р ы ^ ч р г с ш н р с Пострадало
и
Погиоло
0
Характерист В здании Парголовского комитета по земельной Материальн1 ecord
'•'•Ш 1
н | -* | |~~
» I >• l»»l of 84в J
Рис 4 40
И
Добавить гиперсеьику Связать с файлом/URL ]С \М и дп| >мРнты\Еанки данных'|±1 гп±#Ригп Ч( | —
о , ^ p4J®1 * — |П/ть
_^J
Об^
Еведите или выберите гт>ть к док МРНТ/ на котирый будет у\ з ывать ссыпка ?то МОЧ'РТ быть адс^ Интернета (URL) или документ на жестком или сетевом диске \£анки данныхИМ rndb#Form НС
Ймч объекта в документе ^ББПДИТЬ НРППД^ 3 ТРПЬН-И
Об^ор , ,л ^а * sЬ]
ЧтоЬы перейти к конкретному объе^ ту в джумрнте ('акладке, именованному диапазон , объекту ба^ы данных или слайд у \, надо указать имя зтого сегекта
| р Игполкдоеать для гиперссылки относительный п/ть OV
Рис 4 41
Отмена
90
Создание форм новой базы данных
IV Microsoft Word - Архангельская oojncTb.doc
Рис 4 42
Резюме 1. В отличие от таблиц, формы - это элементы, как правило, получаемые i «на выходе» базы данных. Обычно они используются для получения oil'' тов на запросы пользователя. Но формы могут применяться для также ид записи данных в таблицы и/или изменения этих данных при их вводе лп< корректировке. 2. Для получения стандартных, типовых форм можно использовать автоформы это очень просто, однако структура такой формы будет жестко привязана к < ной или нескольким исходным таблицам. Несколько сложнее создание фор,\ с помощью мастера форм или конструктора, но в этом случае ее структура буд значительно более гибкой и разнообразной 3. Содержание и структура формы изменяются в соответствии с запросами, к торые формирует пользователь. Возможности форм значительно расшир ются за счет использования гпперссылок (в частности включения географ ческих карт), рисунков и др. 4. Для создания начальной формы БД удобно использовать конструктор фор Начальная форма в базе данных играет роль одновременно титульного Л1Ь та и оглавления в книге. Открыв эту форму и, следовательно, саму базу да! ных, пользователь может затем выйти из начальной формы в любую необх< димую точку БД.
Глава V Создание отчетов новой базы д а н н ы х •
Использование функции автоотчета
•
Включение подчиненного отчета
• Группировка записей • Статическая копия отчета В Access 2000 отчет создается почти так же, как форма. Разница между этими дву мя объектами базы данных состоит не в технологии их построения, а в их целевом назначении. Если с формой пользователь будет работать на экране, то отчет пред назначен для печати и представляет ценность как материальная копия документа, полученного из базы данных. Предусмотрены следующие стандартные способы формирования отчета (как видите, они аналогичны способам построения форм):
!
• • •
с помощью автоотчета; с помощью мастера; с помощью конструктора;
• с помощью запросов.
1)-
Именно по указанной выше причине здесь рассматривается только формиро вание отчета с помощью аетоотчета, а также включение в отчет подчиненной форМы. Работа с запросами будет проанализирована в главе 9. Однако в работе с отчетами все-таки есть свои нюансы. В отличие от форм, с отчетами возможны следующие операции:
92
Создание отчетов новой базы данных
а создание и использование статических копий отчета; • группировка данных в отчете.
Использование функции автоотчета Отчет, созданный таким образом, будет отображать все поля и записи базово таблицы или запроса. В разделе Objects (Объекты) окна базы данных щелкните сначала по кнопке Ш Reports! (см. рис. 5.1), а затем по кнопке New (Новый). На экране возникш i окно New Report (Новый отчет), как показано на рис. 5.1. В окне надо выбран, следующие параметры: •
способ построения отчета - в данном случае автоотчет, который можно i. строить в одном из двух вариантов: - Columnar (В столбец); - Tabular (Ленточный);
Q таблицу или запрос, на основе которых будет создан отчет. В нашем слу выбирается таблица Приборы, представленные на рынке, так как она с держит максимум информации. Задав эти параметры и щелкнув по кнопке ОК, вы получите заказанный ( i чет в виде столбца, как показано на рис. 5.2. На рисунке представлена перв.1, страница отчета. В действительности, если вы захотите его распечатать, он С' дет расположен в соответствии с рис. 5.3, где показано несколько начальных страниц отчета.
Включение подчиненного отчета Рассмотрим эту возможность на примере хорошо знакомой вам пары таблиц Страны (основная) и Фирмы (подчиненная). Создадим отчет на основе первоп таблицы, а затем включим в него подчиненный отчет на базе второй. Первую часть задачи вы решите с помощью автоотчета, как было рассмотрено выше. Результат вашей работы показан на рис. 5.4. Сохраните полученный отче г под именем Страны. Теперь надо вставить в него подотчет Фирмы так, чтобы в итоговом документе фирмы были сгруппированы по странам, в которых находятся. Откройте только что созданный отчет Страны в режиме конструктора (Design view). Убедитесь, что кнопка vS\ - Control Wizard (мастера) - активизирована. За тем на панели управления конструктора щелкните по кнопке ш] - Subform/Subreport (Подчиненная форма/отчет). Теперь на поле конструктора в области дан ных Detail выберите точку, к которой следует «привязать» подотчет. Если в облас i ч данных не хватает места, перетащите нижнюю рамку области данных вниз. Koi да вы определите нужную точку, на экране возникнет окно конструктора отчетов (см. рис. 5.5), который сообщит вам: You can use an existing form to create your subform or subreport, or create your own using tables and/or queries
93
Включение подчиненного отчета
New Report Oei.ign View Peport Wizaid AutoReport: Tabular Chart Wizard Label Wizard
llThi-j wizard automatically fcreates a columnar report.
jhoose the table or query where Ъе obiect's data comes from:
Приборы, предстаеленныа
OK
cancel
Рис. 5. 1
(Для создания подчиненного отчета вы можете использовать существующую форму или создать свою). Также конструктор поинтересуется: What data would you like to use for your subform and subreport? (Какие данные вы хотите использо вать для подчиненного отчета?). ПШ2
ы Microsoft Access - [Приборы, представленные на рынке2]
а •
в
Оосе
» - ©
J •
Приборы, представленные Код
15) .
~3
на рынке2
|
Номер модели
|:hed<er в
Категория
fioj
Примечание I Примечание! Год но каталогу
\ 1
Характеристики Карманный прибор фирмы HANNA6ea электрода с BNCэв J ъемом 2вмесгимлсть с широким спектром различны* рМ• электродов Диапазон иэмеренний 0-10 рН Точность 0,2 рН Питание батареи на 3000 час Насев 52,6 г 5еэ электрода с BNC -разъемом Z вместимость с ш ироким спектром различных рНэлектродов Диапазон иэмеренний 0-1 ОрН Точность 0,2 рН Питание батареи на 3000 час Насса 52,6 г
*J
Цена 1$ Вес*г Код тика '•it:
Пвикч ание
i :^ffffflif''-\r "в" *
Рис. 5.2
"*• *
А
94
[м - a' Р и ш ш F,t
Создание отчетов новой базы данных
- •_!_. - * • в а - © -
Рис. 5.3 Форма для подчиненного отчета у вас уже есть - Фирмы Subform, поэтом используйте ее: Use an existing report or form. Если вы намерены создать со' ственную форму, то выберите другую позицию: Use existing Tables and Queries Теперь щелкните по кнопке Next, чтобы перейти в следующее окно конструктора (см. рис. 5.6). Здесь вы должны ответить на вопрос: Would you like to define which fields link your main form to this subform yourself, or choose from the list below? (Вы хотите сами задать поля, которые будут связывать основной и подчиненный отчеты, или выбрать эти поля из приведенного ниже списка?). В поле, где показан этот список (он включает две позиции), выберите опцию Show Фирмы for each record in Страны using Код (Показать Фирмы для каждой записи таблицы Страны, используя Код). Если теперь вы щелкнете по кнопке Finish, то вернетесь в область данных конструктора, но с дополнением в виде под чиненной формы. Чтобы взглянуть на окончательный вариант отчета, вам остает ся сделать последнее усилие, то есть щелкнуть по кнопке Bt»| - View (Просмот р)
95
Группировка записей
шш
В Microsoft Access
шшJ з
IS Страны
Страны AM
|33
|
Страна
pSA
|
Примечания
|
AM
И
|
Страна
|Германия
|
Примечания
\
Код
р5
|
Страна
|италия
|
Примечания
\
|
\
\
Код
|зе
|
Страна
росейя
|
Примечания Код Page _ Ы |
~ •• I ' I
£
A
ы РИС
54
на панели инструментов окна базы данных. Полученный отчет, который имеет иерархическую структуру, показан на рис. 5.7.
Группировка записей Приведенный выше отчет с его структурой является также одной из форм орга низации записей. Однако группировать данные можно и более привычным спосооом, то есть с помощью мастера отчетов. Его запуск и начало работы осуществля ется почти так же, как аналогичные действия при использовании мастеров таблиц и форм. Разница состоит в том, что для запуска мастера отчетов в разделе Objects (Объекты) окна базы данных надо щелкнуть сначала по кнопке д Reports |, а за тем по кнопке New (Новый). Но в окне New Form (Новая форма), которое поЯв ится на экране (см. рис. 4.1), теперь надо активизировать опцию Report Wizard (Мастер отчетов). В нижнем поле того же окна New Form вы можете выбрать табЛи Чу; она станет первой из тех таблиц, на которых будет основан создаваемый
96
Создоние отчетов новой базы данных Sub Report Wizard You can use an existing form to create your subform or subrepott, or create your own using tables and/or queries
What data would you like to use for your subform or subreport"'
<~ Use existing Tables and Queries <* Use an existing report or form Назначение Приборы Страны Страны 1 Типы Приборов Фирмы ; Фирмы Subform Экологические приборы
Cancel
Form Form Form Form Form Form Form Form
J
•
1
Next >
Finish
Рис 5 5 Sub Rep art Wizard Would you like to define which fields link, your mam form to this subform yourself; or choose from the list below?
^
Choose from a list.
Define my own
iShow Фирмы for each record in Страны usina Код None
• Cancel
1 Щ
Next:
Finish
Рис 5 6
отчет. Правда, мы все-таки советуем сделать это в следующем окне, так как в не^ можно выбрать поля более, чем из одной таблицы. Наконец, и при выборе полеи включаемых в формируемый документ (см. рис. 4.4-4.5), начальные этапы рабо ты те же, только везде вместо формы речь идет об отчете. Действительно важные
97
Группировка записей
ШШ g - <Э Р О Ш Щ
'О00'»
- Close
ИГ , g ] j .
P7| .
шш
g Страны
73
Страны
"К
Код Страна
1
[.ISA
|Я Примечания • Рир\<ы
1 Sub
1 farm
Код ср и р м ы
Н асеание Ф и р м ы
У од с т р а н ы
Адрв!
02
j 1 Ь 1 ir i с с I р о F a i e d
|м3
felloe Ohio ' USA Fax 5
|Гп|е Farmer luteinaNonal
|иЗ
Г425 Fax (
•[07-
2051 Deerf FAX
г
nlltech
Ал?
Страна
Германия
Примечания _df
i>'i
Р^е
j РИС
57
различия начинаются с того момента, когда надо указать признак, по которому будет сформирован отчет. Этот этап показан на рис. 5.8. Вы должны ответить на вопрос: How do you want to view your data? (В каком виде вы хотите представить данные?). Советуем вы брать не основную форму, то есть Страны, а подчиненную - Формы. В против ном случае при группировке данных вам придется представлять их в виде вло женного отчета (см. рис. 5.7). На следующем шаге (дальше мы уже не будем напоминать, что к каждому но вому этану работы вы переходите с помощью кнопки Next) мастер спрашивает: Do you want to add any grouping levels? (He хотите ли вы ввести уровень группи ровки?). Этот этап отражен на рис. 5.9. Естественно, вам следует щелкнуть по кнопке > | и ввести Страны как первый уровень группировки. На очередном Ша ге (см. рис. 5.10) мастер уточняет: What sort order do you want for detail re cords? (Как вы будете сортировать записи внутри данных по каждой стране?). 4
- 119
98
Создание отчетов новой базы данных Report Wizard How do you want to view your ddtd"
Код, Страна, Код фирмы, НазЕание фирмы, Код страны
by Страны
*i Show me more information
Cancel
< Вьск
(Jo t
Finr-h
Рис 5 8 Report Wizard Do you want to add any grouping levels"''
Страна Код, Код ф|ирмы, Название фирмы, Код страны
Код Название фирмы Код страны
_lJ
Priority
IGrouping Options .
Cancel
<Васк
Next >
Fmrh
Рис 5 9
Вы можете ввести до четырех уровней сортировки по возрастанию (Ascending) или по убыванию (Descending). Задайте сортировку по полю Название фирмы (оно находится в списке, который открывается при щелчке по стрелке прокрутки в правой части поля) на рис. 5.10. По умолчанию принимается сортировка по
99
Статическая копия отчета Report Wizard What sort order do /ou wunt fnr detail recoids? i
You can sort records by up to hour fields, in either ascending or descending order 1
Hd.EdHUe фирмы
~3 Ml ~3 ill
U -3 J
Cancel
;Back
Next >
Finish
Рис 5 10
возрастанию; в этом случае текстовые значения сортируются от А до Z, цифровые от 1 до 9. Однако в целом порядок сортировки не имеет здесь решающего значения, если у вас нет каких-либо специальных предпочтений. Отметим только, что задан ное вами поле Название фирмы становится вторым уровнем группировки. Итак, вы сообщили мастеру свои принципиальные решения по организации структуры отчета. На следующем этапе работы можно заняться внешним пред ставлением данных (см. рис. 5.11). Теперь мастер поинтересуется: How would you like to lay out your report? (Как вы хотите расположить данные в отчете?). С помощью переключателя на рис. 5.11 вы можете выбрать различные варианты представления данных в разделе Layout (Компоновка): книжное или альбомное расположение страницы (оп ция Orientation), способ размещения данных по ширине страницы (флажок в ниж ней части окна). При этом в поле окна вы сразу видите, как будут выглядеть ре зультаты ваших действий. Затем пропустите промежуточные окна, то есть определение фона и шрифта, и выберите имя для отчета: назовите его Фирмы. В результате вы получите окон чательный вариант первой страницы отчета, как показано на рис. 5.12. Таким образом, данные сгруппированы, и отчет готов к печати.
Статическая копия отчета Возможность создавать Snapshot (Статическую копию отчета) появилась только версии Access 2000. По сути, это фотография отчета - файл с расширением snp, к °торый содержит копии каждой страницы отчета, сформированного в Access 2000, Двумерных графиков, чертежей и других элементов, включенных в отчет. Такой в
100
Создание отчетов новой базы данных Report Wizard would you \\\ё to la/ out /our report' Orientation
La,out f~
Stepped
<• Portrait
Г
Block
<~ Landscape
<•" Outline 1
XK--K'-.
xxxxxxxxx
•^ Outline I
xxxx xxxx xxxx xxxx хжхх хкчхх хжхх xxvxx xxxxx xxxxx xxxxx xxxxx
<" Align Lett 1
XXXXX
XXXXX
XXXXX
XXXXX
<~ Alian Left:-
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XKXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
j p
Adiust the field width so all fields fit с a page.
Cancel
Next >
Finish
Рис 5 11
файл можно просматривать, печатать, посылать по электронной почте, рассылав по сети и архивировать, уже не работая непосредственно со средой Access 2000.
Инструменты для работы с копией Для манипуляций со статической копией отчета в Access 2000 предусмотрен мо| дуль Snapshot Viewer (Просмотр снимка), версия 9.0. Он включает управлякшп'к программу (Snapview.ocx), справочный файл (Help) и другие связанные фап i i Модуль Snapshot Viewer можно загрузить посредством программы Setup и i установке Office 2000 или Access 2000, а также с помощью сетевых программ. Е< это не было сделано, то Snapshot Viewer автоматически устанавливается в Access Ъ' в тот момент, когда пользователь в первый раз создает статическую копию отчета Управляющую программу Snapview.ocx можно использовать для просмотра ста тической копии отчета из Microsoft Internet Explorer (версия 3.0 и более поздние редакции), а также из приложений, работающих с языком Visual Basic.
Преимущества использования Если вы печатаете и рассылаете отчеты Access пользователям внутри или за пределами своей организации, то использование статических копий может суще ственно сберечь время и деньги. Теперь вы можете отправлять и публиковать отче ты посредством электронной почты или Web-браузера, например Microsoft Internet Explorer. Ваши деловые партнеры, в свою очередь, смогут быстро про смотреть отчеты в сети и напечатать только те страницы, которые нужны. Это осо бенно полезно, если в отчетах содержатся изображения, в частности, цветные (Д<1 пустим, диаграммы и рисунки).
101
Статическая копия отчета
ЩЩ]
13 Microsoft Access D о£ У <sfr Qi ч
^ -a i Р О Ш
|00"о
- ! Close I W -
©
а - ! (3 - '
|п|х| J
Фир.пы ,,,., ,.„„*-:»-.«> ,-,,-,«,
-. ., VH°. >"*,JWbt l > " 4 . i ' . v
United Kingdom
Страна
Название фирм
Код
Код фирМЫ
Код страны
Randox Laboratories,
02
05
02
Название фирм
Код
Код фирмы
Код страны
Alltech
Страна
Страна
•
USA
03
11
о:,
Cole-Parmer Internatio 03
07
03
YCI incorporated
02
03
Код фирмы
A'cd страны
19
04
ЛЪд фирмы
Ас'-З страны
17
05
03
Германия Название фирм
Код
SENSORTECHNIK M 04
Страна
Страна
Италия Название фирм
Код
AM E L 1 nstrument s
05
Россия 1 • 1 " 1 «1
J РИС.
^
.1
.1
5 12
Обычно статические копии отчетов не только предоставляются по запросу, но и регулярно рассылаются: например, еженедельные отчеты о движении товаров на складах, ежемесячные отчеты о продажах, ежеквартальные финансовые доку менты и т.д.
Создание статической копии отчета Предположим, требуется создать в Access статическую копию отчета Приборы (см. рис. 5.13). В Access 2000 такая процедура рассматривается как разновидность экспортной операции. Процесс состоит из нескольких этапов: 1- В окне базы данных выбрать и пометить название отчета, копию которого надо создать. В данном случае это Приборы (см. рис. 5.14).
Создание отчетов новой базы данных
102 В 0.
Е<* Y«w
Iools
Приборы Наивр пахали 5>ucl(Ch»ck 106
VepftKTfpK^rVKK i 14 t К p*ii«LrtHM; 0,1 рН яэчкэсп 0 1 рН, температурккл момп*м:иоа, б*т*рвя 100 члссл
Dec, кг
Прнбори.Ко! ткяа
Приборы К о д ф к р л ы
51
26
1* ял каталогу "ПМЭО
Lo»L»p К о х Ф м р п и К о 1 ф м р н ы Loo Lap Код тхм.РСод тшиа '16
01
Нол«р к одел к МовегабЮ
Чяршаерхсгккк T y w i V рН ме-ттЛтермометр с к е с к к п ж о а т электродом
Вм.кг
Прлборы.Код т к я я
ГСриборы.Код ф м р п ы
01
26
J * e o каталогу
*Ш1
Г... ±iJ A
J
I
Рис 5 13
В Miciosoft Access - [db5 : Database] В . Preview Н Design Ц New i X
\ £fl >
ОпШ •:•:
12 J Create report in Design view 0J
Create report by using wizard
Р и с 5 14
103
Резюме
2. В строке меню выбрать File => Export. 3. В появившемся диалоювом окне Export Приборы As (см. рис. 5.15) выйти в окно Save As Type (Сохранить как тип) В нем выбрать опцию Snapshot Format (*.snp) 4. В окне, которое расположено справа от окна Save in (Сохранить в), выбрать диск и папку, где будет сохранена копия. 5. В окне File Name (Имя файла) указать название создаваемой копии. 6. Щелкнуть по кнопке Save (Сохранить) Созданная статическая копия отчета представлена на рис. 5.16 (показана лишь часть страницы). Файл копии полностью соответствует оригиналу (ср. рис. 5.13), но обратите внимание, что копию можно просмотреть уже только в окне Snapshot Viewer
на
Expoit Report Приборы As
zj *• a ® >' CJ Ш - Tool*
* J Избранное J Links J Media ll Каналы J Обновление приложений Ссылки ^_)Мои документы
File name: ave as type
|приборы| Snapshot Foimat (» snp)
3I
~3
W Autostart
В s* Canrel
Рис 5 15
Резюме 1. В Access 2000 отчет создается почти так же, как форма. Разница между эти ми двумя объектами базы данных состоит не в технологии их построения, а в их целевом назначении Если с формой пользователь будет работать на экране, то отчет предназначен для печати и представляет ценность как мате риальная копия документа, полученного из базы данных. 2. Отчет, созданный с помощью автоотчета, будет отображать все поля и запи си базовой таблицы или запроса. Так же, как и в случае с формой, такой от чет наиболее прост в построении и наименее гибок по своей структуре.
104
Создание отчетов новой базы данных
W Snapshot Viewer - Приборы.inp File
View
Window
hjelp
ШШ 3
I j g Приборы, snp
3
Приборы
J Ноле-р лод&лм "/uickChed. 106
Чярак-гврксткл'м ]-14 pH, рза решимте: 0,1 pH. т а ч ю с п 0,1 pH, температур нал компенсация, Батарея ICO «ЬСОЕ
Bec.icr
Прхборы.Кол ткна
Прмборы.Кохфхрпы
л
26
№ до каталогу ЭЮЙОй
Г лл1«п
нЫГ~1
>|н|В|
Ь*лт rfiwnviu Ь* г» ¥ s h v n n u T nnL-и n I T A I TV • а Ь*п v x v ad
<| I
zi _•]
For Help, press F1
Рис 5 16
3. В первичный отчет Access 2000 позволяет включить подчиненный отче в рамках которого записи могут быть отсортированы на втором уровне груп пировки. Но этот подчиненный отчет может быть создан уже с использо ванием конструктора отчетов, хотя саму группировку записей допускается выполнить и с помощью мастера отчетов. Наиболее гибкую структуру отче та позволяет получить конструктор отчетов. 4. В версии Access 2000 появилась новая возможность - создать Snapshot (Ста тическую копию отчета). По сути, это фотография отчета - файл с расшире нием snp, который содержит копии каждой страницы отчета, сформирован ного в Access 2000, двумерных графиков, чертежей и других элементов, включенных в отчет. Такой файл можно просматривать, печатать, посыла1Ь по электронной почте, рассылать по сети и архивировать, уже не работая непосредственно со средой Access 2000. В Access 2000 такая процедура рас сматривается как разновидность экспортной операции.
Глава V I Создание страниц доступа к данным • Свойства страниц доступа к данным • Страницы доступа к сгруппированным данным • Использование страниц доступа к данным Страница доступа к данным (Data Access Page) - файл особого типа, создан ный для работы с данными из Internet или Intranet н для их просмотра. Вооб ще Data Access Page - одно из нововведений в Access 2000. Страница доступа загружается в базу данных Access 2000 или базу данных SQL-сервера, но мо жет также создаваться и загружаться за пределами Microsoft Access. Data Access Page иногда включает данные из других источников - например, из Microsoft Excel. Кроме того, страница доступа к данным может использоваться при ра боте непосредственно в базе данных или проекте, создаваемом с использова нием Access 2000.
Свойства страниц доступа к данным Традиционные формы и отчеты Access применяются для отображения, редактиро вания и подготовки отчетов по тем данным, которые хранятся в локальной, настоль ной системе пользователя. Как вы уже знаете, создавать такие объекты позволяют специальные мастера (например, мастер форм и мастер отчетов), автоматически включая в формы и отчеты заданные пользователем стили и элементы формати рования. Формы и отчеты сохраняются в файле базы данных с расширением mdb, после чего их можно просматривать с помощью интерфейса Access.
Создание страниц доступа к данным
106
Страницы доступа к данным (Data Access Pages) тоже обеспечивают доступ пользователя к данным и работу с ними, но, кроме этого, позволяют вести поиск и структуризацию данных в информационных сетях. Фактически Data Access Pages выступают в роли форм и отчетов Access для Internet. При работе со стр , ницами доступа к данным не надо преобразовывать их формат, поскольку Da Access Pages - это HTML-файлы 1 . Они создаются с помощью Access, но работа к в браузере Internet Explorer. По своим функциям страницы доступа к данным очень похожи на классиче< кие формы и отчеты. Понятно, что и процесс подготовки этих страниц практп чески не отличается от технологии построения формы или отчета. Для созданп'1 страниц доступа к данным в Access 2000 есть специальный пакет - Data Access Page Toolbox. В нем пользователь найдет и инструментарий, хорошо знакомы и разработчикам форм и отчетов, и новые средства, которые специально предна значены для создания страниц доступа к данным в Web-среде. Нужный инстр\ мент легко выбрать с помощью курсора. Как и другие стандартные наборы инстр\ ментов, Data Access Page Toolbox доступен из меню View. Когда вы начинаем строить страницу доступа к данным, Data Access Page Toolbox выводится п<> умолчанию. На рис. 6.1 показан пример страницы, которая создается для ввода данных в ре жиме конструктора. Вводится запись Products (Изделие), содержащая сведения о коде изделия (Product ID), его наименовании (Product Name), имени фирмы (Company Name), цене за единицу продукта (Unit Price), скидке (Discontinued) Э Product»: Dttt Access Page
Заголовок страницы
\ Products Header Products
Заголовки групповых полей Поле номера записи
Product 10
j
Product name
j
Company Hame
J
Unit Price
|
Discontinued
Г"
NevKjalic-nSecliori Products J
j Pioduc[s|0 ot|2
Рис 6 1
Хотя страницы доступа к данным могут использоваться при работе с локаль ной базой данных Access 2000, все-таки их основное назначение - обеспечивать просмотр, редактирование и составление отчетов в рамках Internet Explorer. Data Access Pages имеют ряд новых Web-функций и поддерживают перетаскивание объектов. По сути это HTML-страницы, которые содержат динамические ссылки на данные (иными словами, данные «связываются» со страницей). В отличие ог традиционных форм и отчетов, Data Access Pages сохраняются не в файле базы данных (с расширением . mdb), а в отдельных HTML-файлах. Это позволяет легко Hypertext Markup Language (Язык разметки гипертекста) - язык, на основе которого формируются Web-страницы.
107
Страницы доступа к сгруппированным данным пересылать
страницы доступа к данным по каналам электронной почты и разме шать на Wcb-сервсрах. В Access 2000 можно открыть любой НТМ L-файл с помощью конструктора Data Access Pages, а затем добавить в этот файл поля - ссылки на данные. Также кон структор позволяет формировать страницы доступа к данным. Рабочая область кон структора создастся с помощью Internet Explorer и использует такие хорошо зна комые вам средства, как таблицы свойств, списки полей, наборы инструментов и мастера. Каждый объект базы данных создается для определенной конкретной цели. Ниже, в табл. 6.1, обобщены сведения о том, пригодны ли различные объекты Access 2000 для достижения тех или иных целей. Позиция «Да» означает, что ис пользование данного объекта по определенному назначению является оптималь ным решением, «Нет» - недопустимым, «Да/Нет» - возможным, но не лучшим. Табпица 6. / Форма
Отчет
Статическая копия отчета
Страница доступа к данным
Ввод, редактирование и обмен инфор мацией в пределах БД ипи проекта
Да
Нет
Нет
Да
Ввод, редактирование и обмен динами ческой информацией через Internet/ intranet за пределами БД ипи проекта
Нет
Нет
Нет
Да
Печать данных для распространений
Да/Нет
Да
Да
Да/Нет
Распространение данных по электронной почте
Нет
Нет
Да (ста" (статические данные]
Да (динамические
Основные типы страниц доступа к данным: а диалоговый отчет - используется для сбора и структуризации сведений, которые вводятся в БД для последующего отображения; • ввод данных - используется для добавления, удаления и редактирования записей; • анализ данных - может включать такие же электронные таблицы, формулы, диаграммы, какие содержатся в Excel.
Страницы доступа к сгруппированным данным Страницы доступа к сгруппированным и динамически связанным данным откры вают перед пользователями совершенно новые возможности работы с информа цией с помощью единого HTML-интерфейса. Благодаря этому группы взаимосвя занных данных легко просматривать и управлять ими. Например, можно создать страницу доступа к сгруппированным данным, где будут отражены объемы про даж по регионам для разных торговых представителей. Интерактивный характер ст раннц доступа к данным позволяет не только получить итоговые сведения по конкретному региону, но и собрать при необходимости более подробную инфор мацию
108
Создание страниц доступа к данным
Практическое применение страниц доступа к данным рассматривается ниже при работе с новой БД.
Использование страниц доступа к данным Из табл. 6.1 видно, что для взаимодействия Access 2000 с окружением страницы доступа к данным значительно полезнее, чем статические копии отчетов. Если последние, в соответствии с названием, применяются лишь для рассылки стащческнх данных, то страницы доступа к данным используются для ввода сведении и их редактирования, для передачи данных внутри БД/проекта, для информаци онного обмена Access 2000 с внешним окружением и для оперативной связи но электронной почте. Здесь мы подробнее рассмотрим, как эти страницы помогают осуществлять ин формационное взаимодействие с внешним миром. В качестве примера возьмем тип страницы доступа к данным, предназначенный для их ввода и корректировки.
Страница доступа к данным: ввод данных Выше уже говорилось, что такая страница доступа к данным в Access 2000 очень напоминает форму для ввода данных. Уместна и другая аналогия: форма - стра ница доступа к данным, отчет - групповая страница доступа к данным. Однако ни форма, ни отчет не могут (см. табл. 6.1) использоваться для пере сылки информации ни в Internet/intranet, ни по электронной почте. Как на самом деле выглядит страница доступа к данным, показано на рис. 6.2.
Создание и открытие страницы доступа к данным Для создания новой или открытия уже существующей страницы доступа к дан ным на компьютере должен быть установлен Internet Explorer 5.0 или более поздней редакции. Сформировать страницу доступа к данным можно одним из следующих способов: • с помощью Auto Page (Автостраница); • с помощью Page Wizard (Мастер страниц); • в режиме Page View (Конструктор страниц). Открыть уже существующую страницу доступа к данным можно: Q в режиме Page View; а в Internet Explorer.
Создание страницы доступа к данным в режиме автостраницы 1. В окне базы данных (см. рис. 3.1) выберите опцию Pages (Страницы) в раз деле Objects (Объекты). 2. Щелкните по кнопке New (Новый) на панели окна базы данных. На экране появится окно New Data Access Page (Новая страница доступа к данным), как показано на рис. 6.3.
109
Использование страниц доступа к данным
ШШ
И Microsoft Л е с е » I Fill? Edif View Insert Format Tools Window Help
1
' U Страны
Фирмы Код фирмы
02
Название фирмы
YSI incorporated
Код страны
03
Адрес
Yellow Spring Ohio 453S7 USA Fa*' 513 767 9353
Адрес 2
Примечания
Страна
USA
_" «L Ф1 ipi it
= I W I : 1 of 26
•
И
*«,"'
'•" ••/ Fi!
Рис 6 2 3. В этом окне задайте последовательность команд AutoPage => Columnar (Ав тостраница => По колонкам). 4. Укажите, какая таблица или запрос содержит информацию, которую нужно вывести на страницу. 5- Щелкните по кнопке ОК. Если в предыдущем пункте вы выбрали базовой таблицей Фирмы, то в результате получите страницу доступа к данным, представленную на рис. 6.2.
Создание страницы доступа к данным с помощью мастера страниц Мастер страниц обладает достаточно широкими возможностями. Мы подробно рассмотрим их на конкретном примере. 1. В окне базы данных выберите опцию Pages (Страницы) в разделе Objects (Объекты). 2. Щелкните по кнопке New (Новый) на панели окна базы данных. На экране возникнет окно New Data Access Page (Новая страница доступа к данным), выведенное на рис. 6 3. Теперь переходите к шагу 3. Вместо кнопки New мож но активизировать опцию Create data access page by using wizards (Создайте
по
Создание страниц доступа к данным New Data Access Page
Existing Web page page Wizard AutoPage. Columnar Create a ne1».1 data access page without using a '/jizat d
I
Choose the table or quer) where the object's data comes from. OK
Cancel
Рис 6 3
3. 4. 5. 6.
страницу доступа к данным с помощью мастера). В этом случае переходите сразу к этапу 5. В окне New Data Access Page выберите опцию Page Wizard (Мастер страниц) Выберите таблицу или запрос, где содержится та информация, которую сле дует вывести на страницу. Щелкните по кнопке ОК. В результате появится окно Page Wizard (см рис. 6.4). Выбрав таблицу, вы можете перенести поля из нее в будущую форму с поме щью кнопки > I (перемещение одного поля) или » I (перемещение ера i Page Wizaid Which held-: do you want on your page 7 Vou can choose from more than one table or query,
Tables/Queries |ТаЫе Страны
ГЗ
Available Fields:
Selected Fields' К О Д фирмы Название фирмы К О Д страны Адрес Адрес 2 Примечания
Примечания
Cancel
Next >
Рис 6 4
Finish
111
Использование страниц доступа к данным
всех полей). В нашем примере на страницу перенесены все поля из таблицы Фирмы и поле Страна из таблицы Страны. Таблица Страны вызывается из вкладки Tables/Queries (Таблицы/Запросы) после того, как вы разобрались с полями из предыдущей таблицы Фирмы. 7. Щелкните по кнопке Next. 8. На экране вновь появится окно Page Wizard. В его правой части показаны перенесенные вами поля, а в левой - поля, по которым вы можете упорядо чить расположение данных на странице. Выбор и фиксация этих полей про изводится аналогично предыдущему. Раскрыв вкладку Priority (Приоритет), вы выбираете те критерии, по которым будут группироваться данные. В на шем примере это страна и название фирмы (см. рис. 6.5). Если вы не собира етесь пока структурировать информацию, щелкните по кнопке Finish (За вершение). В этом случае на экране возникнет форма в режиме конструктора (Design View), как показано на рис. 6.6. Если размеры и расположение по лей вас устраивают, то щелкните по кнопке View (Просмотр). Появится страница доступа к данным, которую вы уже видели на рис. 6.2. Процесс создания страницы доступа к данным закончен. Возможно, вы захотите внести в страницу какие-то коррективы. Это можно сделать как раз в ре жиме конструктора, о чем будет сказано чуть ниже. Пока же отметим самое важное: если на настоящем этапе работы вы не воспользовались возмож ностью упорядочить данные, то какие бы правки ни вносились в форму в ре жиме конструктора, общая структура страницы сохранится неизменной. Листать ее вы сможете только по фирмам, и переход к другой стране будет происходить лишь тогда, когда вы будете просматривать данные по другой фирме. Page Wizard Do you want to add any grouping levels' Adding gioupmg levels result in a read-only page Название фирмы ^од фирмы
ВШ
^J
КОД фирмы, Код страны, Адрес, Адрес 2, Примечания
Priority
Grouping Options ,.
Cancel
Рис 6 5
Next >
Finish
112
Создание страниц доступа к данным
шш
В Microsoft Access
I File Edit Vie"' In nt
m - у
Format Tools Windnw Hr-lp
rf
Normal
-
• ^ _' •
в # [g
Tahnrna
-r
1
lu
-
В
I
U
[f ЦЕ
Д
1
'
—
•
| l 3 P a g e 7 : Data/
—
• ——
.iDlxl
Headei CDhpMblWlZ
j
Код ф| Plltl Назван ie фирг 1Ы Код ст )ЗНЫ Адрес
Адрес
Примем анич
•
Стран;
.
i
.
i
>
.
I
I
I I
I
I
I
Navigat lonSect on:
C'MpHfclWlZ | O o f 12 I ~l ~ \~ I
I
» i
^)
I
.4
l> Рис 6 6
9. Теперь щелкните по кнопке Next и перейдите к следующему шагу, который показан на рис. 6.7. 10. мастер страниц предлагает рассортировать данные по определенным парамет рам (кодам). Максимальное количество параметров, по которым можно про вести отбор, равно 4. В нашем примере сортировка производится сначала по коду страны, а затем по коду фирмы. После этого снова щелкните по кнопы Next. 11. На последнем этапе работы мастер страниц предлагает вам выбрать одну из двух опций (см. рис. 6.8): Open the page (Открыть законченную страницу) или Modify the page's design (Перед просмотром внести в страницу какиелибо изменения в режиме конструктора). В последнем случае мастер пред лагает дополнительную возможность: Do you want to apply a theme to your page? (Хотите ли вы использовать различные варианты оформления стра ницы?) Имеются в виду цвета и фоновый узор Если вы согласны, устано вите флажок в соответствующей ячейке. После этого вам будет предложена
113
Использование страниц доступа к донным Page Wizaid What sor* order do you want for detail records 7 \ o u can sort records by up bo four fields, in either ascending or descending older
xxxxxxx [
1
t- пд странь!
2
If ид фмрмы|
1 IZH
1
1
1
1=1 1
1
~3 ill "3 Ji] 1 ] Jjj
1
1 1« 1=1
а1 = ] Ii
•3] J
1
ш Cancel
<Eack
Next >
Finirh
Рис 6 7 1 Page Wizard What title do у ou want fur your page 7
J(Wb
^
\^
[IlTpbHtl
&
»i.
9".
"3
That's all the information the wizard needs to create ^our page Do you want to open the page in Access, or modify the page's design 7
r
(" Open the page. (•" Modify the page's design f
--
- -- -
Г
Do you want to appl/ a theme to your page'
Display Help on working with the page 7
Cancel
< Back
Finish
Рис 6 8
еще одна опция: Display Help on working with the page (Вывести на экран справку, связанную с обработкой страницы). Модификация страницы в ре жиме конструктора представлена на рис. 6.9. Сделав выбор, щелкните по кнопке Finish.
114
Создоние страниц доступа к данным
В Microsoft Access • |Page7 : Data Access Page)
Н И
I ^
File £dil
V'w
Ir-,tri-
Fjrrnar
Т-ю1, V_ir d J *
Headmg I Ы" r a Header Страны Страна
-
2-t
\
АЛ
аы D <= ^ И
ЕВ
_i п
\ • '
га
н-lp
-
В
/
U
E
5
31
*^ *^
|=
•=
S* -
A
В
-
_
\fl\xj
|
*|
•i&sri '. , . , 1 1 1 i i i i i i i i i, Header 1 Страны фирмы .1 Название 'ofOUpO»fLTp.aH|:l | _Ф]| | HaiEdrine фирк Header ФирмыУЛг
| 1
К|эл4ир||ы
|
гфд страны
|
I
1
1
1 I
I
[ 1
I !
1 I
1 1
1 I
i 1
l I
l'.'I I f\
\
Ф\
1
*арес А арес 2
Г нимеча
1ИЯ
Navtqat onSect on Фир MblWl2 H
* | -I-upMbiWc 10 j l o f 12
Navrga* onSection Страны Название фирмы H < | Страны Название i i г Navigat on5ect on Страны Страна
г. J
фирмы 10 j 1 of 12 • i
I
i
И
l
РИС
> * »>'
и
i
i
* '"'
* '
?
11
I -
69
Законченная страница доступа к данным выглядит так, как показано на рис. 6.10 Внимательно изучите рис б 10 и сравните то, что на нем изображено, с вложен ными таблицами и формами, которые обсуждались в главе 4. Как видите, упоря дочив и отсортировав информацию с помощью мастера страниц, вы получили вложенную страницу доступа к данным. В самом деле, слева от окна Страны рас положен значок|. Он уже знаком вам по вложенным таблицам. Если щелкнуть по этому значку, запись Страны раскроется, и слева от окна появится другой зна чок - сз|, а также новая запись - Название фирмы (см. рис. 6.11). Как вы уже знаете, «плюс» указывает на присутствие скрытой записи, а «минус > сообщает, что она развернута. Щелкнув еще раз по значку ф|, вы получите полно стью раскрытую страницу (см. рис. 6 12). Если щелкнуть мышью по значку ==•] можно свернуть страницу, и она будет выглядеть так, как показано на рис. 6.10.
Создание страницы доступа к данным в режиме конструктора Выше мы рассмотрели создание страницы доступа к данным с помощью AutoPagc (Автостраницы) и Page Wizard (Мастера страниц), которые позволяют достаточ но легко и быстро выполнить эту работу. Еще один распространенный способ
115
Использование страниц доступа к данным
шш
Ш Microsoft Access File Edit View Insert Format Took- Vjnduw Help
шш
111 Страны
I GroupOfСтраныv | Страна
14 4 I
|umted Kmqdom
и
Страны-Страна 1 of 10
>*»(*y>'$l'il'Z'Y
Ы Рис <5 10
1ШХ]
Ы Microsoft Access File Edit View Insert Format Tui-.L Vundiw Help
ku ' 0
c3i
H-lnlx
| ^ Страны
. , йгоирОгСтраны(united Kingdom R:l Страна , GroupOtCTpaHbi|Randox Laboratories, Ltd _vil Название фирмы И и
< |
< |
Страны-Название фирмы 1 of 1
Страны-Страна 1 of 10
•
И
•'to'-'
'<• "
.
,
«1 Рис 6 И
создания страницы - использование конструктора С нашей точки зрения, конструктор Действительно нужен тогда, когда требуется внести какие-либо исправления, о чем шла речь в предыдущем разделе. А вот создание страницы посредством конструк тора - не самое рациональное решение. Тем не менее рассмотрим и такой вариант. Чтобы войти в режим конструктора, надо открыть окно базы данных (см. рис •J1), выбрать опцию Pages в разделе Objects и выполнить одно из следующих дей ствий: • активизировать опцию Create data access page in Design view (Создать страницу доступа к данным в режиме конструктора);
116
Создание страниц доступа к данным
( У Micro t o l l Access | File
Edit
\_icw
Insert
For mat
м- У rJ ai '
Tools
Window
Help
:
';./-.
e, -*!'
| ' j j Страны
-
« | B dj J
шт
, , , GroupOfCTpaHbilunited Kingdom =>! Страна . GroupOfCTpanbi^l Название фирмы
ШЕШ*
|Randox Laboratories, Ltd 05
Код фирмы Код страны
02
Адрес
Diamond Road, Crumlin, Co Antrim, BT29 4QY Fax 44 1849 422413
Адрес 2
Галкин В А Ten 265 44-05
Примечания
gjj
< |
ФирмыW12 1 Of 1
К f
K
< |
<|
•
Страны-НазЕднпe
Страны-Страна 1 of 10
»i i ^ - >'Л *•* фиг.
ты 1 rf l
•
м >'*
«1
_;. v i V Cj} I
_J
>, i. • K< s • ''i* ^|ЩР^ V (31
•\;,
/o
^i Tf
1 •!
Рис <5 / 2
• •
щелкнуть по кнопке Design на панели окна базы данных; щелкнуть по кнопке New на панели окна базы данных, а затем выбрать оп цию Design view.
В любом случае на экране появятся (см. рис б 13) пустой бланк страницы и па нель инструментов (Toolbox) с набором кнопок, которые предназначены для до бавления и настройки информационных элементов страницы (в терминологш Access 2000 - элементов управления). Над пустым бланком крупным шрифтом набрано указание' Click here and type title text (Щелкните здесь и напечатайте текст заголовка) Последуйте это му совету и задайте имя страницы. Дальше вы формируете страницу с помощью панели Toolbox практически так же, как в предыдущих версиях Access создава ли формы или отчеты Любая страница доступа к данным строится следующим образом вы помещаете на нее с помощью инструментов панели необходимые элементы управления и форматируете их. Табл. 4.1 содержит описание этих эле ментов, включенных в панель Toolbox.
117
Использование страниц доступа к данным
ШЕ1 © 9. Fie
Edir
Toh г 1
ijr- v In rrt
Fotr ot
T -. -.k
Acd ч
1 г' -
В
/
U
S
S
3=
H^lp
"3
QsE
Я Page8 : Data Лесе»» Page
ДШ*1 [ k \ Лд abl
Section Unbound
' pа ЕЕ
(S
m _i
- fj El
•
Ы Рис 6 13
Чтобы перенести на пустой бланк нужный элемент, следует щелкнуть мышью по его символу, расположенному на панели Toolbox Символ отделится от панели, и его надо поместить в любую точку страницы, при этом она будет определять точку левого верхнего угла элемента. Теперь с ним можно работать: вводить с его помощью информацию, перемещать текст, изменять его размеры и т.д Если по том вы вновь захотите использовать этот элемент, щелкните по нему мышью В левом верхнем углу экрана появится большой маркер, а в остальных - маркеры поменьше. С их помощью можно менять расположение и размер элементов управ ления Когда вы решите, что страница наконец закончена и готова к просмотру, Щелкните по кнопке J l j View (Просмотр) на панели в верхней части того диало гового окна, в котором вы создаете страницу. Вот теперь вы увидите ее в оконча тельном варианте'
Открытие страницы доступа к данным в окне базы данных 1. В окне базы данных активизируйте опцию Pages в разделе Objects 2. Укажите, какую страницу доступа к данным нужно открыть. 3. На панели окна базы данных щелкните по кнопке Open
118
Создание страниц доступа к данным
Открытие страницы доступа к данным в Internet Explorer Для этого надо выполнить одно из следующих действий: • в среде Access откройте страницу базы данных в режиме Design view или в Page view, а затем выберите опцию Page Preview (Предыдущая Web-стра ница) в меню File; Q если Internet Explorer является по умолчанию вашим Web-браузером, i в программе Windows Explorer дважды щелкните по имени HTML-файл . чтобы открыть страницу в Internet Explorer, не заходя в Microsoft Access. При создании страницы доступа к данным в этих режимах Access 2000 автома тически сохраняет се в текущей папке как HTML-файл и добавляет соответству ющий значок в окне базы данных.
Передача страницы доступа к данным по электронной почте В отличие от традиционных форм и отчетов, страницы доступа к данным сохра няются в отдельном HTML-файле, а не в файле базы данных Microsoft Acce^ с расширением .mdb. Поэтому пользователь легко может пересылать страницы ни электронной почте или публиковать их на Web-серверах в виде статических HTML-страниц. Кроме того, в них допускается включать другие компоненты, с которыми работает система Microsoft Office - в частности, электронные табли цы Spreadsheet и диаграммы Chart. Существующие формы легко обновить, про образовав их в страницы доступа к данным. Страница доступа к данным связана с источником данных в интерфейсе OLh DB, то есть с БД либо в Microsoft Access, либо в Microsoft SQL Server. Для работг1 со страницей пользователь должен иметь доступ к этой БД. Следовательно, баз i данных Microsoft Access или Microsoft SQL Server, которая предоставляет исход ную информацию OLE DB для страниц доступа к данным, должна размещатьс : на разделенном сервере или компьютере. Тогда и другие пользователи смогуi просматривать страницы и работать с ними в Web-браузере или в тексте письм электронной почты. Лучше разместить базу данных на разделенном сервере ил г компьютере до того, как будет создана страница. Рассмотрим противоположным случай: вы этого не сделали. Значит, если вы сформируете страницу, а затем пере местите базу данных, с которой она связана, то вам придется изменить связь не ходных данных OLE DB со страницей. В режиме конструктора следует щелкнут правой кнопкой мыши по значку базы данных на панели Field List (Список по лей) и выбрать опцию Connection (Соединение). Теперь поговорим непосредственно о передаче страницы доступа к данным И" электронной почте. Выполните следующие действия: 1. В окне базы данных активизируйте опцию Pages в разделе Objects. Затем выберите имя страницы, которую нужно переслать. 2. В меню File в строке меню выберите сначала опцию Send To (Послать), а по том - Mail Recipient (Получатель сообщения). Страница доступа к данным открывается в Page Design view (Режим конструктора страниц), поэтом}'
Использование страниц доступа к данным
119
при необходимости можно перед отсылкой страницы конкретному адресату внести в нес изменения - например, добавить какие-то сведения или приме чания, 3. Введите имена получателей в ноля То и Сс. Имена разделяются точкой с за пятой (;). Если вы хотите выбрать имя получателя из уже существующего списка, активизируйте опцию То или Сс. 4. По умолчанию имя откроется в строке Subject (Субъект), и там его можно заменить другим. Можно также произвести дополнительные операции пе ред отсылкой. 5. Щелкнуть по кнопке Send (Отправить) в заголовке сообщения.
Экспорт страницы доступа к данным в существующую базу данных При экспорте страницы доступа к данным в уже существующую базу данных (Microsoft Access или Microsoft Access Project) вы экспортируете, в сущности, ссылку на связанный HTML-файл. Сам он остается на прежнем месте, что позво ляет иметь две страницы доступа к данным, указывающие на один и тот же свя занный HTML-файл. Если вам это не нужно, сохраните одну из страниц под дру гим именем, используя команды Save As (Сохранить как) и Save As Data Access Page (Сохранить как страницу доступа к данным) в меню File. Затем удалите страницу, которую вы только что создали.
Список полей Опция Field List (Список полей) позволяет легко добавлять информацию из при ложений Microsoft Access и SQL Server в страницу доступа к данным. Достаточно выбрать в списке имя нужного поля и перетащить это название на страницу. Каж дое поле поддерживает прямую динамическую ссылку, которая связывает стра ницу доступа и данные. Таким образом, поле «прикреплено» к информации и опе ративно обновляется при изменении страниц доступа к данным. Если вы создаете новую связанную форму или отчет, на экран автоматически выводится список по лей, даже если по умолчанию он был выключен. Чтобы просмотреть список полей, надо открыть форму, отчет или страницу в режиме Design view, а затем щелкнуть по кнопке в | , которая расположена на панели дизайна страницы (Page design). На рис. 6.14 вы видите, как выглядит спи сок полей для страницы, показанной на рис. 6.12.
Сводная таблица Компонент PivotTable (Сводная таблица) создается в Microsoft Access или Microsoft Excel и включается в страницу доступа к данным. С помощью PivotTable пользователи могут просматривать данные отчетов, выполнять их динамическую Со ртировку и фильтрацию, группировать сведения по строкам или столбцам, по лучать суммарные значения и изучать их отдельные составляющие. Все это по зволяет эффективно обрабатывать как небольшие объемы данных, так и крупные Ма ссивы информации. Формат, в котором изначально представлены данные,
120
Создание страниц доступа к данным
определяется форматом страницы, однако при необходимости его легко изменит ь Просто вызовите список полей, выберите в нем нужное поле с динамическими связями и перетащите его название на страницу доступа к данным.
Создание сводной таблицы для страницы доступа к данным 1. В режиме конструктора (Design view) вызовите панель инструментов. 2. На панели инструментов в меню Insert (Вставка) активизируйте опцию Office PivotTable. 3. На странице укажите место, в котором следует разместить верхний левым угол сводной таблицы. 4. Чтобы выбрать источник данных для сводной таблицы PivotTable, восполь зуйтесь одним из следующих способов: - предположим, вам нужна информация из текущей базы данных Microsoft Access 2000 или Microsoft SQL Server. С помощью кнопки н] вызовите список полей страницы доступа к данным. Затем перетащите в сводную таблицу ту таблицу или запрос, которые вы хотите использовать в этом компоненте. Access 2000 автоматически установит для опции Data Source control (Управление источником данных) на панели свойств сводной таб лицы значение MSODSC. Теперь вы сможете использовать в компоненте тот же элемент управления, что и в таблице. Будет установлена также опция Data member (ЭлеDatabase |p a ge | m ж . мент данных) для имени таблицы ^ dbS mdb или запроса, на которых осно 3 <£j Tables SI В П Name AutoCorrect Log ван компонент PivotTable. Пос ; ! € 3 Related Tables ле этого переходите к пункту 6; 1 [13 Object Type j - если вы хотите обратиться к внеш OD Object Name нему источнику данных, вызови I IB Control Name 1 те панель свойств компонента 53 Property Name P PivotTable и задайте последова 53 Old Value — тельность команд: Data Source => S3 New Value Connection => Connection Editor H П Менеджер (Источник данных => Связь => >Z$ Related Tables Редактор связей). Затем вызо 53 Номер вите таблицу Provider (Агент) =. Код фирмы z\ и выберите провайдера OLE DB, с помощью которого вы восста i d r i -i v л - . новите данные. Наконец, акти визируйте таблицу Connection Рис 6 14 и введите информацию о связи в данные, которые вы хотите использовать для компонента PivotTable list Чтобы получить справку о диалоговом окне Data Link Properties (Свойства указателя данных), щелкните по кнопке Help в нижней части этого окна
Резюме
121
5. Откройте раздел Other на панели свойств сводной таблицы PivotTable. Те перь выполните одно из следующих действий: - чтобы использовать данные из определенной записи в пределах базы дан ных, активизируйте опцию Data member и выберите нужный элемент из списка; - чтобы использовать для отбора данных запрос или команду (например, выражение SQL), сначала щелкните по кнопке Command text (Текст ко манды), а затем напечатайте в окне этот текст. (О том, как должен стро иться текст вводимой команды, вы можете прочесть в документации к внешней базе данных.) 6. Используя панель компонента и панель свойств компонента (PivotTable Property Toolbox) для добавления итоговых данных, продолжайте корректи ровать вид компонента PivotTable и задавать его свойства до тех пор, пока этот элемент управления не будет полностью отвечать вашим требованиям.
©
•
Чтобы создать сводную таблицу PivotTable, которая использует данные из таблицы Microsoft Excel, нужно поместить их на Web-страницу. Если вы хотите открыть ее внутри страницы доступа к данным, сделайте это в Microsoft Access, а затем добавьте элементы, связанные с базой данных Microsoft Access или Microsoft SQL Sewer; • если вы добавляете сводную таблицу PivotTable к групповой странице до ступа к данным (странице, содержащей сгруппированные данные), ее список появляется для каждой отдельной группы сведений и содержит только относящиеся к ней записи. Например, на странице, где информа~ ция сгруппирована по годам в соответствии со списком PivotTable, кото рый содержит данные о ЧС, появится список для каждого года, содержа щий только сведения о ЧС этого года. В любой момент можно вывести на экран список PivotTable не более чем для одной группы; • вы можете создать диаграмму, связанную со списком PivotTable. Тогда при его корректировке в диаграмму будут автоматически внесены со ответствующие изменения.
Резюме 1. В Access 2000 введен новый тип файла - страница доступа к данным (Data Access Page), созданный для просмотра данных из Internet или intranet и ра боты с ними. Страница доступа загружается в базу данных Access 2000 или SQL-сервера, но может также создаваться и загружаться вне Microsoft Access. Страница доступа к данным способна включать данные из других источников - например, из Microsoft Excel. Кроме того, страницу доступа к данным используют при работе непосредственно в базе данных или проек те, создаваемом в Access 2000. 2- Для взаимодействия Access 2000 с окружающей средой страницы доступа к данным значительно полезнее, чем статические копии отчетов. Если
122
Создание страниц доступа к данным
последние, в соответствии с названием, применяются лишь для рассылкц статических данных, то страницы доступа к данным используются для ввода сведений и их редактирования, для передачи данных внутри БД/проект, для информационного обмена Access 2000 с внешним окружением и для опе ративной связи по электронной почте 3. Для создания страниц доступа к данным в Access 2000 есть специальный па кет - Data Access Page Toolbox. В нем есть инструментарий, используемый разработчиками форм и отчетов, и новые средства, которые специально предназначены для создания страниц доступа к данным в Web-среде. Нуж ный инструмент легко выбрать с помощью курсора. Как и другие стандарт ные наборы инструментов, Data Access Page Toolbox доступен из меню. 4. Сформировать страницу доступа к данным можно одним из следующих спо собов: - с помощью Auto Page (Автостранпца); - с помощью Page Wizard (Мастер страниц); - в режиме Page View (Конструктор страниц). Открыть уже существующую страницу доступа к данным можно: - в режиме Page View; - в Internet Explorer. Все эти способы подробно рассмотрены в главе. 5. Кроме того, в Access 2000 можно создать и включить в страницу доступа к данным компонент PivotTable (Сводная таблица). С его помощью пользо ватели могут просматривать данные отчетов, выполнять их динамическую сортировку и фильтрацию, группировать сведения по строкам или столбцам, получать суммарные значения и изучать их отдельные составляющие. Все это позволяет эффективно обрабатывать как небольшие объемы данных, так и крупные массивы информации.
Глава V I I Конвертирование баз д а н н ы х из других программных сред • Процесс конвертирования баз данных • Импорт базы данных БД ЧЭС • Импорт базы данных Контроль ЧС Мы уже говорили о том, что по мере появления новых, более совершенных СУБД все актуальнее становится проблема использования данных, которые накоплены в информационных банках предыдущих, в том числе и морально устаревших вер сии. И сами эти СУБД, и организованные в них сведения очень разнообразны по составу, структуре и форматам данных, а также по программной основе. Эти БД часто создавались разными организациями и разработчиками, а какие-либо пра вила, четко регламентирующие создание банков данных, отсутствуют. Несмотря па это в большинстве случаев информация, в какой бы форме она ни содержалась, сохраняет свою ценность, например, когда речь идет о статистических данных. Следовательно, нужно уметь использовать сведения независимо от того, в СУБД какого типа они хранятся. В решении этой проблемы на сегодняшний день наметились два основных на правления: Q применение конвертеров, которые преобразуют данные из одного формата в другой. Наборы таких конвертеров, хотя и не всегда достаточно полные, есть практически во всех СУБД, и пока это основной путь решения про блемы;
1 24
•
Конвертирование баз данных из других программных сред
использование технологии ODBC (Open Database Connectivity). O D B C открытый интерфейс доступа к базам данных ил прикладных программ. О^ позволяет работать с документами «чужих» для конкретной БД форматов.
В настоящей главе рассматривается первый способ решения проблемы. Речь пойдет о конвертировании в Access 2000 двух баз данных, созданных в различных СУБД, Б различных организациях, в разное время п разными авторами. (Отме тим, что по понятным причинам при разработке этих БД никакой предпроектной структуризации данных не производилось.) Первая - база данных по чрезвычай ным экологическим ситуациям (БД ЧЭС) - была создана в программной среде Clarion версии 3.0 (MS DOS) в 1990 г. в Государственном институте прикладной экологии (ГИПЭ). Вторая - Контроль ЧС - в программной среде FoxPro версии 2.5 (Windows 95/98) в 1997 г. в Главном управлении Федерального агентства пра вительственной связи и информации (ГУИС ФАПСИ). Обе базы данных ведутся в течение ряда лет и содержат информацию о чрезвычайных ситуациях, происхо дивших на территории России. Таким образом, эти две БД дополняют друг друга. Мы объединим их с новой базой данных - Контрольно-измерительные прибо ры, процесс создания которой в среде Access 2000 был подробно описан в преды дущих главах. Полученную таким путем объединенную БД следует рассматривать как часть будущей, более широкой базы данных. Вообще говоря, совсем не обяза тельно стремиться к тому, чтобы все файлы содержались в одной БД - как и всегда в жизни, гигантомания должна иметь свои пределы. Но это уже иная проблема, ко торая не имеет отношения к проблеме конвертации БД и не влияет на ее процесс. Как показывает опыт, при конвертировании баз данных могут возникнуть еще две трудности: Q- несовпадение кодов словарей; • различие между форматами полей даты и времени в разных БД. Первая проблема носит чисто технический характер. Она вызвана тем, что в раз ных БД могут использоваться различные словари для одних и тех же понятий или объектов. Это, как правило, неизбежно, если для данного класса понятий отсут ствуют словари, утвержденные на федеральном уровне. Здесь возможен простой выход: переводите все файлы, где используются «спорные» понятия, на единые коды (либо перекодируйте словари, либо оставьте для этих понятий только один словарь). Вторая трудность связана с тем, что в СУБД разных семейств установлены раз личные временные точки отсчета, поэтому вам придется дополнительно форма тировать соответствующие поля. Более подробно такие ситуации рассматривают ся ниже.
Процесс конвертирования баз данных Итак, перед началом конвертирования вы имеем: • базу данных Контрольно-измерительные приборы, созданную в программ ной среде Access 2000;
зоцесс конвертирования баз данных
125
базу данных БД ЧЭС, сформированную в среде Clarion 3.0; базу данных Контроль ЧС, разработанную в программной среде FoxPro 2.5. Наша цель - объединить все эти базы данных в одну, расположенную в про граммной среде Access 2000. Вся дальнейшая обработка информации будет про исходить в этой новой БД. Чтобы решить поставленную задачу, вы будем импор тировать базы данных в Access 2000, одновременно преобразуя их из исходных форматов в новый. Существуют ли какие-либо альтернативы такому решению? Да, теоретически их две: • если структуры файлов двух или нескольких баз данных совпадают, можно свободно переносить информацию из одной БД в другую. Однако, как уже говорилось, такая ситуация крайне маловероятна; • можно не импортировать нужные файлы в БД, а связать их с таблицей Access. Отметим, что файлы являются источниками информации, а в таблице Access содержатся только ссылки на соответствующие сведения. Тогда база данных Access останется в своем первоначальном виде, а все изменения будут про исходить в связанных файлах. Однако в таком случае усложняется ведение комплексной БД: если файл данных был перемещен, то вы не сможете про сматривать и редактировать его, пока не обновите информацию о местопо ложении этого файла. Технология импорта для каждой из двух конвертируемых баз данных несколь ко различается. Импорт БД ЧЭС по необходимости состоит из двух этапов. Clarion 3.0 - до вольно старая программная система, поэтому она содержит очень небогатый на бор конвертеров. Из них практическую ценность имеет лишь конвертер данных из формата DAT в формат программы dBase3 - DBF. Именно этим инструмен том вы и воспользуемся. Следующим шагом будет импорт файлов с их одновре менным конвертированием из базы данных формата dBase3 в БД Контрольноизмерительные приборы в формате Access 2000 - MDB. Конечно, указанное имя этой базы данных уже не будет соответствовать ее содержанию, и его придется изменить. Двухэтапным будет также и перевод базы данных Контроль ЧС из формата в формат, но по другим причинам. Дело в том, что при всей мощности и гибко сти Access 2000 из этой версии (по сравнению с Access 97) исчез конвертор форматов данных FoxPro. В результате, даже несмотря на родственный фор мат (DBF), с которым работают СУБД семейства dBase, при попытке прямого импорта файлов из FoxPro в Access 2000 с помощью конверторов возникают трудности с преобразованием текстовых файлов: во-первых, не конвертируют ся файлы типа Memo, во-вторых, текстовые строки конвертируются с искаже ниями, так что понять эти тексты нельзя. Поэтому порядок работы будет та ким: первый шаг - переносим данные из FoxPro в Access 97, второй - из Access 97 в Access 2000.
1 26
Конвертирование баз данных из других программных сред
Импорт базы данных БД ЧЭС Начнем с краткой характеристики базы данных БД ЧЭС.
Первый этап: импорт данных из среды Clarion в dBase Сначала посмотрим, как выгляди! фрагмент этой базы данных. На рис. 7.1 nptvi ставлена часть окна базы данных - ответ на запрос об авариях на магистральны трубопроводах, которые произошли на территории Российской Федерации в 1995 По каждой из чрезвычайных ситуаций, содержащихся в этом списке, можно п• лучить (в электронном или печатном виде) более подробную информацию. Для импорта базы данных используем конвертер Ccvt, который входит в с став программного обеспечения среды Clarion (см. рис. 7.2). Как видно из piicyi ка, конвертер предоставляет не слишком широкие возможности преобразован и форматов: либо в текстовый файл на языке Basic, либо в универсальный обмен ный формат DIF, либо в один из форматов языка dBase. Однако Basic нам в да i ном случае не нужен, a DIF не получил широкого распространения. Значит, ост ется, как мы уже договорились, преобразовывать данные в формат dbf. Как и раньше, мы будем рассматривать конвертацию данных на примере одн го файла. Возьмем самый представительный в базе данных БД ЧЭС файл Filel.dat, показанный на рис. 7.2. В сущности, само формальное преобразован!i происходит предельно просто. Выберите с помощью клавиатуры (а не мыши, 'i, как MS DOS вполне может обходиться и без нее) выходной формат (Output Тур и имя выходного файла (Output File), который назовите Filel.dbf. Теперь нажми
1 *™ А • :\ • | а | ВЦ g f g
AJ
Рис 7 1
127
импорт базы донных БД ЧЭС
Рис. 7 2 клавишу Enter. Указывать файл-источник (Source File) не надо: имя этого сис темного файла Clarion введет сам. На данном этапе и произойдет преобразование: появится требуемый файл Filel.dbf. Если, вводя имя этого файла, вы не указали его расположение, то он будет помещен в ту же директорию, в которой нахо дится конвертер Ccvt. Казалось бы, дело сделано, и можно переходить к следую щему этапу конвертирования. Однако не все так просто. В dBase действует ограничение на длину имени поля оно не может превышать 10 символов. Кроме того, при конвертации в название включается префикс. Например, имя поля PEREDAL после преобразования пре вратится в FIL_PEREDA. Но в результате конвертации точно так же будет выгля деть и имя другого поля - PEREDAB. Тогда окажется, что в файле Filel.dbf содер жатся два поля с одинаковыми именами, что недопустимо. Конечно, такая проблема разрешается относительно легко: войдите в систему dBase и там исправьте имя фай ла Поскольку данная ситуация является частной, здесь она подробно не рассмат ривается. Но очень важно помнить, что при переносе файлов из одной СУБД в другую (даже если речь идет о реляционных СУБД) необходимы повышен ные осторожность и внимание. В следующем разделе будет показано, что описан ный выше эпизод - не единственный случай, когда могут возникнуть проблемы. Так или иначе, первый этап импорта файлов завершен (как вы помните, осталь ные файлы конвертируются точно так же). Можно переходить ко второму шаг}'.
Второй этап: импорт данных из dBase в Access 2000 Теперь нам нужно импортировать в базу данных Контрольно-измерительные при боры файлы из базы данных БД ЧЭС, конвертировав их при этом из формата dBase.
128
Конвертирование баз данных из других программных сред
Импорт файлов Снова откроите окно базы данных. Напомним, что необходимо выполнить след ющие действия: 1. Из окна Access 2000 открыть базу данных по ее имени (БД ЧЭС). В резул тате на экране отобразится начальная форма (см. рис. 4.24). 2. Щелкните по кнопке _©| на панели инструментов базы данных. На экра: появится окно базы данных (см. рис. 3.1). 3. Если начальная форма вам почему-либо мешает, уберите ее, щелкнув г кнопке закрытия окна. Теперь в меню базы данных выберите опцию File (Файл), а в открывшемся по. меню - Get External Data (Внешние данные). Затем активизируйте опцию Impoi i (Импорт), после чего на экране появится одноименное окно Import. Вам приде ся пройти по дереву файлов в поисках базы данных в формате DBF, которую к i получили в результате первого этапа работы (см. предыдущий раздел главы). К а , и раньше, возьмем в качестве примера файл Filel.dbf. Чтобы увидеть его либо др\ гие файлы этой базы данных в формате DBF, надо в поле Files of type (Файл! типа) активизировать или какую-либо модификацию dBase, или опцию All files (Все файлы). В противном случае файлы формата DBF будут невидимы. Hail дя нужный файл и пометив его, щелкните по кнопке ^ import J (см. рис. 7.3 i Если все прошло нормально, то Access 2000 выдаст сооощенис Successfully im ported 'FILEl' ('FILEl' успешно импортирован), как показано на рис. 7.4. Щели ните по кнопке ОК. ВЕЭ1
| Import
^5
Look in:
_ J dBase
Р^ч
_J] Filel.dbf _-3]Olad.dbf J]Wa5te.dbf
•Mr
'
\_ 1
* 1
j
<- (tj ® X CL, Ш - то* -
1
^^S='-*'44 i
File name: ^k£jMi Wet/ Folders •
^^^ШВЯ
U^jjgyeAs^m^bf^
J шшшшшшшшшш^ Рис. 7.3
& • Import Cancel
129
Импорт базы донных БД ЧЭС 1 Microsoft Access 1 )
• 1
Sue cessfully imported 'FILE 1 Г.
'
0K
'.
Рис. 7.4
Теперь надо закрыть окно Import, и тогда вы увидите, что в окне базы данных появилась новая таблица Filel (см. рис. 7.5).
Поля даты и времени Итак, второй этап импорта прошел успешно, и кажется, что с базой данных все в порядке. Однако приглядимся повнимательнее к импортированной таблице (см. рис. 7.6), особенно к полям даты и времени FILDATAY, FIL_TIMECH, FIL_DATAS, F1LTIMESO. (Вы помните, как образовались эти имена? К исход ным названиям полей файла Filel.dat при преобразовании его в формат DBF сле ва добавляются префиксы FIL_, а общее имя поля «обрезается» до 10 символов.) На рис. 7.6 эти поля сгруппированы вместе, чтобы их удобнее было просматри вать. Значения перечисленных полей выглядят необычно, и вы поймете, в чем дело, перейдя в режим конструктора с помощью кнопки Ы,-\. Окно режима
m*i
Ы Microsoft Access File Edit View
Insert Tools Window
Help
Й'
аё-М*?
Ш\ 3
dbl: Database t^Open k£ Design j^New
X
Create table in Design view Create table by using wizard Create table by entering data
232 Менеджер Назначение Приборы, представленные на рынке2 Страны Типы приборов фирмы
ai-<*8g^i.i
d
-«•>-
Рис. 7.5 5-_
130
Конвертирование баз данных из других программных сред
В Microsoft Access - (FILE1: Table! • file Edi View Incur Г n , ,i PE L I * Tools j/jndD
ea: e a^ ML_VID] FILJ3ATAY
idJ_l
У
1Q305 10305 10109 10305 10109 10109 10305 10301 10305 10305 10302 10101 11002 10302 10301 10305 10305 10202 30303 30303 10801 10302 10305 10302 10302 10101 Re cod i* | * I
?J •
«
ПО-
l-la"J? Help
il£j£
• eg-^-
i\ l\ ^Ъ
©-
M »•*©£].
©.
| Fll__TIMECH | FIL_OATAS | FILJTIMIESO | FILJ4AMIECH ]FIL_RESl| F I L _ N A M E R E 7 FIL ME]] 70894 70699 0 00 0 Обнаружение рзэл 1 1 Российская ф( 5760001 Обнаружение ргуп 1 1 Российская ФЕ 70890 0 00 70S92 11 70890 0 00 D Выброс газа из СКЕ 1 1 Российская ФЕ 70691 51 1 Российская ФЕ 0 Обнаружение ртуп 70891 0 00 70891 11 С Аварии на магистр 1 1 Российская ф< 70883 0 00 70884 41 0 Аварии на магистр 1 1 Российская ФЕ 70883 0 00 70885 41 70683 0 00 70885 0 Обнаружение (утрг 1 1 Российская ФЕ 81 0 Авария с выброса* 1 1 Российская ФЕ 70885 0 00 70886 11 1 Российская ФЕ 70880 0 00 70883 0 Обнаружение (утре 21 0 Обнаружение ртуп 1 1 Российская ФЕ 70В8Э 0 00 70884 0 Аварии на транспо ' 1 Российская ФЕ 70861 0 00 70861 21 0 Авария грузового г 1 1 Российская ФЕ 70868 0 00 7087D 31 70897 4320001 Прорыа дамбы зол 1 1 Российская ФЕ 70893 12 20 21 1 Российская ФЕ 450D001 Аварийный слиь бе 70902 0 00 70904 21 0 Отравление людей 1 1 Российская ФЕ 70909 0 00 70911 21 1 Российская ФЕ 70904 0 00 0 Обнаружение ртун 21 70912 0 Обнаружение ртуп 1 1 Российская ФЕ 21 70912 0 00 70918 1 Российская Фб 0 Выброс нефти и ее 70918 0 00 70918 51 0 Загрязнение водно 11 Российская ФЕ 70919 0 00 21 70921 1 Российская Ф: 70921 0 00 0 Загрязнение водно 21 70921 0 Авария на канализ 1 1 Российская ФЕ 21 70921 0 00 70921 1 Российская ФЕ 0 Аеэр«я топливозап 81 70901 0 00 70901 11 0 Обнаружение ртуп 1 1 Российская ФЕ 70903 0 00 70904 41 70924 0 Авария на транспо 1 1 Российская ФЕ 70923 0 00 0 Утечка аммиачной 1 1 Российская ФЕ 21 70918 0 00 70925 0 Авария грузового г \ 1 Российская ФЕ 70925 0 00 70925 1 ,i |'l|>»J « Н И
fP
^
Рис 7 6
конструктора показано на рис. 7.7. Оказывается, эти поля, которые должны при надлежать к типу Data/Time (Дата/Время), после преобразования относятся к типам Text (Текст) или Number (Числовой). Внесите необходимые исправления. Задайте для полей тип Date/Time (Дата Время). В разделе Field Properties (Свойства полей) для полей дат F1L_DATAV и FIL_DATAS установите значение свойства Short Date (Краткая дата), что соот ветствует изображению даты 09/12/1999, а для полей времени FIL_TIMECH и F I L T I M E S O - значение свойства Short Time (Краткое время), что соответству ет изображению времени 12.36. Раз уж мы взялись наводить порядок, давайте зада днм для свойства Caption (Заголовок) перечисленных полей соответственно значе ния Дата ЧЭС, Дата сообщения о ЧЭС, Время ЧЭС, Время сообщения о ЧЭС
Путешествия во времени Теперь посмотрим, что у нас получилось. Перейдя в режим формы с помощью кнопки • -1 (см. рис. 7.7), вы обнаружите крайне любопытную картину. Поля вре мени теперь имеют привычные русскоязычные имена и выглядят нормально, если не считать того, что в большинстве случаев в эти поля введены нулевые значе ния. (Заметим, что это не ваша вина; информация о времени ЧЭС и уж тем бо лее о времени передачи сообщения поступает далеко не всегда ) Но взгляните на поля дат. На календаре базы данных должен стоять 1995 год - год, указанный
131
Импорт базы данных БД ЧЭС
шп
дЩИШ.ЦШШЫЦЦШЛ
JsJiU ?- g» С?
• S -Й •
О. Description
Field Properties
Default Value Validation R jle validation Tc*t Peg jned Allow 2^0 Length 1ПОе<Н Unicode Curnpfession
j )ta type det^ oires the kjnd of values that irers L-ЗП 5to>e m the fHd Pte-^s H for telpon data type-:
Рис 7 7 в запросе. А в таблице, которая представлена на рис. 7.8, вы видите 2094 год. Этот забавный факт имеет вполне рациональное объяснение, связанное с тем, что на зывается несовпадением в исходных установках различных СУБД. Если не задать заранее точное значение типа поля1 - а для даты и времени это Date/Time (Дата/ Время), то каждая введенная дата будет заноситься в память СУБД в виде число вого выражения. Оно представляет собой количество дней, прошедших от даты, принятой за точку отсчета (ей присвоено значение 1). Это имеет определенный смысл' при необходимости вы сможете выполнять с датами арифметические Действия. Если вы вводите значение времени, оно сохраняется в памяти в виде Десятичной дроби, которая равна прошедшей на данный момент части дня. (За точку отсчета принимаются 12 часов ночи.) А вот исходная дата в каждом се мействе СУБД может быть разной. Например, в различных редакциях пакета Office, частью которого является Access, такой датой является 1 января 1900 года. В версиях языка dBase (одну из которых мы использовали) это 1 января 1800 года. Теперь вам понятны числа, которые появились в полях дат сразу после конвер тации файла Filel в Access 2000 (см. рис. 7.6). А вот сутки во всех семействах СУБД начинаются в полночь, и тут при всем желании трудно придумать что-то оригинальное. У яого понятия есть синоним - «формат данных», что, на наш взгляд, более точно Но в настоящей книге под форматом данных понимается тип расширения файла базы данных 5»
132
Конвертирование баз данных из других программных сред
ШШШ BZEH
I B Microsoft Access F.le Edit view Insert FQrrrut Records Tpol'E и^тНол' Help
, o Й Н S u " Jf 4a IB •' M • H i a ? * Qa I S •' •
? J • ОЛ
<
£1 I I
"S -Й - @ , "a ** •• ^
IP
F 1 L E 1 : Table Дата ЧЭС | Время ЧЭС |Дата сообщения |Вра мя соовщвния| 08/24/2094 08/26/2094 12 40 08/26/2094 08/26/2094 03 15 08/26/2094 08/26/2094 17 25 08/23/2094 08/27/2094 09 00 00 00 08/29/2094 08/29/2094 08/24/2094 08/30/2094 07/24/2094 07/29/2094 00 00 00 0П 09/10/2094 09/11/2094 00 00 00 00 09/09/2094 09/10/2094 09/09/2094 09/12/2094 10 30 03/24/20941 04/21/2094! 00.00: 00 OOiO о 04/21/2094 03Я4/2094 00 00 00 00 03/05/2094 04/21/2094 00 00 00 00 03/05/2094 04/21/2094 00 00 00 00 00 00 03/20/2094 00 00 04/21/2094 03/23/2094 00 00 04/21/2094 00 00 06/23Д094 05,90/2094 00 00 00 00 05Л5/2094 06/23/2094 00 00 00 00 05/04/2094 06/23/2094 DO 00 00 00 06/23/2094 00 00 05/09/2094 00 00 08/10/2094 12/30/1899 00 00 09/16/2094 10 15 ОЧ/1КД094 09/15/2094 04 30 09'16'2U94 Реcold i* | < | | 106 » 1 H|»*| ol 858 •1
,
B-41-
FIL_RESP
ITJ
.
•япо
7 | FIL_NAMIERE| FIL_MECTO | FIL^ ! 1 Российская Ф< 6113200 1132С 1 Российская Ф( 7110400 1104С 1 Российская Ф< 9110500 1105C-J 1 Российская Ф< 9110800 1108С 1 Российская Ф( 5116500 1165С 1 Российская Ф( 3116000 11 БОГ Э Украина 0 1 Российская Ф( 2111400 1114С 1 Российская Ф( 5116500 1165С 1 Российская Ф( 8117600 117ВГ 11 Российская Ф(4119200 • • ! 1 Российская Ф< 4118700 1 Российская Ф< 4118000 1180С 1 Российская Ф( 4115700 115ГС 1 Российская Ф( 4118000 1 Российская Ф* 6115200 1152С 1 Российская Ф( 5116500 11 КГ J 1 Российская Ф< 4113600 1ПСС 1 Российская Ф< 411.8700 1187Г. 1 Российская Ф( 4115300 1 Российская Ф( 9111000 1 Российская Ф( 2112000 112ПС 1 Российская Ф( 8117600 1176Г-]
1
-1
_1
•&
Рис. 7.8 Возникает естественный вопрос: а почему нельзя при конвертации данных в dBa установить для полей дат соответствующий формат, а не цифровой, который бь использован в нашем примере? К сожалению, в dBase задано жесткое огранич ние на длину поля Date - 8 бант. Если вы считаете необходимым использовачетырехзначные символы для указания на год (вспомните страх проблем: 2000 года!), то в указанный лимит явно не укладываетесь: поля дат получатся пр •• сто пустыми, что вас, разумеется, не устраивает. Однако, объяснив этот печальный факт, вы не избавились от необходимости ис править положение. Чтобы сделать это, воспользуйтесь операцией замены-вставки Сначала выделите столбец Дата ЧЭС, щелкнув кнопкой мыши по его имени. Теперь в меню Access 2000 откроите таблицу Filel в режиме конструктора (см. рис. 7.8). Акти визируйте опцию Edit (Правка) и выберите Find (Найти). Можно, не входя в меню, просто применить комбинацию клавиш Ctrl+F. В результате на экране появится окно поиска-замены Find and Replace (Найти и заменить), как показано на рис. 7.9. Теперь откройте вкладку Replace (Заменить) и установите в этом окне следую щие значения полей: • Find What (Что найти) - /2094 (часть поля в столбце, которая подлежит замене); • Replace With (Чем заменить) - /1995 (год, устанавливаемый в порядке за мены);
33
Импорт базы данных БД ЧЭС
1*1
Find and Replace
Find What:
1
Replace
Find
3
|1И!Я1
Find Next Cancel
Replace With
|/.«
Lock In:
1
Match:
| д п / Part of Field
Search:
|AII
3 3 3 3
Г
Replace Replace All < < Less
Match Case
Г
Рис. 7.9
D Match (Исправить) - Any Part of Field (Любая часть поля). Данная опция задается стрелкой прокрутки; J Search (Искать) - All (Везде). Задается стрелкой прокрутки. После этого следует щелкнуть по кнопке Replace All (Заменить везде). Затем повторите описанную процедуру для столбца Дата сообщения. В ходе операции поиска-замены по всем полям этих двух столбцов значение года - 2094 - будет заменено на 1995. Итоговый вид таблицы после внесенных исправлений представ лен на рис. 7.10. Но и это еще не все. Если вы сравните сообщение о ЧЭС, полученное из исход ной базы данных в среде Clarion, и его изображение после конвертации в Access 2000 (см. выделенную запись 106 на рис. 7.10), то обнаружите одно различие, кото рое, конечно же, свойственно всем записям. Согласно информации в исходной базе данных, авария на магистральном трубопроводе произошла 23.03.95 г. В но вой БД этому событию соответствует другая дата - 24.03.95 г. В чем тут дело? Детальная проверка объясняет причину такого сдвига во времени: в разных СУБД заложены разные установки насчет того, как представлять дату 29.02 в високосном году. Это и проявляется при преобразовании базы данных. Там за несколько лет накапливаются большие массивы информации, и в каждом висо косном году 29 февраля происходит своеобразная «мутация»: в преобразован ных записях все даты отличаются от исходных на +1 день. Через 4 года сдвиг Увеличивается еще на 1 день, и т.д. Как видите, здесь необходима корректиров ка, и осуществить ее технически несложно; потребуются лишь внимательность 11 Методичность. Просто сравните выбранные вами контрольные записи в исход ной БД с их отображением в новой, итоговой базе данных и определите границы п °Дмассива с конкретным значением сдвига (например, +1). Теперь исправьте Данные этого подмассива с помощью операции поиска-замены так, как было по казано выше.
1 34
Конвертирование баз данных из других программных сред 1-loJx
|ЕЗ Microsoft Access File Edit View Insert Format Pecordo Toe Is Windo v Help
i D e J H l a t ' j . i b e ' ' '•'> Ь - аа y - i H a a ? * m © • ^ -•- и i\
1
ng-Й • о. м •* *
.--•а
©
й•
о.
F I L E l : Table FIL^VIPY | FIL_NAMECH | Дата ЧЭС | Время ЧЭС {Дата сообщения! Время сообщения] 10305 Обнаружение ; 06/27 Л 995 09 00 03/26/1995 0U 00 30303 Загрязнение в( 08/29/1995 06/29/1905 20203 Обвалы грунта 06/24/1995 08/30/1995 30303 Загрязнение ei 00 00 07/24/1995 07/29/1995 10801 Авария на кан. 09/10/1995 00 00 0П 00 09/11/1995 30303 Загрязнение р< 09/09/1996 09/10/1995 00 00 10 30 10109 Авария на мап 09/09/1995 09/12/1995 101091 Авария на мап| 03/24/1995! 00 00 04/21/1995' 00.00 03/04/1995 10802 Авария водоес 00 00 04/21/1995 00 00 00 00 10201 Пожар в цехе i 03/05/1995 04/21/1995 00 00 00 00 10302 Авария грузов' 03/05/1995 04/21/1995 00 00 10109 Авария на скв< 03/20/1995 00 00 04/21/1995 00 00 00 00 00 00 30202 Превышение Г 03/23/1995 04/21/1995 00 00 10201 Пожар на мета 05/20/1995 06/23/1995 00 00 00 00 10205 Пожар иэобутн 05/05/1995 06/23/1995 0000 00 00 10701 Авария на эле! 05/04/1995 06/23/1995 00 00 00 00 10109 Авария на кон; 05/09/1995 06/23/1995 00 00 10203 Сход вагонов t 03/10/1995 12/30/1899 00 00 10301 Авария с выбр 09/16/1995 10 15 09/16/1995 10305 Разлив ртути е 09/15/1995 04 30 09/16/1995 06/26/1995 00 00 10305 Обнаружение ( 15 07 10109 Авария на мап 09/25 '1935 09/26/1995 00 00 09/30'1ЛП5 10301 Авария с выбр 00 20 09/30/1995 00 00 ПЛ Л П лл nn na/qn/iQQc. 10в » I » i l » * i ofese Re cord и | « ( I
-iDlxj FIL_RESP
| FIL.tQ 11 Poccm POCCHI
POCCKU
Украиг11 11
I
РОССИ! РОС СИ; D
,
occm
11! дВВД 11 D O C C m 11 Россн* 11 POCCHI 11 Россш 11 3 ОС-СИ» 11 D 0 C C I U 11 э О С С И ( D 11 occm 3 11 оссш D 11 occm Pdccm Purcm 11 Рос cm 11 Poccm 11 Prxuu 11
- ^
Рис 7 10
Сортировка записей И, наконец, последняя операция: таблицу базы данных желательно, хотя и не обя зательно, отсортировать. Операция сортировки записей в Access 2000 очень про ста. В окне конструктора (см. рис. 7.10) выделите тот столбец, по которому требу ется сортировать записи. Сама сортировка производится с помощью одной из двух кнопок: £i] или gjj. Посредством первой из них вы располагаете записи по возрастанию: для цифровых символов - от 0 до 9, для текстовых - от А до Z. Вто рая кнопка, соответственно, используется для сортировки записей по убыванию. Щелкните по одной из кнопок. Теперь оглянемся назад и посмотрим, что уже сделано и что еще предстоит вы полнить. Вы преобразовали и импортировали в Access 2000 один файл (Filel) базы дан ных БД ЧЭС из СУБД, созданной в среде Clarion. Но, во-первых, вы импортиро вали только часть информации (данные лишь за 1995 год), а в БД ЧЭС накопле ны записи с 1990 года. Во-вторых, в БД ЧЭС есть еще несколько словарных файлов, которые тоже нужно перенести в новую базу. Что касается первой части вопроса, то можно, конечно, пополнить базу данны4 новыми записями точно так же, как данными 1995 года. Впрочем, для осущеа вления этой типовой операции вполне достаточно обычного SQL-запроса п.
135
Импорт базы данных Контроль ЧС
File £dtt ^iew Insert Format Records Tools Window Help
S ^ B # Й У
у - s # a v-
' *
P
/
'
Ь - с£ •
*1 И
' =g
ъъ
м- оМ
•« *
© -Й1 -
О• -|П|Х| - J
1Гм FILEl: Table
I
Виды ЧС |Нанм9ноыни'| Дата ЧЭС [ Врем* ЧЭС [Дата сообщания[Врамл сообщения! Код рвспуб пм[ Наймем] 10205 Пожар в хило!.. 12/30/1699 00 00 11 Росси - ' Jii/02'iq% • 10302 Аварии на трак 01/02/1995 00 00 01/02/1995 00 00 11 Росси 10205 Пожар на узле 01/02/1995 12/30/1899 00 00 11 Росси 20307 Сильный дожд 01/03/1995 00 00 12/30/1899 00 00 0 10101 Сход вагонов i 01/03/1995 14 55 12*30/1899 00 00 11 Росси 20307 Сильный дожд 01*3/1995 12/30/1899 00 00 00 00 0 10301 Отравление лк 01/05/1995 12/30/1899 00 00 11 Росси 10301 Пишевое отраЕ 01/05/1995 12/30/1899 00 00 11 Росси 10201 Пожар в гараж 01/06/1995 12/30/1899 00 00 11 Росси 10205 Пожар в здани 01/07/1995 12/30/1899 00 00 11 Росси 10205 Пожар в жилок 01/07/1995 12/30/1899 00 00 11 Росси 10201 Пожар на Teppi 01,08/1995 12/30/1899 11 Росси 00 00 10101 Авария грузов! 01/09/1995 00 0U 01/11/1995 00 00 11 Росси 10107 Дорожно транс 01/09/1995 12/30/1899 00 00 11 Росси 30102 Заболевание л 01/11/1995 12/30/1899 11 Росси 00 00 10201 Пожар на шве! 01/11/1995 12/30/1899 00 00 11 Росси 10802 Авария на вод 01/13/1995 12/30/1899 00 00 11 Росси 10205 Пожар в клубе 01/14/1995 12/30/1899 00 00 11 Росси 10201 Взрыв в катет 01/18/1995 12/30/1899 00 00 11 Росси 10803 Авария котла к 01/19/1995 12/30/1899 00 00 11 Росси 30102 Групповое эаб> 01/19/1995 12/30/1899 00 00 11 Росси [1 10107 Дорожно транс 01/19/1995 12/30/1899 00 00 0 Росси I 10301 Отравление лк 01/19/1395 12/30/1899 11 Рогси 00 00 i 1Л1Г1Я П п п л ^ п - т п я н г ni/1Q/iqQ^ 11 Рпггит] ОПП/1Я99 пппл Ci-.orf " I - I I 1 • | ы | > » 1 of 646 •1
•I
Рис. 7 11
присоединение, о чем будет рассказано в главе 9. (Правда, вам все равно придется заниматься устранением временного сдвига.) Импорт словарных файлов производится так же, как перемещение файла Filel. Поскольку файлы подобного типа не содержат полей даты и времени, никаких дополнительных проблем здесь не возникает. В завершение работы надо привести базу данных в привычный вид. Ограниче ния на длину имени поля практически отсутствуют, поэтому дайте всем полям в файлах русскоязычные названия. Вы уже начали делать это немного раньше в разделе «Поля даты и времени» - с помощью поля Caption (Заголовок) кон структора таблиц. В своем заключительном варианте таблица Filel представлена на рис. 7.11, а окно базы данных - на рис. 7.12.
Импорт базы данных Контроль ЧС Технология импорта базы данных Контроль ЧС в основном та же, что и в преды дущем случае. Как вы помните, исходная база данных существует в среде FoxPro. Поскольку в программном обеспечении Access 2000 отсутствует конвертер фор мата FoxPro, на первом этапе надо импортировать файлы данных в Access 97 (где нужный конвертер есть), а уже затем, на втором этапе работы - из среды Access 97 fi Access 2000. Снова подробно рассмотрим эти преобразования на наиболее
136
Конвертирование баз данных из других программных сред
••Jnlxl
| Ш Microsoft Access J File Edit View Insert l o o Is Window
j D e£ t
с
•• v '
:.
*; •- ':}:.- а л -
k £ Design
S]J
П
0J Щ
[1
i t ] New
>
- ?
-a
"V :':;: 111
Create table by using wizard Create table by entering data CLRES
Ш
Filel
^^
Щ
MYI4
=i И И
Ш
REGION
Щ
TIPCHS
^ ЧЙР
Щ
UtCRCHS
в
• °5 /
llTilBCreate tabte in Design v i e w B
Objects
u
.
•IJalxl
• d b l : Database Щореп
!
Help
_-, ЯШ
«•-J*
•Ш
Менеджер
ЦП) Назначение
Groups
(ПИ Приборы, представленные на рынке2
^
l|
ЦЩ Страны
1
Ш
Типы приборов
ШВ Фирмы
<1
1 > Рис. 7.12
показательном примере - на файле ES_oper.dbf, одном из тех, где сосредоточена вся основная фактическая информация.
Первый этап: импорт данных из FoxPro в Access 97 Как выглядит исходная запись базы данных Контроль ЧС в формате DBF среды FoxPro, показано на рис. 7.13. Последовательность действий при конвертации указанного файла практичес ки полностью совпадает с первым этапом импорта базы данных БД ЧЭС. Еще раз перечислим необходимые шаги, но очень кратко. 1. Откройте окно базы данных в Access 97. В принципе можно было исполь зовать любую БД в Access 97, так как импортируемый файл в ней долго не задержится. Но ради чистоты эксперимента все же откройте новую базу данных в Access 97 и назовите ее dbl.mdb, как и будущую БД в Access 2000. Однако поместите открытую вами базу данных в другую (по сравнению с dbl.mdb в Access 2000) папку, чтобы программа Windows не возражала, так как одновременное присутствие на одном жестком дис ке Access 97 и Access 2000 может вызывать конфликты. Окно этой пустой базы данных показано на рис. 7.14.
137
Импорт базы донных Контроль ЧС
Li I фалл
И НИМИ Правка
гн^п
—
Поиск Спраьм Республика Кони Усинск
~э
ДяТЙ ЧС : 22/05/97 Виц ЧС: Аварии на нефтепроводах В 28 км от города Усинска произошел разрыв магистрального подземного нефтепровода диаметрам 700 мм- Разлив нефти на поверхности около 2000 кв. метров. Нефтепровод перекрыт. Ведутся работы по очистке загрязненной территории. МЧС РФ проинформировано. Причина и ущерб аварии устанавливаются
А Рис. 7.13
2. Войдите в меню базы данных и задайте ряд команд: Файл => Внешние дан ные => Импорт. 3. Найдите файл ES_oper.dbf в исходной БД (см. рис. 7.15). Не забудьте ука зать в этом окне тип выбранного файла. 4. Щелкните по кнопке
импорт
|.
5. В ответ на сообщение Выполнен импорт ES_oper, щелкните по кнопке ОК. 6. В окне базы данных появится новая таблица ES_oper. Если вы теперь откроете таблицу ES_oper, (см. рис. 7.16), то увидите, что даты в исходной и в импортированной базах данных совпадают и отображаются
l-ln|x|
^ Microsoft Access
Q& У
_fi -
®
-a
гЗ
0> d b l : база данных ПИ Таблицы
_§1 Запросы )
E l Форк
Отчеты
S Макросы
«<£ Модули
-оздать
[Готово
NUM
Рис. 7.14
1 38
Конвертировоние боз данных из других программных сред
Импорт
~3 т\ &\тЩ --ГИГ Имя
j Изменен 10/16/19..
1 Размер 1 Тип 1 Кбайт DBF
J ] Classp.dbf _j] Classq.dof
1 Кбайт DBF
10/16/19..
_j] Classr.dbf
2 Кбайт DBF
09/01/19..
_j] Classt.dbf
1 Кбайт DBF
04/01/19..
_d] Classtr.dbf
1 Кбайт DBF
04/01/19..
_j] Es_dg dbf
1 Кбайт DBF
04/01/19..
975 Кбайт DBF
04/26/19..
j ] Pegion.dbf
6 Кбайт DBF
03/29/19..
_j] Region_d.dbf
1 Кбайт DBF
03/26/19.,
13 Кбайт DBF
10/07/19..
&Щ*1Л!Ж.ВВ
^yj Tipchs.dbf
1
d
Импорт
1
Отмена
I
Отбор...
"
Найти файлы, отвечающие условиям: Имя ф зила: +
Хип файлов: Microsoft FoxPro ( .dbf)
_jj
Текст/свойство:
w
Дата изменения:
\
По умолчанию устанавливаются не все типы файлов. Для их добавления служит кнопка "Выбор компонентов" в разделе "Доступ к данным" при устано&г.е. Другир типы данных есть и в Ofhce 97 V'aluPack. Найдено файлов: 20.
Рис. 7 15
•MJnlxll
Microsoft Access
о с#и § а ? м- в ' § а ?
:
og-^l- О ©, -' ' 25- anm ' • * <*'' SI XI ъъ~~ ** »*•* &-М-
М ES O P E R : таблица DAY | OBJ | KES • 01/01/1997 11320210 30115 01/01/1997 11800340 30106 01/01/1997 12711615 30110 01/01/1997 11450010 10603 01/01/1997 11450010 10Б03 01/01/1997 11490010 10206 01/01/1997 11051467 10201 01/01/1997 11410050 10206 01/01/1997 11920280 10206 01/01/1997 11710450 10101 01/02/1997 11410410 10206 01/02/1997 11450010 10903 01/02/1997 11B70240 10200 01/03/1997 12441110 10603 3J П.» -I'll 1 . |.l !>•! «a 6348
5) ШШ-ЬЫ
|
SES
I
0 D 0 0 0 0 0 0 0 0 0 0 0 0
•I
TES | Кемеровская об. Ханты - Манснйс! Москва
Ленинградская о
DEXU
|
CES
01/01/1997 01*1/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 09/29/1997 01/01/1997 01/02/1937 # 09/29/1997 01/02/1997 10/27/1998
| Ob_iJ Ново Стер Окгя! Мое» Mock Новп ШКОТ ВОЛК
Нижн Тобо CBBTI
МоСк Сосн Били-]
_1
-J
•1 jPe КИИ
ним '
Таблицы
'
1 • '••"'
Рис. 7.16
в правильном формате, а поля времени вообще отсутствуют. Можно вздохнуть свободно: проблем, которые пришлось решать при импорте предыдущей БД. в этом случае не будет. Переходите ко второму этапу конвертации.
139
Импорт базы данных Контроль ЧС
Второй этап: импорт данных из Access 97 в Access 2000 Импорт файлов на втором этапе происходит практически так же, как и па первом, однако стоит отследить имеющиеся различия. Итак, второй этап включает в себя следующие шаги: 1. Откройте окно базы данных в Access 2000 (см. рис. 7.12). 2. Войдите в меню базы данных, а затем задайте ряд команд: File => Get External Data => Import (Файл =» Внешние данные => Импорт). 3. Найдите файл ES_oper.dbf в исходной базе данных (см. рис. 7.15). Чтобы файлы с таким расширением были видимыми, предварительно укажите в этом окне соответствующий тип файла (или «Все файлы»). 4. Щелкните по кнопке Вт import |. 5. На появившееся сообщение Successfully imported 'FILE1' ('FILE1' успеш но импортирован) следует ответить ОК. 6. В окне базы данных появится новая таблица ES_oper. Пока все в порядке, но не забывайте, что вы импортировали только один файл, хотя и самый большой - ESoper. Однако в базе данных Контроль ЧС содержит ся еще много словарных файлов. Проведите для каждого из них аналогичную двухэтапную процедуру импорта. Опустим промежуточные детали, подробно рассмотренные на примере файла ES_oper. На рис. 7.17 представлено окно новой базы данных в Access 2000, в кото рой собраны наконец все файлы - как свои, «родные», так и импортированные.
ГЛ5ТЗП
У Microsoft Access File Edit View
СПЙ
Insert Tools
Window
aa у *^
Help
b-
ОД '
a" a s * ! - GJ R3
dbl: Database Щ1]0реп k £ Design Objects
JDNew
0J Ej 0j
•ED И 11 Ш
Lroups
X
Create table in Design view Create table by using wizard Create table by entering data CLASSA CLASSC CLASSCC ClASSD CLASSE
m CLASSG m CLASSL m CLASSO CLASSP
.i
1
Рис. 7.17
a CLASSQ m CLASSR m ClASST m CLRES m ES_OPER m Filel m MVN m REGION m REGION_D m TIPCHS m UKRCHS *m М е н е д ж е р
; Sf>
140
Конвертирование баз данных из других программных сред
В заключение надо русифицировать имена полей в файлах, подобно тому как это было показано на рис. 7.11 для файла Filcl из базы данных БД ЧЭС. Посвя щать изменениям каждого файла по отдельному рисунку нет смысла - файлоц слишком много. Кроме того, эти изменения будут рассмотрены в последующих главах, когда речь пойдет о программировании в базе данных.
Резюме 1. По мере появления новых, более совершенных СУБД все актуальнее стано вится проблема использования данных, которые накоплены в информаци онных банках предыдущих, в том числе и морально устаревших версий. 2. В решении этой проблемы на сегодняшний день наметились два основных направления: - применение конвертеров, которые преобразуют данные из одного форма та в другой. Наборы таких конвертеров, хотя и не всегда достаточно пол ные, есть практически во всех СУБД, и пока это основной путь решения проблемы; - использование технологии ODBC (Open Database Connectivity). ODBC открытый интерфейс доступа к базам данных из прикладных программ Он позволяет работать с документами «чужих» для конкретной БД фор матов. В настоящей главе рассмотрен первый способ решения проблемы. 3. Как показывает опыт, при конвертировании баз данных, кроме собственно преобразования форматов СУБД, могут возникнуть еще две трудности: - несовпадение кодов словарей; - различие между форматами даты и времени в разных БД. 4. В процессе конвертирования, который описан в настоящей главе, необходи мо преобразовать в программную среду Access 2000 базу данных БД ЧЭС, сформированную в среде Clarion 3.0, и базу данных Контроль ЧС, разрабо танную в программной среде FoxPro 2.5. Третья БД в этом интегрированном банке данных - Контрольно-измерительные приборы - создана непосред ственно в среде Access 2000. В результате все эти базы данных должны функ ционировать совместно. 5. При переносе файлов из одной СУБД в другую необходимы повышенные осторожность и внимание, так как различие в исходных установках, поло женных в основу той или иной СУБД, может привести к самым неожидан ным коллизиям.
Глава VIII Общие вопросы программирования в Access • Сравнительная характеристика языков программирования в Access • Выбор языка программирования
Сравнительная характеристика языков программирования в Access В Access пользователь может работать с тремя языками программирования: • SQL (Structured Query Language) - структурированный язык запросов. Это формальный стандартизованный язык высокого уровня, содержащий сред ства непроцедурной (не требующей программирования) спецификации за просов; • макросы; • VBA (Visual Basic for Applications) - объектно-ориентированный язык про граммирования.
Язык SQL Язык SQL - это внутренний язык Access 2000, на котором формулируются запро сы. В принципе SQL используется не только в среде Access 2000; он вообще широ ко применяется в работе с реляционными базами данных. Поскольку сегодня
142
Общие вопросы программирования в Access
подавляющее большинство БД относится именно к этому классу, язык SQL зна чительно облегчает пользователю работу с различными СУБД. Запросы - основной способ получения сведений пз базы данных. С помощью запроса вы можете отобрать определенную информацию и рассортировать ее по значениям полей. Очень важно, что запросы позволяют фильтровать данные, то есть выбирать именно ту информацию, которая удовлетворяет определенным, за ранее заданным условиям. Запросы можно применять при создании форм, отче тов, страниц доступа к данным. Использование запросов удобно при разработке таблиц и добавлении новых записей в уже существующие таблицы, при удалении записей, поиске дублирующихся данных и т.д. Работая с языком SQL, вы исходи те из существующей организации БД и более или менее стандартного набора опе раций, хотя структура самого запроса иногда бывает достаточно сложной. Прав да, в запросе нежелательно использовать слишком разветвленные логические выражения: формального запрета на них нет и запрос построить можно, однако получившаяся структура будет громоздкой и неудобной. (Для подобных случаеь в Access есть средства программирования.) Чтобы запустить запрос, следует создать событие - команду, которая распознается формой, элементом управления формы или отчета. Таким событием может стать, например, щелчок по какой-либо кон кретной кнопке. Однако пользователь должен еще задать область применения за проса, так как он не запускается автоматически даже при возникновении события.
Макросы Макросы, или макрокоманды, представляют собой заранее созданные списки дей ствий - программы, которые выполняются после щелчка пользователя по кнопке или после других определенных действий (возникновение ошибки, открытие, за крытие элемента управления и т.д.). Каждое действие макроса выполняет опреде ленную операцию: например, установка значения, открытие или закрытие фор мы, диалогового окна и др. Макрос предназначен для объединения нескольких различных действий, представляемых макрооператорами, в одну процедуру, ко торая легко может быть вызвана. В отличие от SQL, макрооператоры тесно связа ны с командами данного программного продукта, в частности Access. В макросах все команды обычно выполняются по очереди. Исключением явля ется ситуация, когда в макрос введено некоторое логическое условие, которое может изменить последовательность операций. Макрос в среде Access состоит из перечня действий, которые в пошаговом ре жиме выполняются в случае наступления определенного события. Допустим, мак рос запускается, когда пользователь щелкает по командной кнопке, закрывает форму или активизирует панель управления текстовым документом, открывшим ся в окне. Макрос может выполняться также при выполнении тех или иных усло вий. Например, условные макросы могут отображать окно сообщения, если вводимые в поле данные имеют определенное значение. Макросы создаются в специальном окне макросов - Macro Builder (Построитель макросов). Сопоставляя возможности макросов и языка SQL, отметим, что область при менения первых заметно шире. Макросы могут использоваться для ситуаций,
Сравнительная характеристика языков программирования в Access
143
привязанных к событиям1, возникающим независимо от пользователя, для вы полнения разветвляющихся операций (например, в условных логических выра жениях). Макросы удобны для простых ответов на события, но имеют свои огра ничения и не всегда помогают пользователю справляться с разнообразным сложностями, возникающими в реальной практике, особенно если речь идет об Access. Например, нельзя использовать макрос для того, чтобы задать обработку события или выполнить цикл действий по записи транзакций. Макрос не возвра щает значение, поэтому не может применяться для извлечения введенной пользо вателем информации, рассчитанного значения или результата сравнения. Теоретически нет препятствий к тому, чтобы включить в макрос процедуру VBA. Однако на деле все обстоит скорее наоборот: макросы используются как составная часть этих программ, тем более что любой макрос легко конвертиро вать пли включить в процедуру VBA.
Процедуры VBA Как уже отмечалось, макросы обычно представляют собой только линейную по следовательность действий. Но на практике этого недостаточно - требуется весь аосенал средств программирования: ветвления и циклы, вызов вспомогательных процедур и передача параметров, организация диалога с пользователем, проверка и изменение состояния различных элементов документа и т.д. По сравнению с SQL и макросами язык VBA является более современным, раз витым и сложным, поэтому может использоваться для выполнения любых дей ствий в ходе работы приложения. Данный язык включает в себя объекты, семей ства, события, методы, процедуры, операторы и свойства. Программа VBA - это процедура, которая выполняет определенную операцию или рассчитывает и воз вращает значение. Кроме того, очень важно, что VBA - язык программирования, управляемый событиями. Иначе говоря, с помощью программы VBA можно уста новить необходимую реакцию объекта Access на определенное событие. Итак, язык VBA позволяет сделать все, что выполняют макросы, и даже существенно больше. В принципе с помощью VBA можно создавать и запросы. Однако специ ализированный язык, каким является SQL, приспособлен для этого значительно лучше. (Ниже будет показано, что использование языка SQL в самом деле замет но упрощает построение запросов.) Существуют два вида процедур VBA: подпрограммы (subprocedures) и функции. Подпрограммы выполняют одну или больше операций, однако не возвращают значение. Функции не только выполняют операции, но и возвращают значение. В справочной системе Access вы найдете множество примеров процедур событий. Эти процедуры можно скопировать и связать со свойствами события элемента управления. Затем вы можете изменить код и имена переменных, чтобы они соот ветствовали вашему приложению. Для создания собственных процедур исполь зуйте Code Builder (Построитель программ). После проведенного краткого сопоставления сформулируем некоторые реко(ендации по выбору языка программирования. Cofiiii rue - это действие, которое может инициироваться пользователем, оператором VBA или самой сие i смой.
144
Общие вопросы программирования в Access
Выбор языка программирования В приложении легко создавать и применять макросы и SQL-программы, но иног да вам придется использовать язык VBA. Рассмотрим такой пример. Сообщения об ошибках, которые выводит система, обычно носят довольно абстрактный ха рактер и скорее вызывают новые вопросы, чем дают ответы. Чтобы облегчить ра боту пользователя, лучше отключить вывод таких сообщений и заменить их на короткие информативные «диагнозы», дополненные советами по решению про блем. Все это можно сделать только с помощью программы VBA. Макросы выполняются с заданными значениями аргументов. Аргументы - это параметры, используемые при вычислении значений функций и при выполнении процедур. Аргументы заключаются в круглые скобки. Если в ходе работы значе ния аргументов требуется изменить, то вы должны написать процедуру VBA. Как видите, выбор между макросами и кодом VBA зависит от того, что вы хотите сде лать. Макросы могут осуществлять простые операции - такие как просмотр отче та или выключение панели инструментов. Некоторые задачи можно выполнять только с помощью макросов (например, определенные операции при первом за пуске базы данных или установление соответствия между комбинацией клавиш и командой). Access 2000 содержит много встроенных внутренних функций наподобие Date() и Pmt(), которые возвращают значения при указании аргументов. Внутрен ние функции доступны и для макросов. Если вы хотите сами создать функции, то должны использовать соответствующие процедуры VBA. Кроме того, эти про граммы позволяют создавать и модифицировать объекты точно так же, как и мас тера. С помощью процедур VBA вы можете изменить оформление и функции эле ментов управления формы и других объектов. Отметим, что процедуры легко открывать, поскольку они хранятся как модули. (Макросы содержатся отдель но во вкладке Macro (Макросы) окна базы данных.) Итак, программирование с помощью VBA имеет ряд преимуществ. Еще раз подчеркнем их: • процедуры VBA находятся внутри определения формы или отчета. Если вы перемещаете или копируете эту форму или отчет в другую БД, то процеду ры VBA автоматически перемещаются вместе с ней, в отличие от макросов (последние придется переместить или скопировать отдельно); • если ни одна из встроенных в систему функций не удовлетворяет-вашим требованиям, то язык VBA позволяет создавать процедуры, состоящие из специализированных функций. Впоследствии они могут также использо ваться вместо сложных выражений; • макросы обрабатывают все множество записей. С использованием процедур VBA можно просматривать и обрабатывать записи по отдельности, изменяя команды в зависимости от установленных значений; Q аргументы макроса нельзя изменить во время его работы. Напротив, когда выполняется процедура VBA, ей можно передавать другие значения или определять переменные в качестве аргументов;
Резюме
145
J процедура VBA позволяет обнаружить ошибку, перехватить сообщение о ней и заменить его на более информативный для пользователя совет; • язык VBA чрезвычайно удобен для создания определений объектов БД и для манипулирования ими. Вы можете изменить свойства этих объектов, а так же добавить или удалить элементы управления.
резюме 1. Access предоставляет пользователю возможность работы с тремя языками программирования: - SQL (Structured Query Language) - структурированный язык запросов. Это формальный стандартизованный язык высокого уровня, содержащий средства непроцедурной (не требующей программирования) специфика ции запросов; - макросы; - VBA (Visual Basic for Applications) - объектно-ориентированный язык программирования. 2. Каждый из этих языков занимает определенную функциональную нишу. В настоящей главе был приведен краткий обзор возможностей этих языков и даны общие рекомендации по их использованию.
Глава I X Программирование на я з ы к е SQL •
Типы запросов
•
Запросы на выборку
•
Создание объединенной выборки
•
Запрос на удаление записей
•
Удаление дублирующихся записей
•
Перекрестный запрос
•
Работа со средой Access 2000 без ее инсталляции
Как уже говорилось в предыдущей главе, главной «специальностью» язык SQL является конструирование запросов пользователя к базе данных. Поэто му программирование на языке SQL, в основном, - это формирование таки: запросов.
ТИПЫ
запросов
Запросы являются основным средством просмотра, изменения и анализа инфор мацни, которая содержится в одной или в нескольких таблицах базы данных. В этой главе, а также в главах 10 и 11, рассматриваются запросы, относящиеся к предметной области, обсуждаемой в настоящей книге. Перечислим важнейшие типы запросов: • select query (запрос на выборку); Q action query (запрос на изменение); • SQL query (SQL-запрос).
Гипы запросов
147
Запросы на выборку позволяют извлечь информацию, рассчитать показатели И создать перекрестные ссылки, но не изменяют данные в таблицах. Запросы на изменение дают возможность корректировать информацию, которая содержится в таблицах. Существует четыре вида запросов на изменение: j make-table query (запрос на создание таблицы) - создает новую таблицу на основе данных, которые уже размещены в одной или нескольких таблицах; j delete query (запрос на удаление) - удаляет все записи из одной или не скольких таблиц на основании критериев, заданных пользователем; • append query (запрос на присоединение) - добавляет целые записи или только указанные поля в одну пли больше таблиц; • update query (запрос на обновление) - изменяет данные в существующих таблицах на основании информации в окне конструктора. Эти запросы могут формироваться в окне конструктора запросов. SQL-запросы предназначены для решения более сложных задач и не создаются в названном окне, а кодируются с использованием операторов SQL. Ниже пере числены варианты SQL-запросов: 3 union query (запрос на объединение) - совмещает в одно поле поля, кото рые расположены в одной или нескольких таблицах или запросах; J pass-through query (запрос к серверу) - позволяет забирать информацию непосредственно из ODBC-таблиц (ODBC - Open Database Connectivity, средства работы с открытыми базами данных), так как напрямую связыва ется с сервером, а не с таблицами системы Access; • data definition (запрос па определение данных) - вносит изменения в опре деление таблицы, то есть позволяет формировать и удалять таблицы, добав лять в них поля и создавать их индексы; • subquery (подзапрос) - создает оператор внутри существующего запроса на выборку или изменение. Подзапрос выбирает подмножество записей, уже извлеченных главным запросом. Выполнение любых задач, связанных с таблицами, подразумевает использова ние языка SQL. Запросы первых трех типов, перечисленных выше, встраиваются в средство просмотра SQL в окне запроса. Чтобы сформировать подзапрос, введи те команду SQL SELECT в строке Критерии (Criteria) сетки Design (Конструктор). Запросы в обеих редакциях Access (97 и 2000) могут создаваться как с помо щью конструктора (Query Design), так и посредством мастера (Query Wizard). На наш взгляд, конструктор удобнее: во-первых, его операции оформляются более на глядно, во-вторых, из конструктора легко переходить к инструкциям в форме SQL и наоборот. Тем не менее на конкретном примере будет показано, как формиро вать запрос при помощи мастера. Однако, как вы помните, есть и третья форма представления запроса - ин струкции SQL. Между запросом, сформированным посредством конструктора, и инструкцией SQL существует жесткая и однозначная связь. Поэтому в дальней шем мы будем показывать для каждого создаваемого запроса соответствующую ему инструкцию SQL, а также подробно рассматривать операторы, которые вхоДяг в ее состав.
Программирование на языке SQL
148
Запросы на выборку Простые запросы Под простыми запросами будем понимать запросы, ограниченные одной табли цей и не содержащие каких-либо критериев, условий, фильтров и т.д. Пример та кого запроса - вывод какой-либо таблицы полностью, пусть это будет таблица Страны. Чаще всего такая операция необходима, когда надо просмотреть какойнибудь список - допустим, словарь. Итак, сначала сконструируем простой запрос с помощью мастера
Формирование запроса с помощью мастера Откройте окно базы данных и щелкните по кнопке gl Queries |, чтобы перейти во вкладку Queries (Запросы). Затем выберите опцию Create query by using Wizard (Создать запрос с использованием мастера). На экране появится (см. рис. 9.1) окно Simple Query Wizard (Мастер простых запросов), где содержится вопрос: Which fields do you want in your query? (Какие поля вы хотите включить в свой запрос?). Также мастер предупредит: You can choose from more than one table or query (Вы можете выбрать более чем одну таб лицу или запрос). Выберите таблицу Страны и с помощью знакомой вам кнопки » | перенесите все ее поля в будущий запрос. Затем щелкните по кнопке Next. Пропустите появившееся промежуточное окно, где вам предлагается задать имя за проса (по умолчанию это будет Страны Query). Теперь на экране вы видите табли цу (см. рис. 9.2), на которую ориентирован сформированный запрос. Одновременно Simple Query Wizard Which fields do you want in your query? You can choose from moie than one table or query
Tables/Queries |ТаЫе Страны
d Selected Fields
Available Field?:
Код Страна
ШИШЕ
Cancel
Next >
Рис 9 1
Finish
149
Запросы на выборку
Щ]
Ы Microsoft Access File Edit View i Window
Ы, - 0
Insert Format Records
Help
# B. v-
•
1
lis Страны Query: Select Query Код 01
• 02 03 04 05 06 07 08 09 10
Tools
|
-. HIsID ^
Страна | Примечания Страна не укч: United Kingdom USA Германия Италия Россия США Финпяндия Франция Швейцария
*
А
Рис 9 2 во вкладке Queries (Запросы) окна базы данных появится имя вновь созданного запроса - Страны Query.
Формирование запроса с помощью конструктора Теперь сформируем тот же самый запрос с использованием конструктора. Как и при запуске мастера, откройте конструктор, выбрав вкладку Queries окна базы данных. Теперь активизируйте опцию Create query in Design View (Создать запрос в режиме конструктора). После этого вы увидите окно Show Table (Показать табли цу). В нем вам нужно выбрать таблицы и/или запросы, на основе которых следует сформировать запрос (см. рис. 9.3). Как мы уже решили, это будет таблица Страны. На экране появится окно конструктора запроса - основного инструмента для по строения запроса (см. рис. 9.4). В окне вы видите включенный в него макет таблицы Страны, которую вы только что выбрали. Кроме того, в окне расположены поля репликации (в данном случае они нас не интересуют) и поля таблицы: Код, Стра на и Примечание. Щелкните дважды по каждому из них, и эти поля будут поме щены в бланк запроса, расположенный в нижней части окна (см. рис. 9.5). Как видите, запрос действительно очень прост, и на этом его формирование можно счи тать завершенным. Если вы теперь закроете окно конструктора с помощью обычной кнопки-«крестика», то Access 2000 попросит вас подтвердить выполненные операции или внесенные изменения (см. рис. 9.6): Do you want to save changes to the design of query 'Query Г? (He хотите ли вы сохранить изменения, сделанные в запросе За прос 1?). Если вы соглашаетесь, система предложит назвать запрос. По умолчанию бу дет предложено имя Query с каким-либо порядковым номером - в нашем случае, как показано на рис 9.6, это Queryl. Затем вы выходите в окно базы данных (см. рис. 9.7).
150
Программирование на языке SQL
•••
1 Show Table Tables J Queries | Both
|
Add
ES OPER Filel MYM REGION REGION _D TIPCH5 UKRCHS Менеджер Назначение Приборы, представленные на рынке2
»
Close
Типы приборов Фирмы
Рис 9 3
Ы Microsoft Access - IQueryl: Select Query] [§l File Edit View Insert Query Tools Window Help
D c£ У
••
У
,
.
-ISlxf
5 • п л • rJ' ^ -^ • (3 . &•
! <Ъ Е А»
- Cf
T1
Страны s_GUID sjjneage
V
A
Страна Примечания _^
dJ
^
Рис 9 4
Перед вами та же БД, что была показана на рис. 7.17, только там открыта вклад ка Tables (Таблицы), а на рис. 9.7 - вкладка Queries (Запросы). Дальше есть два варианта. Вы можете открыть запрос из окна базы данных или щелкнуть по кноп ке { |. В обоих случаях произойдет запуск запроса, и на экране появится таблица (см. рис. 9.2).
151
Запросы но выборку
шз
Ы Microsoft Access File
Edit
Vie,
I n » it
D \3 У
Cjuei^
Ton I;
Window
Help
Ь - сю - й' °S -M - (*) -
X 4n IB
г5
й
All
1
lis Queryl: Select Query
1
Страны s_GUID sjjneage
шш 3
~3
Код Страна Примечания _^
Field Table Sort Shov-1 riteria or
an
Страна Страны
LTpaHti
0
— —
Прнм»=-чзнич Страны
0
0
•
>г
-1 1
d
Рис 9 5
Microsoft Access Do you want to save changes to the design of query 'Queryl'?
Yes
No
Cancel
Рис 9 6
Представление запроса на языке SQL Теперь посмотрим, как будет выглядеть наш запрос на программном языке. Пере веденный на этот язык, он называется «инструкция SQL» и представляет точный анало1 запроса, сформированного в окне конструктора, представленный в кодах языка SQL Предполагается, что если бы пользователь захотел написать данный запрос на SQL, то он (запрос) выглядел именно так, как показано в этой инструк ции. Чтобы увидеть такую инструкцию SQL, дважды щелкните правой кнопкой мыщц в верхней части окна конструктора, где уже сформирован запрос (см. рис 9.5). В появившемся контекстном меню выберите опцию SQL View (Режим SQL). В результате вы перейдете в окно просмотра инструкций SQL. Это же окно мож но открыть и другими способами: CI в меню View (Вид) панели меню Microsoft Access активизировать опцию SQL View (Режим SQL);
152
Программирование на языке SQL
j File Edit V i e * Incert Toole Window Help
Щ о р е п j ^ Design cflNew
X
Е
е 7-"|:::Г YA
Create query in Design view Create query by using wizard (5
Query 1
# fffiWffif 1
i
Рис 9 7
а щелкнуть по стрелке прокрутки рядом с кнопкой • -1 на панели инстр\ ментов Microsoft Access, а затем снова выбрать SQL View. Текст инструкции SQL приведен на рис. 9.8. Рассмотрим ее подробнее. Любой запрос в форме SQL состоит из нескольких ключевых слов и начинает ся с команды SELECT. Она определяет возвращаемую информацию как набор запи сей и указывает, какие поля должны быть выбраны в ответ на запрос. Если пост SELECT нет других ключевых слов, то будут возвращены все записи. Следующп элементы строки, которая начинается ключевым словом SELECT, - это Код, Стран и Примечания. Они задают поля, включаемые в результат запроса. Согласно синтаксическим правилам языка SQL, перед именем каждого поля указывается имя таблицы, которой принадлежит это поле. Названия таблицы и поля разделены точкой, а каждая пара значений (например, Страны.Код) отделяется от следующей пары запятой. Ключевое слово FROM определяет таблицу, откуда производится выборка. В дан ном простейшем запросе используется одна таблица - Страны, не связанная с другп ми. Поэтому после FROM никаких ключевых полей нет. Ключевой параметр WITH OWNER ACCESS OPTION не является обязательным. Он по зволяет пользователям, которым обычно не разрешается работать с базовыми таблицами, выполнить запрос и просмотреть его результаты - поля, включен ные в запрос Таким образом, пользователь получает право ограниченного досту па к данным таблицы.
153
Запросы на выборку
HJnlxl
I Q Microsoft Access iy File
Edit
View
In;eit
Qnei/
Tools
Window
Help
»
• _1пЫ_il
1 is1 Query 1 : Select Query SELECT Страны Код, Страны Страна, Страны Примечания FROM Страны WITH OWNERACCESS OPTION,
1
Рис 9 8
Запросы с использованием групповых операций Эта группа запросов предназначена для первичной обработки полученной ин формации - ее суммирования, осреднения и т д. Такие запросы особенно полез ны, когда нужно регулярно представлять обобщенные справки для руководства компании. Еще один пример простого запроса: необходимо получить справку о том, сколь ко человек погибло в результате различных аварий за два с лишним года - с нача ла 1997 по март 1999 гг. Полная информация по этому вопросу аккумулирована в файле Es_oper. В каждой записи о конкретной аварии сведения о жертвах со держатся в поле В том числе погибло. Запрос, построенный таким образом, востребует данные только из одной таб лицы - Es_oper. Чтобы сконструировать этот запрос, сначала, как и в предыдущем примере, от кройте окно базы данных. Затем задайте команды Create Query in Design view => Show Table (Создать запрос в режиме конструктора => Показать таблицу), как по казано на рис. 9.3. В появившемся окне выберите опцию Esoper. На экране воз никнет окно конструктора запроса (см. рис. 9.9). В макете таблицы E s o p e r на этом рисунке найдите интересующее вас поле В том числе погибло и щелкните по нему Дважды. Итак, поле В том числе погибло зафиксировано в бланке запроса. Теперь по думаем, как получить сумму значений этого поля по всем записям. Суммирова ние - стандартная операция, и пользователю не надо специально организовы вать сложение (хотя при большом желании вы можете сделать это). Для этого ^ожно использовать опцию Групповые операции. Щелкните по кнопке т\ на панели инструментов базы данных, и в бланке запроса появится дополнитель ная строка Total (Итоги). (Обратите внимание, что на рис. 9.4 ее нет.) Если вы те перь щелкнете в строке Total на пересечении с полем В том числе погибло, то
154
Программирование на языке SQL
Ы Microsoft Access I File Edit Viev
I-1D|X|
Insert Query Tools Window Help
j D \3 У IE - H
r§] .
& 4a !'
°П г
1
ВЕЗ
•
Lh.
{is Query! : Select Query
А"
ES_OPER Пострадало E-cercclJ Б том числе рамем Рамено детей | Б том числе погиб Погибло детей _jj
J
LJJ 1
Field: Table: Total: Sort: Show: Criteria: or:
«1
— —
Е: том чиспе погиб п ES OPER
^^^^^^^^ А>лЭ flin Мах Count StOev Var First
I П
П
—
±>r . 1
•!
Рис. 9.9
появится стрелка прокрутки, которая позволяет открыть список групповых опе раций: • Group by - команда, включаемая в инструкцию SQL. Эта опция позволяе добиться того же результата, что и выполнение следующих действий: созда ние итогового запроса в окне запроса, а затем выбор для соответствующел поля групповой операции в строке Total (см. рис. 9.9); • Sum - функция, выполняющая суммирование значений в поле; • Avg - операция, позволяющая вычислить среднее арифметическое набора чисел, которые содержатся в указанном поле запроса; • Min - функция, возвращающая минимальное значение из набора значений которые содержатся в указанном поле запроса; • Мах - функция, возвращающая максимальное значение из набора значении которые содержатся в указанном поле запроса; • Count - операция, с помощью которой вычисляется количество записей возвращаемых запросом; • StDev - функция, которая возвращает значение среднеквадратичного от клонения. Последнее вычисляется исходя из набора значений, содержащих ся в указанном поле запроса;
155
Запросы на выборку
• Var - функция, возвращающая значение дисперсии. Дисперсия вычисля ется в соответствии с темп значениями, которые содержатся в указанном поле запроса; j First - операция, возвращающая первое число из набора значений, которые содержатся в указанном поле запроса; j Last - операция, возвращающая последнее число из набора значений, кото рые содержатся в указанном поле запроса; j Expression - функция, возвращающая результат выражения, которое содер жится в указанном поле запроса; • Where - функция, которая определяет, какие записи из таблиц, перечислен ных в предложении FROM, следует включить в результат выполнения инструкций SELECT, UPDATE или DELETE. Из приведенного списка вы, конечно, выберете Sum, так как вас интересует (если вы еще об этом не забыли) суммарное количество погибших. Активизиро вав соответствующую опцию (см. рис. 9.9), закройте окно конструктора запроса [I сохраните изменения (см. рис. 9.6). Теперь следует назвать новый запрос или согласиться с именем, предлагаемым по умолчанию (ято, конечно же, Query с по рядковым номером, - в данном случае Query 2). Под полученным именем новый запрос будет «прописан» в окне базы данных. Если вас такой вариант не устран яет, вы можете воспользоваться кнопкой j j . Если вы теперь откроете этот зап рос, то получите ответ, представленный на рис. 9.10. Здесь указано имя функции (Sum of), имя активного поля (В том числе погибло) и количество погибших за весь период (4008 человек). | В Microsoft Access
HEIDI
File Edit View Insert Format Records Tooh Window Help
His1 Query2 : Select Query B E I E 3 | SumOIB том числе погибло | • 400:3
LI
1
Рис. 9.10 Уже показанным раньше способом перейдем к инструкции SQL (см. рис. 9.11). По сравнению с инструкцией SQL, изображенной на рис. 9.8, здесь появилось Два новых элемента - AS [SurnOf В том числе погибло] и GROUP BY ES_0PER [В том числе погибло]. Смысл первого из них состоит в следующем. В Microsoft Access имена полей (здесь - поле В том числе погибло), указанные в режиме SQL окна запроса, используются в режиме таблицы в качестве заголовков столбцов. Чтобы вывести в режиме таблицы другие имена столбцов (в нашем примере - SumOf В том числе
156
Программирование на языке SQL
пшш
Ш Microsoft Access | File
Edit
Viev
Insert
Query
Tools
Window
Help
[га - и в1 Query2 : Select Query ELECT E'j_OPER.[B топ числе погибло], Sum(E3_OPER.[6 том числе погибло]) AS [SurnOfB том числе погибло] FROM ES_OPER GROUP BY ES_OPER,[B том числе погибло] WITH OWNERACCESS OPTION;
ШЗ
1 J
Рис. 9.11
погибло), следует включить в инструкцию SQL зарезервированное слово AS. Это бывает необходимо, если вы используете статистические функции в запросах, ко торые возвращают слишком сложные или повторяющиеся имена полей. Таким образом, рядом с исходным полем В том числе погибло появляется новое иоле суммы - SumOf В том числе погибло, поэтому и требуется добавить ключевое слово AS. Что касается квадратных скобок, в которые заключены имена полей в ин струкции SQL, то здесь вы имеете дело со спецификой синтаксиса Access. Если имя поля не содержит пробелов, Access автоматически помещает название в квадратные скобки, а если содержит, то может и не поставить их. Поэтому советуем на всякий случай всегда делать это (окружать имена полей квадратными скобками). Смысл второго ключевого параметра - GROUP BY ES_0PER. [В том числе погибло] состоит в том, чтобы фиксировать необходимость ввода групповой операции по полю ES OPER.[B том числе погибло]
Запросы с дополнительными
условиями
Теперь несколько усложним задачу: введем в запрос критерии отбора. Поначалу они будут довольно простыми, но постепенно станут усложняться. Как правило, необходимость в запросах подобного типа возникает эпизодически - при анализе каких-либо отдельных аспектов рассматриваемой чрезвычайной ситуации.
Запросы, в которых критерием является полное значение поля Начнем с самого простого условия. Допустим, необходимо узнать, какие фирм из общего числа предприятий, включенных в банк данных, работают в России. В> фирмы перечислены в таблице Фирмы, и поиск по запросу будет проводиться в ее пределах (пока вы создаем только простые запросы, то есть те, что отбирают данные из одной таблицы). Как открыть окно конструктора запроса и включить в бланк конструктора нужную таблицу, вы уже знаете. Поэтому начнем сразу с от крытого бланка (см. рис. 9.12). В данном примере нас будут интересовать три поля: Код страны, Название фирмы и Адрес. Введите их названия в бланк запроса, как вы уже делали это раныпс-
157
Запросы на выборку
Кодфц*ы Название фир Код страны Адрес j j
I
,.
Код страны Фирмы
0
Название фирмы Фирмы
i
— —
Адрес Фирмы
0
0
"06"
•
•г
<1 1
Рис. 9.12
Чтобы отобрать именно российские фирмы, воспользуйтесь новым элементом критерием. Он вводится в строке бланка, которая так и называется - Criteria (Ус ловие отбора). В нашем случае критерий следует указать в единственном поле таблицы Фирмы, связанном со страной - Код страны. Здесь вы вводите код Рос сии - 06 (см. рис. 9.12). Ясно, что это не самый удобный путь: придется или запо минать коды разных стран, или тратить время на поиски в специальном справоч нике. Проще будет расширить запрос, включив в него две или более таблицы. Мы обсудим такой вариант чуть позже, а сейчас обратим внимание на один существен ный момент. Как вы заметили, в поле бланка запроса Criteria значение кода за ключено в прямые кавычки - "06". Когда вы задаете в Access какое-либо символь ное выражение в качестве фильтра, условия, критерия и т.д. и приводите это значение полностью, Access 2000 поставит кавычки автоматически. Заполнив бланк запроса, закройте окно конструктора. Когда вы подтвердите выполненные действия (см. рис. 9.6), запрос будет включен во вкладку Query окна базы данных. Если вы теперь откроете этот запрос, на экране появится таб лица, показанная на рис. 9.13. В ней перечислены 8 фирм, отобранных по при знаку страны. Теперь посмотрим, как выглядит инструкция SQL для нашего запроса (см. рис. 9.14). В предыдущих примерах вы переходили в окно SQL из окна конструктора запроса. Здесь такая возможность сохраняется, но проделать этот переход так же Просто и из результирующей таблицы вида (см. рис. 9.13). Сначала щелкните правой
158
Программирование на языке SC
В Microsoft Access File Edit View Insert Format PPC jfds
X°oU
• ЙУ
•
# El v'-
'
Window
Sl- i0-
M-HJQ?
Help
' nS-^l
Si 5J ^ Yn
is 1 Query3 : Select Query Код страны Название фириы ОАО "Цвет" Нефть-Газ-Наука НПП "ЭКОНИКС" ЭКОХЕЛП ИНСТРУМЕНТС АО "ЭКРОС" Петербургский институт ядерной физики РАН ОКБ ТЕСТ фирмы "Аналитические приборы" ГЕОХИ РАН
R.eoid
" I • II
7
Адрес С06000 Дзержинск Ннжегор.:одской г,Сп Москьа 117071 Москва Москва 199106 Санкт-Петербург 188350 Ленинградская обл г Гатчина, Or,, ч 198103 г Санкт-Петербург, Рижский пр 2[
' | " | " | <,< В
~3 Рис. 913
гшъ
Ы Microsoft Access i File Edit View
Insert Query
Tools Window
Help
is1 QueryS : Select Query SELECT Фирмы,[Код страны], фирмы.[Название фирмы], Фирмы.Адрес FROM Фирмы WHERE (((Фирмы.[Код страны])="06")) WITH OWNERACCES5 OPTION;
d J" Рис. 9.14
кнопкой мыши в строке имени указанно)') таблицы. Затем в появившемся к текстном меню выберите, как и раньше, опцию SQL View (Режим SQL). Наряду с теми ключевыми словами, которые вам уже знакомы, здесь вы ви дите новое - WHERE с сопутствующими ему параметрами. Это слово - ва шее в базе данных, когда речь идет об отборе информации. Поэтому пара WHERE соответствуют критерию, который вы раньше ввели в бланк запроса. WHERE не является обязательным, однако если оно присутствует, то должн довать после FROM. Если не задавать условие WHERE, запрос возвратит все таблицы.
159
Золросы на выборку
осы в которых критерием является неполное значение поля • • южним условие, которое нужно задать в запросе. В таблице Filel собраТеперь>'<--' ' ", .^ггг омаШ'Я обо всех авариях, случившихся в 1995 году. Предположим, нас ннН на " т ппшь аварии на нефтепроводах. Конечно, можно отобрать те происшетересУ то по классификации БД отнесены к группе Аварии на магистральных ч ствня лТ :прс проводах (иоле Наименование ЧС). Однако нам нужны данные об авариях не ч видах нефтепроводов, а не только на магистрал магистральных. F ть пптой вариант: отбирать записи, у которых в иоле Характеристика ЧЭС инакмся нефтепроводы. Но это слово может находиться в различном кон. т е попользоваться в разных падежах и т.д. В качестве критерия в запросе слезадать корневую часть слова, которая остается неизменной: в данном случае «нефтепровод». (Если бы нас интересовали, например, аварии при добыче и трансоотнровкс нефти, то пришлось бы учитывать понятия «нефтепромысел», «нефтетобыча» и другие. Тогда в запросе фигурировал бы критерий «пефте».) Итак, вне сем слово «нефтепровод» в знакомую строку бланка запроса - Criteria (см. рис. 9.15). Обратите внимание на синтаксическое оформление критерия. В отличие от пре дыдущего примера, здесь использован фрагмент текста, то есть часть поля. Поэто47 нам понадобятся, кроме прямых кавычек, еще и звездочки. Критерий будет оформлен так: "«нефтепровод*" (см. рис. 9.15). К символьной последовательности, помещенной в звездочки, Access 2000 всегда добавляет слово Like (Подобно). Та ким образом задается команда на поиск записей, содержащих подобную подстро ку. Как уже говорилось, кавычки вы можете и не ставить: Access 2000 не забудет
шш
Ы Microsoft Access ! File Ed,t Vie*" Inneit
Query
;•; У
Tools
Window
Щ
Help
J ° п 2 д | | " " „ [ft -Л © - ^ -
о g-
ОаШ 3
1
Filel
=J
Бидь ЧГ Наин еновани* Дата ЧС БренчЧС
zi
J
bJj Field: Пострадало Table: Sort: . Show; Criteria or.
Ш______ —
0
Погибло Filel
Характеристика Ч Filel
0
0
Материальный уще Filel
Мате—
*т-
0
J.ike """нефтепровод*"
.i Рис. 9.15
^
160
Программирование но языке SQi
сделать это за вас. А вот звездочки - исключительно ваша забота. Если ко часть слова, которая используется в качестве критерия, находится на лей " ^ правой границе поля, то с этой стороны звездочку можно опустить. Н 0 к ""'"' вило, вам неизвестно точное расположение критерия. Поэтому звездочки '^ ставить всегда В случае, который мы сейчас рассматриваем, в запрос включены все по лней. Это можно сделать двумя способами. Первый путь: введите в бланк з-ля зааПро са каждое иоле по отдельности, как вы делали раньше. Второй вариант- ввет в бланк все поля сразу. Открыв пустое окно запроса, дважды щелкните МЫШЬю по строке имени таблицы на ее макете, чтобы выделить в нем все поля таблщ Затем установите указатель мыши в выделенной области и нажмите левую кип ку мыши. Не отпуская ее, перетащите стрелку указателя в строку Field первогг столбца в бланке запроса. Теперь отпустите кнопку, и все поля записи будут вве. дены в бланк. Отдайте команду на выполнение созданного запроса (как это сделать, уже обсуждалось). В результате вы получите перечень аварий на нефтепроводах (см. рис. 9.16). Теперь посмотрим, как будет выглядеть в данном примере инструкция SQL. приведенная па рис. 9.17. Ы Microsoft Access File Edit View Insert Format Records Tools VV ndow Help
D e; у a a vid - у # a ^
ь-
ал ,
• *S -& - LTJ „ ,
_
1.
висни
is1 Query4 : Select Query Виды ЧС | На и мв но вэ н HI| Дата ЧЭС | Время ЧЭС |Дэта сообщения Время (^ 00.00 01/25/1995 10109 Аварии на мап 01/24/1995 • 00.00 01/26/1995 10109 Аварии на мап 01/24/1995 00 00 03/18/1995 10109 Авария на мап 03/18/1995 00 00 03/21/1995 10109 Авария на npoi 03/20/1995 00.00 04/07/1995 10109 Авария на мап 04/06/1995 00 00 04/16/1995 10109 Авария на мап 04/13/1995 J 00 00 04/25/1995 10109 Авария на мап 04/20/1995 00 00 04/26/1995 10109 Авария на мап 04/25/1995 10 30 04/29/1995 04/25/1995 10109 Авария на мап 06/25/1995 00 17 10109 Порыв нефтеп^ 00.00 06/14/1995 10109 Авария на мап 06/13/1995 03.15 07/17/1995 10109 Авария на мап 07/17/1995 04.30 12/16/1995 10109 Авария на мап 12/14/1995 12/30/1899 J 10202 Возгорание ем 06/16/1995 12/30/1899 02/11/1995 10202 Порыв и пожар 12/30/1899 J 10109 Порыв нефтепр 12/22/1995 Re cord
и | ' 11
1
> I и | » » | of 18
Рис. 9.16
на выборку
^ Ф У и [ЬияыЧС], File 1.[Наименование ЧС], File 1.[Дата ЧС], File 1.[Время ЧС], File 1.[Дата сообщения], __\ - i l , r - ^ г о п б щ е н и я ] , File 1. [Код республики], File I .[Наименование республики], Filel .[Код области], __\ * |el.[KMHai ' n r i населенного пункта], File 1.[Название области], Filel.[Название района], File 1.[Название Fl
пиквндации пос. WHEREf((Filel.[Характеристика ЧЭС]) Like "'нефтепровод* ^ITHOWNEF ACCESS OPTION;
I
d
Рис. 9.17
Как видите, по своей структуре, то есть по составу ключевых параметров, эта инструкция совпадает с предыдущей. Разница лишь в том, что предложение с ключе вым словом SELECT включает не одно, как в предшествующем случае, а все поля записи. Синтаксические правила записи каждого отдельного поля, естественно, ;;с изменяются. Разумеется, подобные критерии можно вводить одновременно в разные поля бланка запроса. В нашем случае вы используете логическую схему «И»: компо нентами составного критерия будут отдельные критерии для различных полей за писи базы данных. Поясним это на примере, который представляет собой расши ренный вариант только что рассмотренной ситуации.
Запросы с несколькими критериями отбора, заданными в разных полях Сформулируем новый запрос так: «По информации, собранной в таблице Filel, выдать справку об авариях на нефтепроводах Тюменской области». UKHO конструктора для этого запроса показано на рис. 9.18. Как видите, здесь задаi два критерия: прежний - "«нефтепровод»", дополнительный - "Тюменская область". • ово «область» можно было и не вводить: название Тюменская уникально и само е °е служит достаточным критерием.) Новый критерий тоже надо заключить •ЭДочки.Результатом выполнения запроса будет таблица, выведенная на рис. 9.19. Р<>тите внимание, что в предыдущем примере, где не указывался конкретный 1*Г110Ц, ' оыло отобрано 18 записей. Теперь, как и следовало ожидать, их число со'Чтилось записей только 8. Рь изучим соответствующую инструкцию SQL (см. рис. 9.20). Как видно че - ИКа' введение нового критерия отбора влияет только на предложение с клюлов Т],п °м WHERE. К этому предложению добавляется логическое выражение (И) B()f ' операндами которого являются "«нефтепровод*" и "Тюменская область". •ном инструкция SQL остается неизменной. ~119
162
Программирование на яэы,Р
?$0
FIIP £dit View Insert Query Tools Window Hp|p
i? Query4 : Select Query
^ИДЩ*р:
FUel ВИЛЫ ЧС
Н.зиисиое^мИ! Д«таЧС Время ЧС _-j
JU
Jj
Field Tabic Sort Show Criteria or
Наэеэние г. эипна Filel
Название области Filel
0
Н^Еание смгекта Filel
0
Код ведомства Fllel
0
0
Тюменская область
Характеристика Ч Filel
Н Like "нефтепровод*
йеГ—q —1 pr
.1
. Рис 9 IS У Microsoft Access Fie Edit View Insert F j m r FV u i d i
• G? H § й ^ ^- у § a ?
lools
Wniduvt
Help
ъ • ас • »sa-ej. £1 51 v ; Ъ *4 »- * © -a • (?).
IFP
is1 Query4 : Select Query
•
Виды ЧС | Наименован^ 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Порыв нвфтепг 10109 Авария на мап 10109 Авария на мап 10202 Порыв и пожар
| Врамя ЧЭС |Дата сообщения! Врв мя с о о б щ е н н л | Код распухли Н 1 р 00 00 04/06/1995 00 00 04/07/1995 , к 00 00 04/20/1995 00 00 04/25/1995 1 И 00 00 04/25/1995 04/26/1995 00 00 00 00 04/25/1995 04/29/1995 10 30 ^ I г 00 00 06/25/1995 00 17
Дата ЧЭС
07/17/1995 12/14/1995 02/11/1995
03 15 04 30
07/17/1995 12/16/1995 12/30/1899
[
-' ••
00 00 00 00
ТГ R« coid
н| 4 1
6
» 1 »i | » » | or в
_|
_.
-
1
Рис 9 19
Запросы с несколькими критериями отбора, заданными в одном поле Мы уже привыкли к тому, что в одном запросе может быть много Крит для отбора записей Это вполне естественно, когда речь идет о разных записи, потому что каждое из них подобно независимой (или почти не мой) оси координат, а каждый критерий - конкретному значению коорД по данной оси. Но когда требуется задать несколько критериев отбора нительно к одному полю записи, задача усложняется. Посмотрим, как дует решать.
V
Зопросы на выборку
163
^ p j ) e l [наименование ЧС] ( Filel [Дата ЧС], File) [Время ЧС], Filel [Дата сообщения], File 1 [Бремя сообщения], ЕиДЬ 1 '" ^1 р,|ё| [наименование республики], Filel [Код области], Filel [Код населенного пункта], Filel [Название области], ЛЕОj Filel [ ..од р«:пус г111^ *•, F | j e l [название объекта], FiJel [Код ведомства], File! [Название ведомства], Filel Пострадало, Filel Погибло, =jel [^36Эние ^ t ' ^ H B C ] , FMel [Материальный ущерб (колнч)] Filel [Материальный ущерб (натур)], Filel Последствия, :|el [характерис и д и м ф ^ р м а ц и я ] | p,|ei [Необходимая помощь] Filel [Работа по ликвидации последствий] Filel Абонент, Filel [Ki *'
1А
т ^Т<е7поДписа Л ,
sdOWrtel
г н , ] в ание
Щ _J
Filel [Название города]
области])» Тюменская область") AND «Filel [Характеристика ЧЭС]) 1*«''нефтепровод* ))
Щ К « 5 5 OPTION,
J-I
Рис 9 20 Предположим, пользователя интересуют аварии не только на нефтепроводах, юесть при транспортировке самой нефти, но и шире - при транспортировке раз1ПЧНЫХ нефтепродуктов: бензина, мазута, газового конденсата и др. Как выбрать в таком сучае критерий отбора? Можно просто ввести в иоле подстроку «про вод», поскольку этот корень входит во многие слова, связанные с нашей темой: нефтепровод, бензопровод и т.д. Но тогда в выборку неизбежно попадут аварии на газопроводах (которых тоже немало), что не входит в наши планы. Итак, нам неизбежно придется задавать несколько критериев отбора для одного и того же паля записи п связывать их определенными логическими соотношениями. Пока жем на конкретном примере, как это делается. Предположим, надо получить справку об авариях, которые произошли: 3 на нефтепроводах, 3 на мазутопроводах; Э на бензопроводах; Э на продуктопроводах. 'Ibi предусмотрели практически все виды нефтепродуктов. Теперь построим °ответствующий запрос. ак °°ыч1[о, сначала откройте пустой бланк запроса и введите туда все поля 11 (последнее делать не обязательно - любые поля можно вносить в бланк тдетьности). Критерий отбора сформулируйте так: епровод OR «бензопровод* OR *мазутопровод* OR *продуктопровод* че говоря, вы выстраиваете логическую схему «ИЛИ». Теперь посмотрим, 1ы Реализуется на практике. с ок 'но конструктора запроса для таблицы Filel. Как и раньше, введите ^ первого критерия: «нефтепровод* - в строку Criteria на ее пересечении r ,т ' 1 0 м Характеристика ЧЭС. Следующие значения критериев вводятся столбце, но в строках, расположенных ниже по вертикали. Каждая из
164
Программирование на языке '
них помечена словом OR (Или), как показано на рис. 9.21. Количество таь-. практически не ограничено, поэтому составной критерии может включап ДОГ] точно большое количество операндов. Запустив запрос на выполнение вы Пс чите таблицу (см. рис. 9.22). Обратите внимание, что она похожа на резулГ '"Л щую таблицу, представленную на рис. 9.16, когда вы сформировали запрос с критерием. Однако в новой таблице отобрано уже не 18 записей, а 21, и спел ' рийных объектов назван, в частности, бензопровод. '<Е EJ Microsoft Access File Edit View Insert Query Tools Window Help
aa- C? °S •& - (3 .
Гп -!H
'1 g -
!
°nl
fi\:> ©-а- д .
All
^^^™^^™
i? QueryS : Select Query
"•^"•Ч-^Т*]
FUel Виды ЧС Наименоеанш ДатаЧС
Бремя ЧС
_J
f
IU Field. Table. 5ort: Show: Criteria: or:
1
Нагеание ведомсте Filel
0
Пострадапо File 1
0
Погиб по Filel
Харэктеристиг а Ч г " ' Filel
0
0 lihe J.if-£ Lih<еОе
.!.!
Патер lantHtin ущ* Filel
0
f 1этери.зпьнь • дгFilel
0
"""нефтепровод*" '""бензопровод*" "*мазутопроеод*" "'продуктопровод*
.1
1 1
4
-1
Рис. 9.21
Наконец, открыв инструкцию SQL (см. рис. 9.23), вы можете лишний р:т° е ' диться: все изменения, которые внесены вами в логические схемы критериев, точ но отображаются в предложении с ключевым параметром WHERE. Надо сказать, что структуры критериев бывают самыми разнообразны \ HI He при их построении вам потребуются точность и аккуратность, чтобы отбор '•' сей производился правильно. Например, у критериев, выведенных на pHL неизменяемая часть слова - "*опровод*". Исключением является лишь *нет вод*". Казалось бы, можно сократить условие в той его части, где вводятся кр рии. Чтобы при этом исключить записи, связанные с авариями на газопр сформулируем условие следующим образом: ("•нефтепровод*" OR "*опровод*") AND Not "«газопровод*"
Если вы введете такое условие в запрос, а затем выполните его, то действительно отберет записи, удовлетворяющие заданному критери • ко в их число попадут и сведения об авариях, связанных с повреждени • провода или электропроводки. Поэтому учтите, что похвальное стр
3anp°Cbi
65
на выборку
Ы> In^tt
Fgi mat Ptcorcte Tools Window (Help
•&•'
Название обл| Коми ССР
Названия района
ME
| Нззазимо об-ь| Код ц д о м с т в | Нзгвзиив_
31 км Возей - Головные нефтепровод Усинский район нефтепровод
Коми ССР
® .
О 102211 Корпораць 108100 Департам<
Челябинская о г Миасс (85 км юго-заг бензопровод Иркутская обл; Тулунский район, г Ту/ нефтепровод Республика Бг Туймэзинский р-н, д Я промысловыйi
706411 Минтоп зн* 706411 МИНТОПЗН'
1171044J 11870250 11710200 11710200
Тюменская OEJ г Уран (330 км северн* нефтепровод Республика Ко Усинский район, 130 кк, нефтепровод
706411 Минтопэни 102211 Корпорац1
Тюменская OBJ Еатинское месторожде нефтепровод Тюменская об/ Нижневартовский р-он нефтепровод д Тюменская O6J Нижневартовский paiioi напорный нефп
706411 МиНТОПЭН! 706411 Минтолэн*
11710300 11670250 11710250 11710250
Тюменская O6J г Нягань (525 км сев г нефтепровод Республика Ко Усинский район, 100 ки< нефтепровод
1175DJ3J 11250540
Тюменская об; 15 км сев г Нижневар нефтепровод Тюменская O6J г Нижневартовск нефтепровод Кемеровская о 3 км севернее г Анжер< нефтепровод (
Mil
363100 АО " Р о с т 706411 Минтопэн* 706411 Минтопэж 700411 Минтопэн( 40 акционерн О
^
^ J of 21
Рис. 9.22
мы
Ш Microsoft Access File Edi-
• •E
ndow
Help
gl.
- Ёг
в -a • L-j.
? QaeryS: Select Q u e r y
Inlx-
UECT Filel [EiutiHC], Filel [Наименование ЧС], Filel.[Дата ЧС], File 1.[Бремя ЧС], Filel.[Дата сообщения], Filel [Бремя |Р!ЬГ Н М Я ^ Fl ' el ^ К о л РеспУ^1ЛИКИ]» Filel .[Наименование республики], Filel .[Код области], Filel .[Код населенного пункта], =£! п ? 6 3 " 1 * о с ™ с т и], Filel.[Название района], Filel .[Нагванме объекта], Filel .[Код ведомства], Filel [Название ведомства], ^ -1 Пострадало, Filel.Погибло, Filel.[Характеристика ЧЭС], Filel,[Материальный ущерб (колич)], Filel [Материальный ущерб Fl e \rr ' 1-Последствия, Filel.[Дополнительная информация], Filel.[Необходимая помощь], Filel.[Работа по ликеидаиии 'ROMN™"^' F ' l e l ' A6 ° hKHT < F l l e l • [ К о д абонента], Filel .Подписал, Filel .[Название города] **№№'el.[Характеристика ЧЭС]) Like "'нефтепровод*")) OP. (((Filel.[Характеристика ЧЭС]) Like "-бензопровод*")) OR m « S * T e p " C T * a 4 3 C D L l t e ""мазутопровод*")) OR (((Filel .[Характеристика ЧЭС]) Like "*продуктопроеод*")) I nuv™ERACCE5S OPTION;
Л Рис. 9.23
V ткосщ и упрощению критериев запроса иногда приводит к нежелательным "бедствиям. 3а
"Рось/ с параметрами
;,;ц ' ' Д л я получения какой-либо справки приходится неоднократно вводить Ые з н а \1ЙГП чения одного и того же параметра. Такая справка называется пара'"> со' Скои- Например, на практике сведения об авариях на нефтепроводах обычI ткутся по субъектам Федерации - краям и областям. Для подобных случаев
166
Программирование на языке SOl
полезно иметь готовый типовой запрос: вы вводите в стандартное поле нкрая или области, а в результате выполнения запроса получаете справку сг а""е ного вида. Такой запрос несложно построить. ' Рт" Откройте запрос, который был сохранен под именем Query4 (см piir q В столбец Название области вместо значения Тюменская область поместит сказку [Введите область] (см. рис. 9.24). Если теперь вы отдадите команд * выполнение запроса (с помощью кнопки j j пли предварительно сохрани '' в окне базы данных), то Access 2000 потреоует сначала указать название обла или края в диалоговом окне Enter Parameter Value (Введите значение папак ра). Этот этап работы продемонстрирован на рис. 9.25. Вам следует ввести пол! географическое наименование, а затем щелкнуть по кнопке ОК. Запрос будет вп полнен для заданного региона. Например, вы вводите значение Тюменская об ласть и получаете таблицу, которую уже видели на рис. 9.19. Понятно, что точно так же можно задать любой другой критерий. Как видите, типовой запрос опера тивен и удобен в использовании. Ы Microsoft Access j l File
Edit
view
Insert
'|C- H
nuety
Toul=. W» ulu '
-
Help
gi .
•
AH
- й'
© - Й - \1),
: Select Query Filel ЕмдыЧС — Нэименог?ани< Дата ЧС ЕрсмяЧС _-J
На-.Еание области
0
Название района
1На:-Еание объекта Ffcl
| К о д ЕЁДОПСТЕЗ Fill
0
И
ХарактеристикаЧ:
0 Like ""нефтепровод*"
[Введите область]
_L Ы Рис. 9.24
Enter Parameter Value Введите область
OK
Рис 9.25
Cancel
Материи
3
выборку
167
q ос Показана инструкция SQL для такого запроса. Вы можете вновь На Рпс- чго соответствующие изменения уже включены в предложение с клю л.бедить ' сд " чметром WHERE. В данном случае в этом предложении применяется логичевым пар «И», содержит в качестве операндов и "«нефтепровод»', и при к'ТЯ CX•ема ^ ' ^ ' которая ' ' -ю выше подсказку. Иными словами, Access воспринимает ее как значение веден^ критерияei 1
ши tM
ve
*
1гье,г 2'«У I"'I
Window Help
гз
.
тГс|1| ГЁНДС|Ч ] FilH [Наименование ЧС], Filel.[Дата ЧС], File 1 [Бремя ЧС], File] [Дата сообщения], Filet [бремя сообщения], Filel ~^~(\!*#у\1 Filcl [Наимен:ЕзНие республики], Filel.[Код области], File] [Код населенного пункта], Frlel [Название области], Filel [Назвг ре1 пу : 1 f-jgj [Кззеэнне объекта], Filel [Код ведомства], Filel [Название еедомства], Filel Пострадало, Filel Погибло, Filel [Характерист ^t-Tpiiel [Матерпэпьный ущерб (колич)], Filel (Материальный ущерб (натур)], Filel.Последстеия, Filel [Дополнительная информация], -if\ [необходимая помощь], Filel [Работа по ликвидации последствий], Filel Абонент, Filel [Код абонента], Filel .Подписал, Filel .{Наэвак-орода] WHERE (((Filel [Н^Еоние области])=[Бведнте область]) AND ((Filel [Характеристика ЧЭСр Like ""нефтепровод*"))! AITHCWNERACCES5 OPTION,
,1
_ _
I
А
Рис 9.26
Запросы с участием нескольких связанных таблиц Запросы э roii группы применяются, если пользователю необходима информация, которая содержится не в одной, а в нескольких таблицах. Для начала вернемся к уже рассмотренному примеру, когда вы создали запрос а выборку российских фирм из одной таблицы - Фирмы, а в качестве критерия ипользовали код России - 06" (см. рис. 9.12). Попробуем сформулировать этот *е запрос более естественным образом, задав условием отбора название страны Россия. Откройте окно конструктора запроса и введите туда две таблицы: Фирмы и Стра ны Как п раньше, вы используете таблицу Show Table (Показать таблицу), но Г| -'перь по очереди выбираете из нее две или более таблицы (см. рис. 9.3). Вы сноiM Указываете в таблице Фирмы поле Название фирмы, а в таблице Страны трана; однако в ячейке Criteria (Условие отбора) столбца Страна вводите рни Россия (см. рис. 9.27). Отправив запрос на выполнение, вы получите ЧУ, содержащую отобранные сведения (см. рис. 9.28). Она похожа на таблиV с 9.13, но вместо кода содержит название страны. - вы теперь откроете инструкцию SQL, то увидите в ней новый элемент, ко• ;з ; азьш ает на связь между таблицами Фирмы и Страны. Это ключевое слово ипе ' vm рация INNER JOIN доступна в любом предложении FROM и позволяет ,ть сам ,Я1 ое простое связывание - объединить записи двух таблиц, если их 1е П о л я ',Ъе содержат одинаковые значения. При этом INNER JOIN определяет '"' им' МЬ ' е та ^ ли ЦЫ, а другое ключевое слово ON - объединяемые поля, котоК)т одинаковые значения.
168
Программирование на языке SQL
Q Microsoft Access j File
Edit View
Insert
[Dt*@ |П - H
Query
Tool:
Window
.
Help
«L • oil • G? *g -a • C?j .' g i - ! ° n z AII - rj? \
© -a - СЭ .
i ? QueryS : Select Query Страны
Фирмы Кодфц*** Издание фир Код страны Адрес _^J
5 GUID s_Lmeage Код
-^J
ssT Яг5ЯИИ Примечания _ J
Ш
_tT Field: НЗЗЕ эмие фирмы Table: Фирмы 5ort: Show; Criteria; or:
-1
Страна Страны
— 0
и
•
"Россия"
D
•
•г
«i i
ы
if
Рис. 9.27
п|х|
1 В Microsoft Access File Edit View insert Format Records Tools ' ^Window Help
D
cs
В
м- s
a a v; §ЙУ
» °§-м~ Z-I1\ ъ ©V
es
ь-
ш
^^^
1
lis QueryS : Select Query Название фирмы pAO "Цвет" Нефть-Газ-Наука НПП "ЭКОНМКС" ЭКОХЕЛП ИНСТРУМЕНТС АО "ЭКРОС" Петербургский институт ядерной физики РАН ОКБ ТЕСТ фирмы "Аналитические приборы" ГЕОХИ РАН
* «1
1
|
Страна Россия Россия Россия Россия Россия Россия Россия Россия
1
л
Рис. 9.28
Теперь попробуем усложнить задачу и сформировать универсальный запрос Предположим, вы постоянно работаете с той частью объединенного банка данных, которая включает сведения о контрольно-измерительных приборах. Иначе гово ря, вы имеете дело с базой данных Контрольно-измерительные приборы. ВзМ
169
Запросы но выборку
IШ Microsoft Access ! File
Edit
View
Insert
Query
Tools
iИ • H
Window
Help
S -
!
•
-
1
is QueryS : Select Query 3.ELECT Фирмы.[Ha:-.E.dHhe фирмы]. Страны.Страна FROM Страны INNER JOIN Фирмы ON Страны.Код = Фирмы.[Код страны]" WHERE (((Страны.Страна)="Россия")) WITH OWNERACCE5S OPTION;
Рис. 9.29
приходится создавать запросы, очень разнообразные по своему построению. Од нако вам некогда вникать в структуру таблиц и связей между ними, а также раз бираться в том, какие таблицы нужны для подготовки ответа на какой-либо запрос. Необходимо более простое решение. Конечно, можно построить запрос с параметрами, но есть и другой путь. Он не противоречит первому варианту, d скорее дополняет его. Введите в окно конструктора все таблицы базы данных Контрольно-измери тельные приборы со всеми их связями (см. рис. 1.11). (Позднее дело дойдет и до других БД в составе объединенного банка данных.) Ничего не изменяя в ее струк туре, будем в бланке запроса формировать запросы различных типов. Допустим, вы хотите узнать, какие приборы используются для измерения тех или иных физических параметров. На рис. 9.30 показан бланк соответствующего запроса. Б этом же окне конструктора вы видите макеты всех таблиц, содержащих ся в нашей базе данных. (Отметим, что не все таблицы будут привлекаться в конкретных запросах.) На рис. 9.31 выведена результирующая выборка записей, полученная в ответ на ваш запрос. Предположим, теперь пользователь интересуется другой проблемой: каки ми приборами для измерения кислотности занимается менеджер по фамилии Флеминг. На рис. 9.32 показан заполненный бланк соответствующего запроса. Вы видите, что здесь в разных столбцах введено два условия отбора: "*кислотн«" и Флеминг". В то же время перечень таблиц и схема связей между ними остаются неизменными. Результат выполнения этого запроса приведен на рис. 9.33. Ото браны сведения лишь о тех приборах для измерения кислотности, которыми веДает менеджер Флеминг.
Пояснения к инструкции SQL Теперь более подробно исследуем инструкцию SQL, приведенную на рис. 9.34. Мы "есколько раз усложняли структуру запроса, поэтому и инструкция нуждается b определенном комментарии.
170
Программирование на языке SQL
Ы Microsoft Access File
Edit
View
Insert
Quel у
Tool;
Window
Help
w All
„ й" \
© ^
i? Queryfi : Select Query Назначение
Приборы, .
Ф1фМЫ
£._Gerieration _ l l •-_GUID •.Jjneagi Код Назначение _^J
Номер моделг-lJ Категория Примечание! — ' Примечание2 Год по KaiancjJ
Кодфц»ы
J
Типы при... 5 GUID sjjneoge Код т т а Тип Примечания
Field. Table Suit Show Cntena or:
Название фис Код страны Адрес Адрес 2 _J
J
Менеджер *. * Номер Кид фирмы Ф НИИЛИЯ
Имя
—I d
Страны
4
йеп_Примеча! 5_Generation 5_GUID s_Lineage _^J
1 £
Назначение Назначение
_d
Тип Типы приборов
0
Номер модели Приборы, предстае
0
0
•
•
. I I
Рис 930
В предложении с ключевым словом SELECT содержится перечень используемых в запросе таблиц и их полей, как уже говорилось, группы (Имя таблицы Имя поля) разделяются между собой запятыми, а внутри группы имя таблицы отделяется от имени поля точкой. Если в имени есть пробел, оно заключается в квадратные скоб ки. Параметр SELECT имеет следующий синтаксис: SELECT [предикат] { * | таблица [AS псевдоним_1] [, FROM выражение [, [WHERE
[ORDER BY
« | [таблица
]поле_1
]поле_2 [AS псевдоним_2] [,
]]}
] [ I N внешняя База Данных]
]
[GROUP BY
[HAVING
[таблица
]
] ]
[WITH OWNERACCESS OPTION]
Ниже перечислены аргументы ключевого слова SELECT: • предикат. Задается один из следующих предикатов отбора: -
ALL;
- DISTINCT;
171
Запросы но выборку
ЖШ
В Microsoft Access File Edit \Vvv Ii-ce/t Fur mat R^co/di l o o k Window H?lp
D C& В & Ei ЧУ
О-П '
;,
51JJ
-41 - О .
a
аБЕЗШЕНЕЯЗЯ
Назначение
Гт
Тип
Номер мода пи Odyssey High Performance 1С Sys Odyssey Basic 1С System SRI Gas Chromalograph 8610C YSI 30 SCT Meier YSI 9000 YSI 9100 YSI 3000 T-L С Meier YSI 80 Turbidity Meter YSI 85 DO ^Conductivity Meter YSI 55 Grant/ YSI 3800 YSI 6000 YSI 50B YSI 52 YSI 800 YSI 3560 YSI Логгерная с ма контроля YSI Логгерная с ма контроля
ирогптиграф HU н-.-иение н* у, а'лни хроматограф Н-значение не указано хроматограф Н-лначение не указано 11 морение солености проводимости и температуры воды Многпорам Измер Фотометр H-i значение не указано И пррение содержания хлоридов аммония, нитратов, Hmpt Фотометр Многпорам Измер (1 морение параметров грунтовых вод Изм Мутности И пррение мутности м температуры Одновременное изменение растворенного кислорода соле»- Многпорам Измер Изм Раствор 02 И мерение содержания кислорода И мерение растворенного кислорода, температуры провоД1 Многпорам Измер Д пговременный мониторинг растеоренного кислорода пров Многпорам Измер Изм Раствор 02 11 мерение растворенного кислорода Изм Рэстеор 02 (I мерение растеоренного кислорода П..мерение температуры проводимости, кислотности и раст! Многпорам Измер 11 мервние проводимости, кислотности и ионов 7 е почренж Многпорам Измер И.мерение кислотности, проводимости, редокс потенциала Многпорам Измер Измерение кислотности проводимости редокс потенциала. Многпорам Измер Флюориметр Назначение не указано Record
м | . 1 ["'"^
•1*МИо17е
J
iL
Рис 931
ШЕ\
Ш Microsoft Access File
w Insert Quer
Edit
Icr
ЬИр
• c# В гЭ-
•Ц.^,.Ш.Н.!ЛЯ!ЯЯ Назначение
Приборы,
Фирмы
.^Generation
Hi Мир МОДсЛк.^! тегория Примечание 1 —* Примечание! Гол по к а г а т • ]
Кодф»фМ4 - l l Название фиг; 1 Кпд страны ндрес —' Адрес 2 zl
.Jjneage Код Назначение
J Ч
Типы щи I.
.
Менеджер 4-
л
ма 1
Номер Код фирмы IЗМИЛИЯ
Ииа
—1 zi
Страны
А
,_GU1D ••^Lineagp
Код типа Тип Примечания
"Ьеп_Примеча1 s_Generahon __ 5 Jjneage
_^J
А
ш FHd 7аЫе
На>начемир_ Назначение
Типы пр'иаорсв
Нон^с мод Tin ПрИГиры, Пр-гДСТЗЕ
Менеджер
Lite "кислотн* «I
.п
I
Рис 9 32
172
Программирование на языке SQL - DISTINCTROW; - ТОР.
• • • • а
Предикаты ограничивают число нозвращаемых записей. Если предикат не указан, по умолчанию используется ALL. Это означает, что выбраны все ноля заданной таблицы или таблиц; таблица. Указывается имя таблицы, из которой надо отобрать записи; поле_1, поле_2. Указываются имена полей, откуда следует отбирать данные. Све дения будут извлекаться из полей в том порядке, в каком они перечислены; псевдоним_1, псевдоним^. Задаются имена, которые станут заголовками столб цов вместо названий, заданных по умолчанию; выражение. Здесь указываются имена одной пли нескольких таблиц, содержа щих необходимые данные; внешняя База Данных. Вводится имя тон базы данных, где расположены табли цы, которые указаны с помощью аргумента выражение, но находятся за преде лами текущей БД.
При выполнении операции SELECT Access 2000 находит указанную таблицу пли таблицы, извлекает из нее (из них) необходимые столбцы, выделяет строки, кото рые отвечают условию отбора, а затем сортирует или группирует результирую щие строки в заданном порядке. (Отметим, что инструкции SELECT не изменяют ни самих данных, ни их расположения в БД.) l-ln|x|
Ы Microsoft Access File Edit View Ipsei t Forrridt Records
'^/mdow Help V,
ПU
n
a •
M
Ъ
о.
luerjo: Select Query Назначение [^онитиринг кислотности, прсеоднммсти, р Многпирям Измерение кислотности, проводимости, р; Многпорзм Измерение кислотности, проводимости, рг Иногпо|им Измерение кислотности, проводимости, ре Многппрям
_L
Номер модели 11.мер Из мёр Измер И"-м^[
1-laM I Фамилия
YSI 1-ИГТРМ.Э мониторинга
Флеминг
Анализатор роды Измеритрпьная система YGI Логгерн.^я с ма контропя
Флеминг Флеминг Флеминг
' 1 " 1 » 1 of 4
Рис 9.33
пшш
Ы Microsoft Access File Edit View Insert Query Tools Windovv Help
D &
an - Й" ° S S - L?J . С
-<Э - 3 •
10
Г№1
is" Оаегуб : Select Queer
•ELECT Назначение Назначение, [Типы приборов] Тип, (Приооры, представ пенные на рыике2] (Номер модели], Менеджер Фамилия FROM (Страны INNER JOIN (Фирмы INNER JOIN Менеджер ON Фирмы [Код фирмы] = Менеджер [Код фирмы]) ON Страны Код = Фирмы [Код страны]) INNER JOIN ((Типы приборов] INNER JOIN (Назначение INNER JOIN [Приборы, представленные на рынке2] ON Назначение Код = [Приборы, представ ленные на рынке2] [Код назначений]) ON (Типы приборов] [Код типа] = [Приборы, представленные на рынке2] [Код типа]) ON Фирмы [Код фирмы] = [Приборы, представленные на рынке2] [Код Фирмы] WHERE (((Назначение Назначение) Like "*кислотн*") AND ((Менеджер Фамилия )="Флеминг")) WITH OWNER ACCESS OPTION,
Рис 9.34
d
Создание объединенной выборки
173
Обычно слово SELECT является первым словом инструкции SQL, поскольку большая часть этих инструкций SQL относится к типу SELECT или SELECT. INTO. Минимальный синтаксис инструкции SELECT таков: SELECT поля FROM таблица
Чтобы были отобраны все поля таблицы, добавьте символ звездочки («). Если несколько таблиц, включенных в предложение FROM, содержат одноимен ные поля, то перед именем каждого из таких полей следует ввести имя таблицы и оператор «точка» ( ). Предложение с ключевым словом FROM описывает связи между таблицами. По мере усложнения этих связей все более важную роль играет конструкция INNER JOIN ON, которая имеет следующий синтаксис: FROM таблица_1 INNER JOIN таблица_2 ON таблица_1 лоле_1 оператор таблица_2.поле_2
Ниже перечислены аргументы операции INNER JOIN: Q таблица_1, таблица_2. Здесь указываются имена таблиц, записи которых нуж но объединить; Q поле J , поле_2. Задаются названия объединяемых полей. Если они не явля ются числовыми, то должны быть однотипными и содержать однотипные данные. В то же время объединяемые поля могут иметь разные имена; Q оператор. Выбирается любой оператор сравнения (символы, входящие в каж дый оператор, заключены в прямые кавычки): - ' <,"; - '>, ' ; - ' < = , '; - >=,"; -
' О".
Параметр WHERE содержит условия отбора - критерии, вводимые в запрос, - и име ет следующий синтаксис: WHERE условие отбора
Создание объединенной выборки В предыдущих разделах мы рассмотрели большую группу запросов на выборку, в том числе запросы с использованием нескольких таблиц, объединенных связя ми. Однако в системе Access 2000 предусмотрены и запросы других типов: • запрос на создание таблицы; • запрос на добавление записей в таблицу; О запрос на удаление записей из таблицы; • запрос на обновление записей в таблице; • перекрестный запрос. Запросы всех названных типов могут не только использоваться по прямому назначению, но и быть частью более сложных, комплексных запросов. Предположим,
174
Программирование на языке SQL
вам необходимо получить выборку записей из таблиц, не объединенных связями. Мы подробно рассмотрим пример такого запроса, а заодно и работу с запросами перечисленных типов.
Пример сложного запроса Как вы помните, в объединенном банке данных содержатся три базы данных. Все эти БД имеют различное происхождение. Две из них (БД ЧЭС и Контроль ЧС) непосредственно связаны с оперативной информацией о всевозможных чрезвы чайных ситуациях (ЧС). Следовательно, вполне естественна такая постановка задачи: получить из этих двух баз данных единую выборку сведений о ЧС опреде ленного типа (скажем, происшедших в конкретном регионе). В том, что таблицы этих БД не соединены связями, нет никакого скрытого под воха. Конечно, разное происхождение баз данных наложило отпечаток на их структуру: записи из различных БД построены неодинаково, отличаются по со ставу и формату полей. Все это осложняет работу пользователя В принципе мно гие таблицы из разных БД достаточно легко объединить с помощью связей. Од нако в каждой базе данных есть свои словари, на которых должны основываться важнейшие таблицы (об этом шла речь в главе 3 настоящей книги), поэтому коды одних и тех же понятий могут не совпадать. Информация в базах данных может дублироваться (дата возникновения ЧС, регион и т.д.). Таким образом, связи меж ду обеими БД не реализованы отнюдь не по принципиальным, а скорее по мето дическим причинам. Но интеграция возможна и в этих условиях. Мы хотели по казать читателю, что система Access 2000 позволяет преодолевать серьезные трудности, даже если иногда они создаются несколько искусственно. Итак, приступим к решению поставленной задачи. Оно включает по крайней мере два этапа: 1. Создать таблицу, в которую будет помещена выборка сведений из одной базы данных, полученная в соответствии с заданными критериями. Иными словами, необходимо сформировать запрос на создание таблицы. 2. Добавить в построенную таблицу записи из другой базы данных, удовлетво ряющие тем же самым критериям. Это значит, что надо сформировать запрос на добавление записей в таблицу.
Запрос на создание таблицы В конечном счете полученная выборка должна содержать поля из таблиц Filel и E S O P E R . Поэтому сначала сформируйте новый запрос на выборку (Select Query) Он должен указывать те поля, которые вы хотите скопировать в создавае мую таблицу. Как и в предыдущих разделах книги, запрос будет построен с помо щью конструктора. Все операции, связанные с созданием запроса, вам уже знакомы. Итак, введите в него все поля таблицы Filel, а также условия отбора: в поле Назва ние области - критерий Название области, в поле Характеристика ЧЭС - крите рий Нефтепровод* (см. рис. 9.35). Теперь с помощью кнопки j l проверьте, правиль но ли производится отбор (см. рис. 9.36). Убедившись в этом, можете формировать запрос на создание таблицы. Щелкните по стрелке прокрутки справа от кнопки
175
Создание объединенной выборки
PHTi
Ы Microsoft Access Fil^
^cJit '^
Imert
Query
TLUI
'^WHJV"
HPlp.
is1 Query": Select Query
1
FUel ЕмдыЧ'
1
НэИменОЕЭНИ
ДатаЧ Ef-мя И-
j j
^ Field Table Surf Show nteria or
Нсг.е^ние r f п э г т н Ffcl
*арэгтер| Tin <,Ч~-"С FiH
I
0
0 Тюменгкая о&пагть
<j
Lil^
ЕгемяЧС FH
Дата «общения Filel
0
бр^мя г плющения P.lel
0
0
Код per nvGOHFM File,
—
0
"нефтепровод*
•Г
i
Рис 9 35 I B Microsoft Access
•
File Edit View Insert Fci roar PeL и d
• i^ у # & v-
©
id - н # Ei vc Виды ЧС •
| Наименование
1010Э 10109 10109 10109 10109 10109 10202
Авария на м^п А&ария на wan Авария на мап Порыв нефтепр Авария на мап Авария на мзп Порыв и поч'т[:
IBHBHJnM
hjp|p
Ь - ^ П 51
ca
1U1IJJ ^ЕНрИЯ на М'аП
T O L !Ь \Ajndnyv
v
;^
eg Л1 - О M •*«
B^-
0 .
Дата ЧЭС | Название оСл| Характеристика ЧЭС j Время ЧЭС [ Чэта сообщвния| В U4/T6/19'J5 Ткменская об г В 55 км севернее г Ур< 0-1.13Г/1У95 шш 04/20/1995 Тюменская O6J UJ за ветхости произои. 04/25/1995 00 00 04/25/1995 Тюменская O6J Неустановленный тракт 04/26/1995 00 00 04/29/1995 04/25/1995 Тюменская O6J В Нижневартовском pai 10 30 06/25/1995 Тюменская O6J ВО время экскаваторно 00 17 07/17/1995 Тюменская O6J На комплексном сборне 07/17/1995 03 15 12/14/1995 Тюменская об; Произошел порыв напо 12/16/1995 04 30 12/30/1899 J 02/11/1995 Тюменская ofj Из за коррозии металла
* Re ,o,d
н| 41
1
• | и | . . | о.
a
-I
I
I
'I
-ч
As
Рис 9 36
g] -J - Query Type (Тип запроса) на панели инструментов (см. окно, показанное на рис. 9.35) Активизируйте режим Make Table Query (Запрос на создание табли цы). Можно выбрать ту же опцию, открыв меню Query (Запрос) на панели ин струментов (см. рис. 9.35). После этого Access 2000 попросит вас назвать таблицу. Назовите ее просто Выборка1 (см. рис. 9 37). Запрос на выборку будет автомати чески преобразован в запрос на создание таблицы, как показано на рис. 9 38. Если теперь вы отдадите команду выполнить этот запрос, то во вкладке Tables (Табли цы) окна базы данных появится таблица Выборка1. Ее содержание полностью со ответствует тому, что вы видели на рис. 9 36 Остается осуществить вторую часть задачи: сформировать и выполнить запрос на добавление записей в таблицу.
176
Программирование на языке SQL
ш
Make Table Make New Table Table Name
OK
~3
рЯЗВЁЁП
Cancel
<• Current Database С Another Database
Рис 9 37 ГТПТЙ]
SJ Microsoft Access ] Eile Edit View Insert Query Tools Window Help
П.-[М1^'Г4
• !°г
i? Query7 : Make Table Query
BSD
1
Filel
*
Виды ЧС Наименовани< Дата ЧС Время ЧС
4
J
^ Field „Table Sort Show Criteria or
Дата ЧС Filel
Название области Filel
0 •1
Характеристика Ч File!
И
0
Тюненская область
Lite *нефтепроеод*
Время ЧС Flel
дата сообщения Filel
13
0
Время сообщения — Filel —
0
.г
1
j j
Рис 9 3S
Запрос на добавление записей в таблицу Такой запрос позволит добавить в уже имеющуюся таблицу новые записи из дру гой таблицы Существенно, что таблицы могут быть как похожими, так и различ ными по структуре, они могут иметь неодинаковое количество полей с разными именами Итак, чтобы включить новые данные в таблицу, надо сначала создать и выполнить обычный запрос на выборку, а затем указать, в какие именно поля какой таблицы следует поместить поля с новыми записями Создайте запрос на выборку из ES_OPER и укажите в нем условия отбора за писей По структуре эта таблица отличается от таблицы Filel В частности, основная текстовая информация таблицы E S O P E R содержится в поле Текст сообщения Поэтому условия отбора данных в запросе, который вы создаете, будут отличаться от критериев, введенных для таблицы Filel Посколь ку необходимо отфильтровать записи об авариях на нефтепроводах Тюменской области, в запросе на выборку введите в поле Текст сообщения следующее выра жение «Тюменск* AND нефтепровод* (неизменяемые части слов - с учетом того, что
177
Создание объединенной выборки
говорилось выше о возможности употребления слова в разных падежах) Сфор мированный запрос показан на рис 9 39 Теперь задайте тип запроса (Query Type) Пусть это будет Append Query (За прос на добавление) На экране вновь появится окно Append (Добавить) В нем следует выбрать опцию Table Name (Присвоить имя таблице) Так как вы уже вводили ее имя на предыдущем этапе, просто щелкните по стрелке прокрутки и в открывшемся списке укажите позицию Выборка1 Затем активизируйте оп цию Append To (Добавить записи) ГЛпГ*1
Q Microsoft Access j File Edit View Insert Query Tools Window Help
| O ^ Q 6 . 1 , ' X lb В •$ |&. v ! * lb © ¥ i *"> r5 -1 ! | °n z A" с? ч © i n -
о.
i? QueryS: Select Query
пша
1
ES_OPER Дата ЧС Код насепепи Код вида ЧС Масштаб ЧС _ J
^ Field Table Sort Show Criteria
Tefcr сообщения
Дата обноеяения и ES OPER
Признак коктрдгтя
населенный пункт—
Like Тюменск* And Like ""нефтепровод*
-d ^ Рис 9 39
Щелкните по кнопке ОК, и на экране возникнет окно Append Query (Запрос на добавление) Перед тем как отдать команду на его выполнение, обязательно укажите, в какое поле таблицы-получателя Выборка1 надо поместить данные из соответствующего столбца таблицы ES_OPER Как вы помните, эти две таблицы различны по структуре, а также по набору и формату полей Поэтому соответствие обоих полей определяет пользователь согласно табл 9 1 11
Append -Append To
OK
Table Name
Cancel
F Current Da С Another D. F >e fj.j'ne
Менеджер Назначение
Рис 9 40
i*i ]
178
П р о г р а м м и р о в а н и е на языке SQL
Таблица
9 1 Соответствие попей при добавлении
записей
Поля таблицы ES OPER
Поля таблицы Выборка!
Дата ЧС
Дата ЧС
Код населенного пункта
Код населенного пункта
Код вида ЧС
Виды ЧС
Текст сообщения
Характеристика ЧС
Дата обновления информации
Дата сообщения
Населенный пункт
Название города
Пострадало всего
Пострадало
В том числе погибло
Погибло
Материальный ущерб
Материальный ущерб
Абонент
Абонент
Введите имена полей из столбца Выборка1 в поля Append To тех столбцов, име на которых указаны в таблице ES_OPER (эту операцию, к сожалению, придется выполнить вручную). Готовый запрос на добавление вы видите на рис. 9.41. Те перь осталось только щелкнуть по кнопке j l . В результате запрос выполнится, и на экране появится таблица Выборка1. На данном этапе согласно условиям от бора в таблицу включено 8 записей из таблицы Filel. На втором шаге, в соответ ствии с теми же критериями, добавляется еще 9 записей из таблицы ES_OPER (см рис. 9.42). Название итоговой таблицы Выборка1 автоматически заносится во вкладку Table окна базы данных. Обратите внимание, что в тех потях, которые не приведены в табл. 9.1, информация отсутствует. Итак, вы убедились, что Access 2000 позволяет объединять сведения из таблиц с разной структурой записей. Это очень важно в практической работе. • -|П|Х|
1Q Microsoft Access 1
File
£dlt
•
t£ У
•
• H
^-<
[i P t Query
I I I'
LindjW
HPlp
-о *, - an • й> =g -£ . d j . -'• *\ -
I
°n T
.
AH
a'
в -а - щ.
1
1. | п | х
His Query8 : Append Query
d
ES_OPER Дата ЧС Код населенн Кол ьида ЧС Масштаб ЧС _^J
^
LdJ field Table Sort Append To Criteria or
Р.зненс д>=теи Еэ OPER
Е том чигле погибп ES OPER Погибло
Погибло детей Е5 OPER
Материопьный уще Е5 OPER
Потери Е5 OPER
Причина Ч'ES OFER
— —
Матери эпьный ущ<
•J
1
Рис 9 4}
•Г
^1
179
Запрос на удаление записей
• Jnlxl
Э Microsoft Access £le Edit View \\wrt
Format Re
& и a a v-' ^- и a a У D
йГСИ
-j * ' и '
Выборка! : Table Виды ЧС | Наименование • (l0109 Авария KJ нэп 10109 Авария нэ мап 10109 Авария на мап 10109 Авария на мап 10109 Порыв нефтепр 10109 Авария на мап 10109 Авария на мап 10202 Порыв и пожар 10301 10301 10301 10301 10301 10301 10301 — 10301 10301
Tcml
•
W H «luvV
H." Ip
Ь - ол- £1 л!
v
' eg -S - Oil. ; "й A »«»/ © - 4 1 - 0
•
Дата ЧС |Назваиме обл|Хэрактеристи{ 04/06/1^95 Тюменская of]; В 55 км ceeeph 04/20/1995 Тюменская об; Из за ветхости 04/25/1995 Тюменская O6J Неустановлени 04/25/1995 Тюменская D6J В НижневэртоЕ 06/25/1995 Тюменская O6J Во время экск 07/17/1995 Тюменская O6J На комплексно 12/14/1995 Тюменская O6J Произошел по| 02/11/1995 Тюменская O6J Из за коррозии 03/07/1997 04/27/1998 Тюменскз 11/17/1997 Тюмени 01/31/1997 01/19/1999 Тюменская. 05/24/1997 Тюме> 07/30/1998 Тюменская 07/25/1997 Тюменская о 07/27/1997 D Тю«,
-И*|
^J
Время ЧС | Дата Сбобщви| Время соо< 00 00 00 04/07/1995 00 00 00 00 00 04Л5/19Э5 00 00 00 00 00 04/26/1995 оооо 10 30 00 04/29/1995 00 00 00 17 00 01/09ЛЕ 03 15 00 07/17/1995 04 30 00 12/16/1995 01/1 ЗЛЕ 00 00 00 00 00 03/07/1997 05/05/1998 11/21/1997 09/29/1997 01/29/1999 05/24/1997 08/04/1998 07/25/1997 10/20/1997
* R* ccid
t'\
I]
1
• I n 1>»l о М 7
.|
|
Jj
•1
Рис 9 42
Запрос на удаление записей Базы данных не только используются по прямому назначению; часто возникает необходимость произвести в них некоторые вспомогательные, служебные опера ции. Например, время от времени базу данных надо чистить: там обнаруживают ся дублирующиеся записи, устаревшая, бесполезная информация и т.д. В принципе можно удалить запись из БД и без помощи запроса, а непосред ственно из формы, как описывалось в главе 4. Кроме того, можно просто открыть таблицу и удалить выбранную запись Однако суть проблемы именно в этом сло ве - «выбранная». Когда число записей в таблице растет и их счет идет на тысячи, определение «жертвы» превращается в сложное и трудоемкое мероприятие. Ис пользование запроса на выборку помогает решить такую задачу. В окне конструктора создайте обычный запрос (см. рис. 9.4). Затем с помощью уже хорошо известной вам кнопки rg] ~| откройте меню Query Type (Тип запроса) и активизируйте в нем опцию Delete Query (Запрос на удаление). Теперь надо ввести в запрос критерии отбора записей для последующего удаления. Здесь тре буется уточнить, какие именно записи должны быть уничтожены. Так как речь идет о базе данных но ЧС, то в ней не предусмотрено накопление и хранение информации о дорожно-транспортных происшествиях - подобные сведения должны содержаться в другом банке данных. Однако по разным причи нам в нашу базу данных (в частности, в таблицу ES_OPER) такая информация иногда попадает. Пользы от этого все равно нет, потому что случайные разрознен ные записи не дают полной картины по дорожно-транспортным происшествиям.
180
Программирование на языке SQL
Естественно, такие сведения следует удалять. В бланке запроса в ячейке Criteria (Условия отбора) для поля Код вида ЧС введите код данного типа происше ствии - "10101", как показано на рис. 9.43.
nm
Ш Microsoft Access File Edit Vievv Insert Quei у l o o h
Window Help
1
• c£ У
"i Ь - ю - й ^
О - У
•n
M
Й"„> s a - о , ^ШШШШШШШ-\Ф\P
X!
is1 Queryl2 : Delete Query
d
ES_OPER Дата ЧС г од насепенн код еида ЧС 1ЬоитабЧС . J
^
AA Field Table DeWe. Critena: or
Дата ЧС E' OPER where
Код наг*- пенного п Е: OPEF where
Масштаб ЧС Е5 OPER Where
•'одеидэЧС Е5 OPER Where
М е т сообщения ES.OfER Where
Дата обн— E5 OPEP — Where
"10101"
•Г
^
ы Рис. 9.43
С помощью кнопки !J задайте команду на выполнение запроса. На экране по явится сообщение о том, что удалению подлежит 421 запись (см. рис. 9.44). Затем Access 2000 предупредит: Once you click Yes, you can't use the Undo command to reverse the changes (Если вы ответите «Да», то не сможете вернуться назад и от менить проведенные изменения). Кроме того, система попросит у вас подтверж дения: Are you sure you want to delete the selected records? (Вы уверены, что хо тите удалить отобранные записи?). Надеемся, что вы исполнены самых серьезных намерений и решительно ответите Yes, приведя приговор в исполнение. Таким образом, вы реализуете запрос на удаление, стерев 421 запись, или 6,6% от общего числа записей в таблице E S O P E R (6348). [Microsoft Access You are about to delete 421 row(s) from the specified table. Once you click Yes, you can't use the Undo command to reverse the changes. Are you sure you want to delete the selected records' "
Yes
1
Рис
No
9.44
I
181
Удаление дублирующихся зописей
ШШШ^^Ш?\х\
1 New Query
1:;::::'-,ПЭ\
L_—„_jr — " This wizard creates a query that finds records with duplicate field values in a single table or query,
Design View Simple Query Wizard Crosstab Query Wizard Find Unmatched Query Wizard
OK
Cancel
Рис. 9 45
Удаление дублирующихся записей При ведении банка данных довольно часто приходится удалять повторяющиеся записи. Есть два традиционных пути решения этой задачи: • не допускать дублирования записей непосредственно при вводе информа ции в базу данных; • находить и устранять повторяющиеся записи из уже сформированной БД. Напомним, что вы работаем с объединенным информационным банком, в ко тором собраны разнородные базы данных. Поэтому неудивительно, что для раз ных БД эта задача решается неодинаковыми средствами. В последующих главах мы покажем, как предотвратить дублирование сведений при вводе информации в базу данных, используя средства языка Visual Basic. А сейчас речь пойдет о том, как удалять повторяющиеся записи с помощью стандартных запросов. Когда информация вводится в оперативном режиме из различных источников, в базу данных тоже могут попасть сведения, дублирующие друг друга. Прежде чем удалить такие записи, их надо найти. Следовательно, решение проблемы включа ет два этапа - поиск повторяющихся записей и их удаление.
Запрос на поиск повторяющихся записей Начнем с таблицы ES_OPER. В окне базы данных откройте вкладку Queries (Запросы) и щелкните по кнопке illttew|. Затем в окне New Query (Новый запрос) выберите позицию Find Duplicates Query Wizard (Мастер запросов на поиск по вторяющихся записей). Как видите, создаваемый запрос отличается от тех, что рассматривались ранее, тем, что он строится с помощью мастера запросов. Послед ний содержит три шага, каждый из которых описывается своим окном. В первом окне (рис. 9.46) мастер спрашивает: Which table or query do you want to search for duplicate field values? (В какой таблице или запросе вы хо тите искать повторяющиеся поля?). Выберите таблицу ES_OPER и продол жите работу.
182
Программировониена языке SQL Find Duplicates Query Wizard Vhich table or query do you i*<arit to feah.fi for duplicate fiel" values' 1
>.\л хлк m
|
3
W, XXX V.-AY. I
2
у/ли xxx xxx
4
мл xxx xxx р
1 |
For example, to find cities with mote than one customer you wuuld choose a Customer table below
^
2
xxx xxx ^
2
х:.х х г
X
J
CLAS5T CLPEb Filcl fT'rN REGION REGION D TIPCHS
J Jll
View (• Tables
<~ Queries
<" Belt.
Cancel
Next >
Рис 9 46
В следующем окне (см рис. 9.47) вы должны ответить на ВОПРОС: Which fields might contain duplicate information? (Какие поля могут содержать повторяющую ся информацию?) - и указать эти поля. Будем считать, что записидублнруют друг друга, если в них совпадает содержимое трех полей: Дата ЧС, Код населенного пункта,-Код вида ЧС. Иначе говоря, мы исходим из того, что в од-ш и тот же день Find Duplicates Query Wizard Which fields might contain duplicate information 7 For example, if you are looking for cities with more than one customer, you would choose City and Region fields here Available fields:
Duplicate-value fields
Дата обновления информации. Признак контроля Населенный пункт Серийный номер записи Широта Долгота Объект (место) j j
Cancel
Рис 9 47
Дата ЧС Код населенного пут та
Next >
Finish
183
Удаление дублирующихся записей
в данном населенном пункте не могут произойти две или более однотипные аварии. (Конечно, было бы проще постави гь условием совпадение всех полей. Однако даже для записей аналогичного содержания это слишком маловероятно: сообщения об одном и том же событии могут передаваться разными людьми и основываться па разных источниках информации. Отсюда неизбежность расхождений и просто оши бок.) Вы уже знаете, как открыть перечисленные поля в окне мастера запросов, по этому здесь представлен лишь конечный результат (см. рис. 9.47). После этого мастер откроет следующее окно (см. рис. 9.48) и выведет на экран вопрос: Do you want the Query to show fields in addition to those with duplicates values? (Хотите ли вы включить в запрос какие-либо поля в дополнение к тем, которые дублируются?). Рекомендуем добавить поле Номер, где указывается но мер записи (чуть позже будет объяснено, зачем). В следующем окне мастер пред лагает вам назвать новый запрос. Find Duplicates Query Wizard Do you want the query to show helds in addition to those with duplicate values? 1
xxx хм xxx
2
m>. XJX xx>.
3
XI-.X XI-.X XXX
2
xxx хьх ххь
4 x v x"' XT
For example, if ynu chose to look hot duplicate Cit/ values, you could choose CustomerfJame and Addiess heie A mailable fields
Additional query fields
Дэта обнпБп^ния инфор Признак контропя Населенный п^нкт Серийный номер иапис Широта Долгота
d
Объект |'МРГТГ|'|
3ftvwMf.tr-
* mm Cancel
<Въг_к
Next >
Finish
Рис 9 48
Пока советуем принять имя Find duplicates for ES_OPER (Поиск дублирую щихся записей в таблице E S O P E R ) . Запустив этот запрос на выполнение, вы получите выборку в виде таблицы (см. рис. 9.49). Здесь аккумулированы записи, в которых повторяются поля Дата ЧС, Код населенного пункта и Код вида ЧС, определенные выше в качестве критери ев отбора. Как видите, таких записей всего 307, или 5,0% от их общего числа вполне правдоподобная оценка.
Удаление повторяющихся записей Если следовать формальной логике, при удалении записей нужно использовать запрос на удаление. Можно так и сделать, но это не идеальное решение. Попробу ем разобраться.
Программирование на языке SQL
184
i ^ H - b M
1 Ш Microsoft Access
[ File Edit View Insert Format F ernrd; Tools w»" dow Help
|Ой@#ЙС' >M.- H i i E i ?
* 4§> i X. 4n t
, b - iia- °ё-М~ *
1
1 l\
lis Find duplicates for ES_OPER: Select Query Дата ЧС | Код насаленн| Код вида ЧС | 110603 01/01/199711U50010 .i. 01/01/1997 11450010 10603 01Л37/1997 11450010 10206 01/07/1997 11450010 10206 01/03/1997 12710240 10206 01/03/1997 12710240 10206 01/08/1997 12710240 10206 02/05/1997 11450010 10206 02/05/1997 11450010 10206 02/19/1997 11450010 10701 02/19/1997 11450010 10701 03/05/1997 11450010 10701 03/05/1997 11450010 10701 Re cord:
к I • 11
i
> I и I»»
оГм7
.- ©
"
V
•i-|n|x| Номер |_i|
?ЩГ
53B4H 725! 847 841! 2715 s 2784 i 3802 2289. 2197 883 826' 2946 2836
zl
Рис. 9.49
Когда вы удаляете определенные записи с помощью соответствующего запро са, вы должны ввести какие-то условия отбора. Эти критерии могут быть основа ны либо на внешних признаках (нужно отобрать значение, которое равно, больше или меньше указанного числа или выражения), либо на определенном соотноше нии между полями одной записи (заданное соотношение должно соблюдаться во всех отфильтрованных записях). В условиях отбора не заложено сопоставление различных записей, а ведь именно это требуется при поиске дубликатов. Сформу лировать критерии отбора так, чтобы они позволяли отследить именно повторя ющиеся записи, не удается. Если же вы непременно хотите использовать для уничтожения дубликатов запрос на удаление, попробуйте следующий способ. За дайте в качестве условия удаления номер записи, который указывается в запросе, на поиск повторяющихся записей, как показано на рис. 9.49. (Вот почему поле Номер следует включить в итоговую таблицу повторяющихся записей!) Чтобы осуществить эту идею, в строке Criteria (Условия отбора) бланка запроса на уда ление введите выражение типа: N1 AND N ? AND N3 AND.
где: Q N] - номер первой записи, которую следует удалить; • N - номер второй записи, которую надо удалить; • N - номер третьей записи на удаление, и т.д.
Удаление дублирующихся записей
185
Номера этих записей приведены в результирующей таблице повторяющихся записей (см. рис. 9.49). Однако учтите: вам придется либо вручную переносить номера из таблицы в запрос (при большом числе записей занятие малоприятное), либо писать для данной цели специальный макрос. Однако можно воспользоваться и другим способом. Мы не утверждаем, что он самый лучший, но в данном случае этот путь действительно проще, чем создание запроса на удаление. Нужно последовательно применить запросы на обновление и добавление записей. Итак, в чем суть нашей идеи? В таблице ES_OPER создается новое поле - назовите его Условие отбора. Вве дите в него конкатенацию полей. Конкатенация - это объединение текстуальных, числовых символов или дат в одной ячейке, которое осуществляется с помощью оператора & (так называемого аиперсанда). В нашем случае следует ввести поля Дата ЧС, Код населенного пункта и Код вида ЧС, потому что именно они выше были заданы в качестве критериев отбора дублирующихся записей. При созда нии этого поля разрешается дублирование записей, поскольку они уже существу ют. Затем надо скопировать структуру таблицы ES_OPER (без ее содержания) и в полученной копии в поле Условие отбора задать запрет на дублирование ин формации. После этого в пустую таблицу следует добавить записи из исходной таблицы ES_OPER. Тем самым повторяющиеся записи исключаются, поскольку их ввод запрещен в поле Условие отбора. Чтобы завершить операцию, удалите исходную таблицу ESOPER, а ее название присвойте скопированной таблице. Поле Условие отбора можно также удалить, но лучше его все-таки оставить, что бы предотвратить дублирование записей в дальнейшем. Мы разработали стратегический план операции. Теперь начнем его реализацию. ВВОД НОВОГО ПОЛЯ Приступим к формированию и исполнению запроса на обновление. Сначала необ ходимо создать новое поле Условие отбора с помощью конструктора таблиц. Так как об этом подробно рассказывалось в главе 3, здесь мы приводим лишь результат рабо ты: итоговый вид поля Условие отбора в конструкторе таблиц (см. рис. 9.50). Как уже говорилось, в новом поле для исходной таблицы допускается дублиро вание: для свойства Indexed (Индексировано) установлено значение Yes (Dupli cates OK) - Да (Дублирование разрешается). Когда вы будете сохранять это из менение в структуре таблицы, Access 2000 поделится с вами своими сомнениями (см. рис. 9.51): Existing data violates the new setting for the "Required" property for field "Условие отбора" (Существующие данные входят в противоречие с новым значением свойства Обязательное заполнение для поля Условие отбора) - и пред ложит подумать: Do you want to keep testing with the new setting? (Вы хотите продолжить работу при сохранении нового значения?). Здесь возможны следую щие варианты ответа: Q To keep the new setting and continue testing, click Yes (Чтобы сохранить новое значение и продолжить работу, щелкните по кнопке Yes); • То revert to the old setting and continue testing, click No (Чтобы вернуть ся к старому значению и продолжить работу, щелкните по кнопке No);
186
Программирование на языке SQL
шш
Ы Microsoft Access File Edit Vie'"" In c Hrf
Tool.
Window
n- н ""
'
1•
'
Help
(a
' — '
с
i->
•
1_ | n | x |
ES O P E R : Table Field Name Код Еида ЧС дополн2 Группы население ТребоЕанич
I
I
Description
kl
Text Text Text Text
_•. Услссие отбора
_. __ General
Data Type
J zJ
Field Properties Lookup |
Field See
Alio w umc ode
40
Format Input Mast Caption
corn pre
Default Value Validation Rule Validation Text Required Allow Zero Length Indexed Unicode Compression
n 'yes
ГСП
No
i-hi_.
Yes (Duplicates OK) Ves
zi
hel d-
'1 Рис 9 50
Microsoft Access Existing data violates the new setting for the 'Required' property for field 'Условие отбора.' Do you want to keep testing with the new setting? * To I eep the new setting and continue testing, click Ves * To revert to the old setting and continue testing, click No. * To stop testing, click Cancel. No
Cancel
Рис 951
• To stop testing, click Cancel (Чтобы прервать выполнение операции, вос пользуйтесь кнопкой Cancel). Оставьте сомнения и смело отвечайте Yes В результате вы получите таблицу ES_OPER с новым пустым полем Условие отбора.
Запрос на обновление записей Теперь сформируйте запрос на обновление, чтобы ввести в созданное поле Условие отбора конкатенацию полей - критериев, ио ко горим идет поиск дублирующихся
187
Удоление дублирующихся записей
записей. Как обычно, сначала создайте запрос для таблицы ES_OPER. Чтобы пе возиться с лишней информацией, оставьте в запросе только одно поле - Условие отбора. Затем, как и раньше, откройте меню Query Type (Тип запроса) и выберите опцию Update Query (Запрос на обновление). В строку Update to внесите конкате нацию: [Дата ЧС] & [Код населенного пункта] & [Код вида ЧС] (см. рис. 9.52).
г^тзп
Ы Microsoft Access File Edit Vie* Insert Query Tools Window Help
ШШ 3
is1 QueryP : Update Query ES_OPER
d
Дата ЧС -d Код населенн—' Код вида ЧС Масштаб ЧС Текст сообще Ч
*\
sU Field Table Update То' Cntena' 01
Vr поеме отбор a ES OPER [Дата ЧС1 Ь, [Код населенного п-/мктз1 8*. [Код вида ЧС1
— —
>г
-1 i
Рис 9 52
Обратите внимание, что имена полей необходимо заключить в квадратные скобки, иначе вместо значений полей будут введены их названия. Если вы те перь отправите запрос на выполнение, то в поле Условие отбора будут включе ны совокупные значения полей, полученные после их объединения. На рис. 9.53, 1де представлена часть таблицы ES_OPER, показан результат операции.
И снова - запрос на добавление Наконец, в заключение работы по удалению повторяющихся записей скопируйте ES_OPER в новую таблицу, где в поле Условие отбора будет задан запрет на дуб лирование. Для этого в окне базы данных выделите таблицу ES_OPER и после довательно воспользуйтесь кнопками 4i| (копировать) и |@,| (вставить). В окне Paste Table As (Вставить таблицу как) укажите имя новой таблицы - назовите ее ES_OPERl. Теперь активизируйте опцию Structure only (Копировать только структуру). (Отметим, что возможны и другие варианты: Structure and Data Копировать структуру и данные, а также Append Data to Existing Table - Доба вить данные в уже существующую таблицу.) Когда вы щелкнете по кнопке ОК,
188
Программирование на языке SQL
15ТЗП
Ы Microsoft Access File Edit View
Insert Format Pucord; J_on|- Window
H.= lp
w, - • Л -
D c&
»i 51 ~; ^ | • ES_OPER : Table Код вида ЧС ;| Группы насоп Требования • 001 001 008 031 001 001 017 031 017 031 008 031 001 006 010 031 018 002 017 001 001 001 001 001 Re cord
ч I • ||
1
• I »i | > » | of 5927
#4 ©
^ М ^ ^ Н
l-l J
|
_±.
Условна отворэ 10/14/19981107001020501 07/09/19981107003030503 09/16/19981198001030505 01/18/19991191012030505 03/18/19991165001030503 03/18/19991165001030503 04/04/19991132012030501 05/27/19981180001030504 07/27/19981101253630502 07/27/19981160001030504 07/27/19981115132430503 07/27/19981186001030505 07/27/19981107001030505
3
,
J _L
— 'I
Рис 953
в окне базы данных во вкладке Tables (Таблицы) появится имя новой таблицы ES_OPERl. Откроите ее в режиме конструктора и измените то свойство поля Усло вие отбора, которое касается запрета на повторение записей. Сравните значение этого свойства, установленное для скопированной таблицы (см. рис. 9.55), с ана логичным значением для исходной таблицы (см. рис. 9.50). Теперь займемся формированием долгожданного запроса на добавление. Ал горитм создания подобных запросов был подробно рассмотрен в этой главе, в разделе «Запрос на добавление записей в таблицу», поэтому здесь отметим лишь одну деталь. В данном случае таблицей-получателем является ES_OPERl,
[Ш
Paste Table As T able Name
Ok
|E5_OPEPl Cancel
Paste Option? "" structure Only <~ Structure and Dat <~ Append Data to Existing Tal
Рис 9 54
189
Удаление дублирующихся записей
i^^^^HHJnlxl
\Ш Microsoft Access File Edit VIP
Ir^prt l o o l : Wmdu!
D & У
А
• - Q
Help
чи a
Ъ-
l Ra (S
\v
II • ES OPER1: Table Field Name
_•
\
>СЛиЕие О т б о р а
. ,
Data Type Те., г
ПО'
|
og-M~ • [^
"
^ ^ ^ ^ H _
-l> 1
Description
|
Field Proper tier.
General ] Lookup | Field Size Furrnat Input Mask caption Default Value Validation Rule
SO
d
уЬмъ ^ ^ H ^ ^ H 4 H | ' *"""'"
Validation Text Requu ed Allow Zero Length Indexed
По
Unicode Comoression
Ves
the field, but may
A A
An index speeds up search es and urting on
<;lni,\j
j
±fi
Рис 9 55 a таблицей-источником - E S O P E R . В ходе выполнения запроса Access 2000 по жалуется вам на то, что не можег включить в таблицу-получатель какое-то ко личество записей, поскольку в ней не допускается наличие дубликатов. Именно к этому вы и стремились! Отбросив угрызения совести, смело отвечайте Да. Итоговый вид бланка запроса показан на рис. 9.56, а очищенная от повторяю щихся записей таблица ES_OPERl - на рис. 9.57. По поводу последней необходимо небольшое пояснение. Если вы обратитесь к результирующей таблице повторяющихся записей, кото рая представлена на рис. 9.49, то убедитесь, что она включает 307 дубликатов. Меж ду тем исходная таблица ES_OPER содержит 5927 записей, а таблица E S O P E R 1 5754. Значит, удалено всего 173 записи. В чем причина такого расхождения? Дело в том, что таблица повторяющихся записей содержит все дубликаты, а при удалении уничтожаются лишь вторые, третьи и т.д. копии. Первый же экземпляр сохраняется, так как после удаления дубликатов он остается единственным. Правда, Access 2000 не утруждает себя размышлениями о том, какой именно вариант записи следует уничтожить; но это уже другой вопрос. Теперь, чтобы завершить всю операцию, удалите из базы данных таблицу ES_OPER, а ее имя присвойте таблице ES_OPERl. Что касается поля Условие отбора, то при желании его можно убрать. Однако мы уже рекомендовали вам не торопиться с этим: наличие поля позволит предотвращать дублирование записей при последующем вводе данных.
190
Программирование на языке SQL
Ы Microsoft Access Fjle Edit View In.eit Query loolc vvmctjuvi Help О Сё У •
• Н
.
J( 4 3 f
•
'
& 42 Г"
"
•
Ь • о-а - Й* °ё -И ••-
« <>а г
ли
Й' \
©-Й1
L4.
iui.iiumiun.i.u.inaiHM
МЗ
1
ES OPER Номер ДатаЧС Код населен Код вида ЧС
zl d ^
ы Рис 956
• Н
1 В Microsoft Access File Edit View Insert Format Pecords;
j0|s
•
• "l,
tS
В
&
&
v"
*
'
у- в а а ? •
' °$ -а • О -
• ой -
£1 51 ъъ
** >• *
е м- д. .M-hM
ES O P E R 1 : Table Номер •
5247 5316 5329 725 3760
Retcid
|
Дата ЧС
| Код кчаолёнь | Код вида ЧС | Масштаб ЧС | Т е к с т сообщения | Дата обмовлцЧ 0MJ1/199 7 110511 4L 1U201 Q 01/01Л99 01/01/1997 1152CJ2J 30115 0 К е м "рйЕ:СК5я об 01/01/199 01/01/1997 1 1 4 1 С Ж 10206 0 Ленинградец о 01/01/199 01/D1/1997 1145О01 10603 0 01/01/199 01/01/1997 1149CJ01 10206 0 01/01/199
2641
01/01/1997 11B0Q34
30106
1565 5400
01/01/1997 1192C32S 01/01/1997 12711 61
10206 30110
3720
01/01/1998 1130CD01
20101
3665 4892
01/01/1998 1145CD01 01/01/1998 11870)25
10702 10303
4089
01/01/1998 1198Qin9
10603
"j
Inlxl
bVmdow Help
1
• | н | » « | of 5 7 5 ^ 1
0 0
•I
01/01/199 09/29/199
0
XaHTfci • М а н т й о
0 0
г Петропаыов г Москва
0
Р е с п у б л и а Кс
0
Республика
01/01/199 02/04/199 02/04/199 02/04/199 02/13/199
.
I
Рис. 9.57
Перекрестный згырос Перекрестные запросы позволяиг подсчитывать данные по двуъ-d и более переменным. В ситуациях, подобных наше^ерекрестные запросы компактнее, ч;м обычные. Как правило, при перекрестом запросе первый столбец п о лучасмой в результа те таблицы отображает значеэшя одной переменной - это заг-оловш строк. В пер вой строке этой таблицы пр»иодятся значения второй пере-меннэй - заголовки столбцов. На пересечении стр»ош столбцов находится сумма («<оли^ество значений,
191
Перекрестный запрос
среднее и т.п.) по третьей переменной. Чтобы отразить все это в отчете, можно со здать сводную таблицу. Когда перекрестный запрос выполнен, в результирующей выборке заголовки строк и столбцов часто представляют собой поля, содержащие текст или даты. Поля значений обычно относятся к числовому или денежному типу. Поясним эти положения на конкретном примере.
Построение перекрестного запроса с использованием мастера Задача, для решения которой потребуется перекрестный запрос, формулируется гак: необходимо выяснить, сколько аварий (чрезвычайных ситуаций) определен ных видов произошло на территории разных субъектов Российской Федерации (краев и областей). Источником информации послужит таблица Filel. Формирование перекрестного запроса лучше всего начать в мастере запросов. Во вкладке Queries окна базы данных с помощью кнопки gpNew[ выйдите в окно New Query (Новый запрос), как показано на рис. 9.58. В этом окне активизируйте оп цию Crosstab Query Wizard (Мастер перекрестных запросов). Откроется еще одно окно (см. рис. 9.59). На этом этапе работы мастер спрашивает: Which table or query contains the fields you want for crosstab query results? (Какая таблица или запрос содержит те поля, которые вы будете использовать в перекрестном зап росе 0 ). В нашем случае следует выбрать таблицу Filel. А что делать, если в какойлибо другой ситуации одной таблицы будет мало? мастер подсказывает: То include fields from more than one table, create a query containing all the fields you need and than use this query to make the crosstab query (Чтобы включить поля из бо лее чем одной таблицы, сформируйте запрос, содержащий все нужные вам поля, л затем используйте этот запрос как основу для создания перекрестного запроса).
^^^^ШШ?Ы\
1 New Query
Z.
II!
This wiza crosstab data in a spreadsh
Design View Simple Query Wizard Crosstab Query Wizard Ш Find Duplicates Query Wizard Find Unmatched Query Wi2ard
\ '•\ър\а\ s
at
OK
Cancel
Рис 9 58 Когда вы сделаете выбор, на экране появится следующее окно мастера перекрест ных запросов (см. рис. 9.60), где вам будет задан вопрос: Which fields' values do you want as row headings? (Значения каких полей вы хотите сделать заголовками строк?). Всего можно указать не более трех полей. Для нашей конкретной задачи в качестве заголовков строк послужат значения поля Название области. Щелкните
192
Программирование на языке Crosstab Query Wizard Which table or quer\ contains the fields you want for the crosstab quen, result'?
_d
LMSSO LLASSP
LASSQ i_LASSR
J
CLHSST
To include fields from more than one table, create a query containing all the fields you need and then use thi«= query to make the crosstab query
.LRES E c OPER
view Г
(' Tables
Си
С
В th
farnple Htaderl
JHeader2
JHeader3
T JTML
... Next >
Cancel
Рис 9 59
Crosstab Query Wizard Which fields values do you want as row h e a d i n g ^
Available Fields
Selected Fields
Виды ЧС
Наименование ЧС Дата ЧС Бремя ЧС
You can select up to three fields
Select fields in the order you want information sorted For example, you could sort and group values by Country and then Region
Sample
J
Дата сообщения Время сообщения Код республики Наименование респус Код области Код население го п/н
H&&/4 1 Название об Header 1
|Header2
|Название обла TOTAL |НазвгзНИР обг\а ^На Е ани»- "|Ьпз
шшшшшпш^
Рис 9 60
1 ч
|Назеание обла
Cancel
|Header3
next >
193
Перекрестный запрос
по кнопке Next, a затем укажите поля (не больше трех), значения которых станут заголовками столбцов В данном случае будет выбрано поле Наименование ЧС После этого вы оказываетесь в следующем oicie мастера (см рис 9 61), где предсто нт ответить еще на один вопрос What nuirber do you want calculated for each column and row intersection? (Что вы хотите вычислить для каждой ячейки, рас положенной на пересечении столбца и строш?) Вы уже использовали два поля Название области - для заголовков строк, аНаименование ЧС - для заголовков столбцов Теперь понадобится третья переменная, значения которой можно подсчиты вать, причем они должны соответствовать .начениям первых двух полей Глав ное, чтобы это третье указанное поле не имею пропусков, то есть нулевых значе ний Значит, лучше всего подойдет поле Номер В качестве функции для подсчета числа значений выберите Count (одна из функций групповой обработки данных) Иначе говоря, в конце концов будет определено количество значений поля Но мер для каждой ячейки, которая находится та пересечении столбца (ЧС опреде ленного вида) и строки (того или иного региона Российской Федерации) Ска занное иллюстрирует рис 9 61 Теперь, когдавы подготовили все необходимое для создания запроса, щелкните по кнопке Next Crosstab Query Wizard 'What number do \ ou want calculated for each colurrn and row intersectiun? I For example you cculd calculate the sum of the field Order Amount for each employee (olumn) by ccuntr/ and region (row) Do /ou want to ^ummari^e ea h row"' fv Yer
in ludi- row sure
Functions
Fields
ЕидыЧС Дата ЧС Еремя ЧС Дата сообщения Е ремя сообщения h од респуб!ики Наименование республики г- од области У од населенного пунгта H a j f a H U r - С)И НЭ
First Last Пах Г Tin tDev Чит чаг
d
Sample Н а з в а н и е об Н а и г е н о в а н п Наименован!] Н а и м е н о в а ^ Ц Название ofjiai Count Номер) Название обла! Название облс Название осп:
Cancel
ч Езск
Next >
Рис 9 6i В результате на экране появится окно (см рис 9 62), где в формируемый за прос нужно внести последние уточнения Вэ-первых, мастер спросит вас What do you want to name your Query? (Как вы хэтите назвать ваш запрос'?) В прин ципе это ваше дело, но мы бы посоветовали тринять имя, которое по умолчанию 7-119
Программирование на языке SQL
194 Crosstab Query Wizard
What do you want to name your query"-' |Filel_Oo -.tab That's all the information the wizard needs to create the query Do you want to view the quel y, or modify the query design? (*" \ lew the query f~ Modify the design
Г
Display Help on working "'ith the crosstab query
; Back
Cancel
Finish
Рис 9 62
предлагает Access 2000. Filel-Crosstab. Следующий вопрос звучит так: Do you want to view the query or modify the query design? (Вы хотите выполнить запрос или изменить его оформление?). Выберите соответствующую позицию переклю чателя (sj. Вы твердо настроены выполнять запрос, и дизайн вас не интересует По этой же причине откажитесь от следующего предложения мастера: Display Help on working with the crosstab query (Вывести инструкцию по работе с запро сом). Теперь остается только щелкнуть по кнопке Finish, и запрос будет запущен на выполнение. А вот дальше в нашем размеренном сюжете возникает неожидан ная интрига - сообщение: Too many crosstab column headers (489) (В перекрест ном запросе слишком много заголовков столбцов - 489). Это означает, что даль нейшее выполнение запроса невозможно (см. рис. 9.63). Озабоченность Access вполне понятна. Crosstab Query Wizard
i V To° many ciosstab column headers (489) OK
Рис 9 63
195
Перекрестный запрос
Фактически вы объявили заголовками столбцов или нолей все наименования ЧС в таблице, кроме их дубликатов, которые система не пропустит (вместе с по вторяющимися именами таких заголовков было бы даже не 489, а 846). Действи тельно, многовато. Объяснение здесь простое: при формировании перекрестного запроса вы не вводили каких-либо критериев отбора. Впрочем, при использова нии мастера перекрестных запросов этого сделать все равно нельзя. Если вы хотите задать такие условия, то нужно сформировать обычный запрос
Ввод условий отбора записей в конструкторе запросов В окне базы данных во вкладке Query откройте ваш перекрестный запрос в режи ме конструктора (см. рис. 9.64). Теперь надо задать критерии отбора записей. Бу дем считать, что нас по-прежнему интересует количество ЧС по регионам, но толь ко если эти ЧС связаны с пожарами. Поэтому введите в запрос условие «пожар*, как показано на рис. 9.65. Если вы отдадите команду на выполнение запроса, то в результате получите таблицу, фрагмент которой приведен на рис. 9.66. Ы Microsoft Access
I
j File Edit View Insert Quel у Tools Window Help
с? .:>' © l-lnlxl
1
lis Filel Crosstab : Crosstab Query
1
Filel
*
-i
4
Номер Виды ЧС Наименован! U ДзтаЧС
-d ^
Field Table Total. Crosstab Sort Criteria or
Filel Group By Row Headinq
Наименование ЧС Filel Group By Column Headinq
Номер Filel Count Value
Total Of Номер Ног* Filel Count Row Headinq
— —
>r
«I.I Рис 9 64
Предположим, необходимо видоизменить запрос. Нужна справка о числе ЧС по регионам, но теперь нас интересуют не только аварии, связанные с пожарами, но и катастрофы на нефтепромыслах, нефтепроводах и других нефтяных объектах. Кро ме условия *пожар*, введите еще один критерий отбора - *нефте*, используя схему «ИЛИ». Иными словами, вы запрашиваете число аварий по регионам, в которых про изошли либо пожары, либо аварии на нефтяных объектах. (Если бы вы применили v
196
Программирование на языке SQL
Щ]
Ы Microsoft Access | File Edit View
Insert Query Tools Wirndow
Help
IB - У \c'., ik. rv
cf •> i © •
i? Filel_Crosstab : Crosstab Query
_ | П | Х |
d
Filel Номер Виды ЧС Наименовании Дата ЧС zj
^
JJ Field Table;
Total' Сг osstab Soit, Cntena 01
Назеание области Filel Group 6y Pow Headmq
Наименование ЧС Filel Group Bv Column Heading
Номер Filel Count Value
Total Of Номер: Hof Filel Count Row Heading
— —
"пожар*
Рис 9.65
ШЕ1
ш Microsoft Access I File Edit View
Insert Format Records Tools Window
Help
fS-^i-
a
1
is Filel Crosstab : Crosstab Query Название области
|Total Ot Номе|| Взрыв и пожа| Взрыв и пожа| Лесной пожз.£] 1
Костромская область
14
Краснодарский край Красноярский край
_
Курганская область
5 4
Курская область
1
Ленинградская область
7
Московская область
20
Мурманская область
3
Нижегородская
1
Новосибирская область
2
Омская область
4
Оренбургская облает}.
1
Орловская область
1
Rtcuid:
н
-I
у?2^^-72
LUP
'££"&$&&&.
Рис. 9.66
197
Работа со средой Access 2000 без ее инсталляции
схему «И», система Access 2000 стала бы отбирать сведения из регионов, где произо шли и пожары, и нефтяные катастрофы, а это уже совсем другой блок данных.) Зап рос будет выглядеть так, как показано на рис. 9.67. Обратите внимание: когда вы по кидаете ту ячейку в бланке запроса, где было введено первое условие *пожар*, система тут же преобразует его в Like "*пожар* . Результат этого дополненного запроса вы ви дите на рис. 9.68, где показан тот же фрагмент таблицы, что и в предыдущем случае. Во-первых, среди названий столбцов появились новые заголовки, связанные с нефтя ной тематикой. Во-вторых, увеличился список регионов; например, добавилась Ма гаданская область, которой раньше не было в этом перечне.
шш
Ы Microsoft Access j j File
Edit
View
Insert
Query
l o o Is
Window
Help
• : -> 1
cf ::N ©
ГЛЕШ
is FilelCrosstab : Crosstab Query
1
Filel
fj
Номер Виды ЧС Наименов ЭНИ( Дата ЧС
Field: Table: Total: Crosstab: Sort' Criteria: ot:
А
На:ванне области Filel Group Бу Row Heading
J НаименоЕание ЧС Filel Group By Column Heading
Номер Filel Count Value
Total Of Номер: Ног Filel Count Row Heading
— —i
Like "*'no*ap*" *н1эфте'*
..Г Рис. 9.67
Итак, в настоящем разделе мы подробно рассмотрели структуру перекрестного запроса и уяснили для себя существенное правило: чтобы обработать группу за писей и получить справку по множеству объектов, надо сначала четко определить само это множество. В данном конкретном примере нам необходимо суммарное число ЧС определенного вида по разным российским регионам. Значит, в первую очередь надо получить такие сведения по каждому из этих регионов. В ряде случа ев для решения указанной задачи придется создать запрос на выборку.
Работа со средой Access 2000 без ее инсталляции Подобная постановка вопроса может показаться несколько странной, однако она имеет определенные основания. Предположим, разработчик сначала создал базу
198
Программирование на языке SQL
-HM_blxl
\Ш Microsoft Access ] File Edit View Insert Format Records Tools Window Help
jM- H j # & ! ? i •
t
V
*" ' £1 51 ъъ
м
• ж © -^. г:
шшпшш ^
jis 1 Filel_Crosstab : Crosstab Query Название области |Total Of Номв|| Авария на нвфт<| Авария на нафтв| Авэртл] Костромская область 1 Краснодарский край 14 Красноярский край 5 Курганская область 4 Курская область 1 Ленинградская область 7 Магаданская область 1 1 Московская область 20 Мурманская область 3 Нижегородская 1 Новосибирская область 2 Омская область 4 Оренбургская область 1
~
Re cord
и | • | |
1
А1
» | и | - * | of 4 3
РИС
J
-I
9 68
данных в программной среде Access 2000, а затем установил эту БД иа другой ло кальный компьютер, где не инсталлирована ни Access 2000, ни даже пакет Microsoft Office. Возникает естественный вопрос: может ли пользователь работать на таком компьютере с созданной базой данных? Оказывается, да, и в настоящем разделе мы расскажем, как этого добиться. В главе 8 уже говорилось, что в большинстве СУБД использование языка SQL фактически является правилом. Наличие общепринятого языка позволяет стан дартизировать работу приложений с источниками данных - различными СУБД. В Windows такую возможность обеспечивает Open Data Base Connectivity (ODBC) стандартный набор функций, помогающих обрабатывать информацию на серве рах баз данных SQL. Именно ODBC обеспечивает различным программам доступ к одному и тому же источнику сведений. Принцип действия ODBC состоит в следующем. Чтобы то или иное приложе ние могло воспользоваться информацией из базы данных какой-либо СУБД, не обходимо установить драйвер ODBC для баз данных конкретной СУБД. Для каж дой СУБД должен быть установлен свой драйвер. Папка, где устанавливается этот драйвер, обычно так и называется - ODBC - и устанавливается вместе с загруз кой Windows. Драйвер ODBC - это динамически связываемая библиотека со стандартным интерфейсом, которая обеспечивает доступ к базам данных в опре деленном формате. Из любого приложения пользователь может легко связаться с любым из установленных драйверов ODBC и получить доступ к информации в базе данных, даже если СУБД, где была создана эта база, не инсталлирована на пользовательском компьютере.
199
Работа со средой Access 2000 без ее инсталляции
В составе пакета Microsoft Office, начиная с самой первой версии, есть програм ма MS Query, обеспечивающая доступ к любым данным, для которых установле ны драйверы ODBC. Отметим, что MS Query имеет собственный интерфейс н может функционировать отдельно от Microsoft Office. Мы воспользуемся про граммой MS Query, взятой из ранних, русифицированных редакций Microsoft Office, поэтому в настоящем разделе диалоговые окна будут выводиться на рус ском языке. Рассмотрим работу с MS Query на конкретных примерах. Сначала откройте папку MS Query, а в ней запустите программу Msqry32.exe (см. рис. 9.69). На экране появится основное диалоговое окно программы MS Query, показанное на рис. 9.70. |_|п|х|
|Cfc MS query j A d d r e s s | _ J ram Files\Common Files\Microsoft S h a r e d \ M S q u e r y j j
. a
li
Up
Cut
1Й Customer cdx
MSquery
id
is
Copy
Paste
»И1 »
J | Orddtail dbf
-3| Customer dbf
( Й Orders cdx
UH Employee cdx
P ] Orders dbf
-3| Employee dbf
(fa Product cdx
-
Ci] Product dbf
M s c r e a t e drr
Fil*
%1 0rvint32 dll
Изменен 1 0 / 2 8 / 1 9 9 5 00.00
Щ Supplier cdx
" Msqrv32 aid
Msqry32.eKe Прило•ение
^ M s a r v 3 2 hip
yi] Supplier dbf
Ш Orddtail cdx
'•*] з а п р о с ! arv
J J643KE \M
M y Computer
.4
Рис 9 69
В нем следует воспользоваться кнопкой (тЩ (Открыть запрос). Так вы начнете формировать запрос на выборку данных из БД в Access 2000, не инсталлируя саму систему Access. Чтобы убедиться в этом, проведите небольшой эксперимент. Пере несите в какую-нибудь другую папку программу, которая запускает Access 2000, Msaccess.exe. Тем самым вы блокируете запуск СУБД. Итак, щелкнув по кнопке Открыть запрос, вы откроете окно Выбор источника данных (см. рис. 9.71) Здесь можно выбрать опцию MS Access Database, а затем щелкнуть по клавише Использовать. Однако сначала откройте окно Источники данных ODBC, показанное на рис. 9.72. Здесь приведен перечень тех СУБД и вообще файлов других форматов, к кото рым можно получить доступ с помощью ODBC. Система Access 2000 далеко не един ственная в этом списке. Теперь щелкните по кнопке ОК. После обычной Windowsпроцедуры поиска нужного файла вы открываете базу данных dbl.mdb и видите на экране знакомое окно Добавить таблицу (см. рис. 9.73). Выберите и добавьте две таблицы. Фирмы и Страны. Данные из этих таблиц появятся в бланке запроса почти в том же виде, в каком они представлены в режиме
200
Прогроммирование на языке SQL
№ГП
. Microsoft Query Файл
ШШШ
ИЗ ШШ Ш 0 Z 3 ШШ ШИЗ LM3
"T't-r
"|"^ЩЧЙСЛ. Г :У
Г
Рис 9 70 Выбор источника данных Доступные источники данных MS Access Database • admin
Источники данных ODBC Использовать! Отмена другие Уд а пить
Рис 9 71
£ведите источник данных IMS Access Database 'Visual FoxPro Tablei Visual FoxPio Database FoxPro Files Paradox Files Text Files MS Access 97 Database MS Access Database
Id Отмена
OK Создать
Удалить
Рис 9 72
конструктора (см. рис. 9.74). Если вы не установите явную связь между двумя таб лицами по коду страны, то в результате будет выведен полный набор имеющихся значений: все фирмы и страны независимо от того, в какой стране находится та или иная фирма. Чтобы упорядочить информацию, лучше обозначить связь меж ду таблицами, что вы и видите на рис. 9.74. Если потребуется перейти из этого
201
Работа со средой Access 2000 без ее инсталляции
Добавить таблицу Table Менеджер *] Назначение Приборы для измерения кислотнс Приборы представленные на рын Словарь стран Страны Страны Query Типы приборов
У
'Т ирмы в России
Лобаеить Закрыть
.Опции
И Database
]c \Мои документы \E_jJ
Рис 9 73 1
]дЕ]
•"- Microsoft Query Файл
Правка
ши
Просмотр
Формат
Таблица
Критерий
Записи
Окно
и шщгаигзп шщ i щ №?
"•Запрос!
пнтзп Фирмы
Страны
Андрее
Код Фирмы
| Название Фирмы | ГЕОХИ РАН Sarlm Automation TAAG Milton Roy Company SYR US Systems НПП "ЭК0НИКС" Петербургский инстит ОКБ ТЕСТ Фирмы "Ан AD 'ЭКРОС"
ишззписьи „..„иац "л1 Для показа и
-
Адрес 2 Код страны Код Фирмы Название Фир| Примечания J
Gen_npHMe43h s_Generation s_GUID s_Lmeage Kga ;
Примечания
Страна Россия ФИНЛЯНДИЯ
Португалия Страна не указана Страна не указана Россия Россия Россия Россия
>г
J
«ггерия отбора выбери
"Г~ПШУГ^Щ\
Рис 9 74
режима в режим таблицы, щелкните по кнопке f^j (Показать/спрятать таблицы). Режим таблицы показан на рис. 9.75. Теперь предположим, что нужен список фирм, работающих в России. Иными словами, вы собираетесь создать запрос на выборку. Для этого воспользуйтесь кнопкой \$\ (Показать/спрятать критерии). На экране появится бланк запроса с перечнем условий отбора. Задайте в поле Страна критерий Россия, как показано
202
Программирование на языке SQL
TrJRI
Microsoft Query Файл
Праька
Просмотр
Формат
Таблица
Критерий
Записи
Окно
2.
ЕШЗ
•Запрос! Фирмы .Адрес J Адрес 2 Код страны Код Фирмы Название фир|_ Примечания
Страны s_GeneiaNon s_GUIO o_Lineage Код Примечания Страна
Попе Страна Значение Россия и пи Код Фирмы
ft
1«Н1 Запись И
1
Название Фирмы ] ГЕОХИ РАН Sarlin Aufomofion TAAG
Примечания
Страна Россия Финляндия Португалия
_Millr,n Rr.li Г г . т г . л ,
"ТЛмТ ЧИСЛ I
Готово
•г
Рис. 9.75
на рис. 9.76. Затем, как обычно, с помощью кнопки j l отправьте запрос на выпол нение. (Отметим только, что в данном случае знакомая вам кнопка называется иначе - Запросить сейчас.) Результирующая таблица, которая содержит отобран ные записи, приведена на рис. 9.77. Сохраните запрос, как делали это раньше. Те перь его можно вызвать и реализовать посредством кнопки [eg] (Вызвать запрос). И последнее: если вы щелкнете по кнопке |juj (Показать SQL), то получите текст запроса на языке SQL. Таким образом, вы вошли в базу данных системы Access 2000 с помощью драй вера ODBC и получили возможность нормально работать. Примечательно, что вы не инсталлировали саму систему, но получили почти полную иллюзию того, что находитесь именно в ней.
Резюме 1. Главной «специальностью» языка SQL является конструирование запросов пользователя к базе данных. Поэтому программирование на языке SQL в ос новном - это формирование таких запросов. 2. Основные типы запросов с использованием SQL: - select query (запрос на выборку); - make-table query (запрос на создание таблицы) - создает новую таблицу па основе данных, которые уже размещены в одной или нескольких таб лицах;
203
Резюме •"-Microsoft Ф аi i n
Правка
I ]{ЩЩ
L^HJnlxl
Query Просмотр
N Ф
"•Запрос! •
—
—
Н а з в а н и е Фирмы | YSl incorporated Cole-Parmei Internatioric Alltech SEMSORTECHNIKMEI ,AMEL Instrument ОАО "ЦЕ-ет" Нефть-Газ-Начка НПП 'ЭКОНИКС" ЭКОХЕЛП ИНСТРУМЕ АО 'ЭКРОС" Петербургский инспгг ОКБ ТЕСТ фирмы "Ан. ГЕОХИ РАН LEEMAN LABS Sailin Automation DATA LINK Instruments Ф и р м а не указана Wilks Enterprise. Inc FCI Envnonrnental Milton Roy Company
ИШЗапмсьП
IMW1
Формат OU
Таблица
Критерий
Записи
Код
|
Огмо
m йи \ш [ш ш
Примечания
1
L^LB.Inlxl
Примечания
Cij
из 04 05 06 06 06 06 06 06 06 06 07 08 09 01 01 01 01 <
9
щ>
J
Для показа и правки критерия отбора выберите Просмотр К
1
fjr
":
1 Opai^i. USA _j USA USA Германия Италия Россия Россия Россия Россия Россия Россия Россия Россия США Финляндия Франция Страна не ч.к; Страна не чк< Страна не чк; Страна не чк< ,
,числ [
Г~
Рис. 9.76
- delete query (запрос на удаление) - удаляет все записи из одной или не скольких таблиц на основании критериев, заданных пользователем; - append query (запрос на присоединение) - добавляет целые записи или только указанные поля в одну или больше таблиц; - update query (запрос на обновление) - изменяет данные в существующих таблицах на основании информации в окне конструктора. 3. Запросы могут создаваться как с помощью конструктора (Query Design), так и посредством мастера (Query Wizard). На наш взгляд, конструктор удобнее: во-первых, его операции оформляются более наглядно, во-вторых, из конструктора легко переходить к инструкциям в форме SQL и наоборот. Тем не менее, показаны и примеры построения запроса с использованием масте ра запросов. 4. Возможна и третья форма представления запроса - инструкции SQL. Меж ду запросом, сформированным посредством конструктора, и инструкцией SQL существует жесткая и однозначная связь. 5. В главе были подробно рассмотрены конкретные примеры формирования запросов различных типов: - запросы с использованием групповых операций; - запросы с дополнительными условиями; - запросы с параметрами;
204
Программирование на языке SQL
1 1 Microsoft Query ФйГт
ПраЕка
Ю1
Просмотр
N
Формат
T&6Jтнца
mm и R
Критср й
Записи
GKHO
2.
|п|ж| н— '
1 "«Запрос!
•
Название Фирмы | ОАО "Цвет" Нефть-Газ Начка |
нпп 'зконикс"
Примечания
1
Код
1 06 06 06 06 06 06 06
;
ЭКОХЕЛП ИНСТРУМЕ. АО 'ЭКРОС" Петербчргский ннстит ОКБ ТЕСТ фирмы "Ан ГЕОХИ РАН W i l l Запись 11 \ШП
1
il
Примечания
—
в п|х|
1 Страна Россия Россия Россия Россия Россия Россия Россия Россия
1
Для показа и правки критерия отбора выберите Просмотр К. |
•J
Г
!
Г
"{"" |числ Г
г • -
1
Рис 9.77
SELECT DISTINCT Фирмы Адрес. Фирмы 'Адрес 2", фирмы Код страны". Фирмы "Код Фирмы', Фирмы 'Название Фирмы'. Фирмы Примечания. Страны Страна FROM 'с \Моидокументы\Банки данными"!'Страны Страны, 'с \Моидокументы\Банки данны>.\с1Ы' Фирмы Фирмы w/HERE Фирмы 'Код страны' = Страны Код AND ((Страны Страна='Россия')|
Отмена
d Рис 9 78
-
запросы на создание таблицы; запросы на добавление записей в таблицу; запросы на удаление записей; запросы на обновление записей; перекрестные запросы,
а также сложные запросы, формируемые на основе перечисленных. Поскольку в большинстве СУБД использование языка SQL фактически является правилом, наличие общепринятого языка позволяет стандартизи ровать работу приложений с источниками данных - различными СУБД. В Windows такую возможность обеспечивает Open Data Base Connectivity (ODBC) - стандартный набор функций, помогающих обрабатывать инфор мацию на серверах баз данных SQL. Именно ODBC обеспечивает различ ным программам доступ к одному и тому же источнику сведений - напри мер, СУБД, не требуя инсталляции этой СУБД. Так, в частности, возможны доступ и работа с данными, сформированными в Access, без ее инсталляции. В главе показан пример реализации такой возможности.
Глава X Программирование с использованием макросов • Функции макросов • Использование макросов для обработки событий • Использование макроса при выполнении сложного запроса
Функции макросов Макросы бывают двух видов: единичные, то есть состоящие из одной макроко манды, и сложные. В последнем случае макрос включает несколько последова тельно выполняемых макрокоманд, объединенных общим именем. Каждая мак рокоманда осуществляет определенную операцию: установить значения, открыть/ закрыть таблицу, найти запись и т.д. Как правило, макрос автоматически запуска ется при наступлении какого-либо события: например, пользователь щелкает той или иной кнопкой мыши, открывает таблицу, переходит от одного поля к другому и т.п. Чтобы запустить макрос, надо указать его имя. Если макрос запускается в ответ на событие, он должен быть присоединен к соответствующему свойству формы, отчета и т.д. (см. главу 4, например, раздел «Заголовок формы»). Макросы могут использоваться для выполнения довольно широкого диапазона операций. Например, макросы позволяют:
206 • • Q •
Программирование с использованием макросов
открывать отчет для просмотра или печати; переходить от одного элемента управления (записи, поля) к другому; устанавливать свойства объекта; выполнять разнообразные команды и т.д.
Использование макросов для обработки событий Наиболее часто макросы применяются для обработки событий. При этом макрос может функционировать и как самостоятельная программа, и в составе процеду ры VBA (Visual Basic for Applications). Первый вариант иы рассмотрим чуть ниже, а второй станет предметом нашего внимания в следующей главе.
Понятие события Событие - это любое действие пользователя; щелчок кнопкой мыши, открытие формы и т.д. Событие может также инициироваться каким-либо оператором Visual Basic пли самой системой Access. События связываются с формами, отче тами, разделами форм и отчетов, а также с элементами управления форм - в част ности, с полями. Откликом на событие может быть выполнение процедуры об работки событий на языке VBA (о чем речь пойдет Б следующей главе) или макроса. Что такое обработка события? Например, давайте посмотрим, как выглядят свойства поля формы (пусть это будет форма Страны). Откроем ее в режиме конструктора (см. рис. 10.1). Надо открыть также список событий, предусмотренных для какого-либо поля данной формы (например, для поля Код). Для этого следует либо дважды щелк нуть левой кнопкой мыши в пределах этого поля, либо Щелкнуть там же правой кнопкой мыши и в появившемся контекстном меню выбрать опцию Properties (Свойства). Когда на экране возникнет одноименное окно, откройте в нем вклад ку Event (Событие). В результате будет выведен искомый список возможных со бытий (см. рис. 10.2). Событие возникает для этого поля в следующих случаях: • при обновлении поля (до или после операции); • при открытии/закрытии поля; • при активизации/дезактивизации поля, когда оно получает или теряет фокус; • при использовании кнопок мыши (щелчок, двойной щелчок, движение кнопки вверх или вниз); • при использовании клавиатурных клавиш (щелчок по клавише, ее движе ние вверх или вниз); • при перемещении курсора. Для другого элемента управления (например, для кнопки, текстового поля и т.д.) перечень событий, предусматриваемых в Access 2000, может быть несколько иным, но тоже достаточно длинным.
207
Использование макросов для обработки событий Ш Microsoft Access File Edit View
In:«tt
Format Tools Window
Help
Ml
IБ Страны: Form • 10 • i • И
i
I 2 - 1 -
• Form Header * Detail
Код
i't o n
Стран
лрана •
*
Дрш Ш-ЯЭг- \ЛЯ Примечания
>г. Рис 10 1 \\£ Text Box: Код Format )
Event
Data
Before Update . . After Update
| other
|
I
Ш
« Щ
Щх\
..
"~"""*
ш
\ \\ ) ' 1
On Exit
1
|_
On Lost Focus . . On Click On 0Ы Click .
!
.
On Mouse Down . On Mouse Move .
1 ••
On Key Up On Key Press . . ,
Ни
1
f-'-ffj;
Рис JO 2
Последовательности событий Разработчик, который встраивает в систему определенные реакции программы на действия пользователя, должен учитывать-следующее. Каждая отдельная опера ция (допустим, переход от одного элемента управления к другому) может повлечь
208
Программирование с использованием макросов
за собой ряд событий, возникающих в определенной последовательности. Очень важно знать ее, поскольку от порядка, событий зависят условия и очередность вы полнения макросов и процедур обработки событий. Предположим, созданы две такие процедуры, и они должны выполняться в определенной последовательнос ти. Значит, пользователь должен быть уверен, что события, вызывающие эти про цедуры, возникают в том же порядке..
Порядок событий элементов управления в формах События элемента управления возник ают в форме при переводе фокуса на элемент управления, а также при изменении илш обновлении данных в этом элементе. Перевод фокуса на элемент управления Так, при переходе фокуса в форму, в которой выводится один или несколько ак тивных элементов управления, или при переходе к другому элементу управления в этой же форме возникают события On Enter (Вход) и On Get Focus (Получение фокуса^ в следующем порядке: On Enter =» On Get Focus. Названные события возникают также после того, как пользователь откроет фор му, то есть после операций Open (Открытие), Activate (Включение), Current (Те кущая запись). Последовательность в данном случае такова: Open (для формы) => Activate (для формы) Current (для формы) => On Enter (для элемента управления) => On Get Focus (для элемента управления). Теперь рассмотрим иную ситуацию: элемент управления теряет фокус. Напри мер, форма, в которой активизируются один или несколько элементов управле ния, закрывается или пользователь п ереходит к другому элементу управления в той же форме. В таком случае возникают события: On Exit =» On Lost Focus. Когда пользователь закрывает форму, события On Exit (Выход) и On Lost Focus (По теря фокуса) возникают перед операциями, связанными с этим закрытием: Unload (Выгрузка), Deactivate (Отключение), Close (Закрытие). Порядок будет таким: On Exit (для элемента управления) => On Lost Focus (для элемента управле ния) => Unload (для формы) => Deactivate (для формы) => Close (для формы).
Изменение и обновление данных в эле менте управления Предположим, пользователь включает в элемент управления формы новые дан ные или изменяет существующие, а затем переводит фокус на другой элемент управления. Тогда возникают события Before Update (До обновления) и After Update (После обновления), происходящие в следующем порядке: Before Update =» After Update. События On Exit и On Lost Focus для изменяемого элемента управления возни кают после событий Before Update и A^fter Update: Before Update =» After Update => Oni Exit =» Lost Focus. Если пользователь модифицирует текст, который находится в поле, или изменяет содержимое поля со списком, то возн икает событие On Change (Изменение).
Использование макросов для обработки событий
209
Отметим, что оно происходит при лнобом изменении содержимого элемента управления, причем до перехода к другому элементу управления или к другой за писи (следовательно, до возникновени:я событий Before Update и After Update). Если курсор находится в поле, то щелшок по любой клавише, соответствующей символу, вызывает следующие событиям On Key Down (Клавиша вниз) => O n Key Press (Нажать клавишу) => On Change (Изменение) => On Key Up ((Клавиша вверх). Событие Not in List (Отсутствие в сшиске) возникает, когда пользователь вводит в поле со списком значение, отсутствующее в этом списке, а затем пытается перей ти к другому элементу управления или ж другой записи. Событие Not in List проис ходит также после событий клавиатуры ш события On Change (Изменение) для поля со списком, но до возникновения любых «событий в элементе управления или формы. Если для свойства поля со списком Limit. To List (Ограничиться списком) задано зна чение Да, то сразу после Not in List возшикает событие формы Error (Ошибка): On Key Down => On Key Press => Om Change => On Key Up => Not in List => Error.
Порядок событий записи в фор(ме События записи возникают в форме в (следующих случаях: • при переводе фокуса на запись; U при обновлении содержимого загписи; • при удалении существующей зашиси/записей; • при создании новой записи. Перемещение фокуса по записям и обшовление содержимого записей При переводе фокуса на запись, существующую в форме, при вводе новых или изменении существующих данных в защиси, а также при переходе к другой запи си той же формы возникает такая последовательность событий: Current (Текущая запись) => Before lUpdate (До обновления) => After Update (После обновления) => Current (Текущая запись). При выходе из измененной записи, шо до входа в новую запись возникают со бытия Exit (Выход) и On Lost Focus (Шотеря фокуса). Они происходят для того последнего элемента управления, на котором находился фокус. Эти события воз никают после событий формы Before Update и After Update: Before Update (для формы) => After lUpdate (для формы) => Exit (для элемента управления) => On Lost Focus (для элемента управления) => Current (для формы). При переводе фокуса с одного элемента управления на другой возникают со бытия для каждого из этих элементов. Иапример, возможны такие последователь ности событий: • открытие формы и изменение дажных в элементе управления: Current (для формы) => On Enter (для элемента управления) => On Get Focus (для элемента управления)) => Before Update (для элемента управле ния) => After Update (для элемента управления);
210
Программирование с использованием макросов
Q перевод фокуса на другой элемент управления: On Enter (для элемента управления 1) => On Lost Focus (для элемента управления 1) => On Enter (для элемента управления 2) => On Get Focus (для элемента управления 2); • перевод фокуса на другую запись: Before Update (для формы) => After Update (для формы) => Exit (для эле мента управления 2) => On Lost Focus (для элемента управления 2) => Current (для формы).
Удаление записей Когда пользователь удаляет запись, в форме возникают следующие события: Delete (Удаление) =• Before Del Confirm (До подтверждения удаления) => After Del Confirm (После подтверждения удаления). Перед этим Microsoft Access обязательно выводит диалоговое окно, предлагая под твердить удаление. Если пользователь отменяет событие Delete, то события Before Del Confirm и After Del Confirm не возникают и диалоговое окно не выводится.
Создание новой записи Если пользователь переводит фокус на новую (пустую) запись в форме или со здает новую запись, вводя символы с клавиатуры, то события возникают в следу ющем порядке: Current (для формы) => On Enter (для элемента управления) => On Get Focus (для элемента управления) => Before Insert (До вставки - для формы) => After Insert (После вставки - для формы). Отметим, что события Before Update и After Update для элементов управле ние в форме и для новой записи возншсают после события Before Insert, но до события After Insert.
Порядок событий клавиатуры и мыши События клавиатуры возникают в имеющих фокус формах или в элементах управ ления формы при нажатии клавиш или при передаче команд клавиатуры. События мыши возникают для форм, разделов форм и элементов управления в фюрмах при щелчке по кнопке мыши, если в этот момент ее указатель установ лен на форме, разделе формы или элементе управления. События клавиатуры Естчи фокус находится на элементе управления формы, а пользователь нажимает и отпускает клавишу или выполняет макрокоманду Send Keys (Команды клавиа туры), имитирующую нажатие клавиши, возникает следующая цепочка событий: Key Down (Клавиша вниз) => Key Press (Нажать клавишу) => Key Up (Клавиtna вверх). При нажатии или отпускании клавиши, а также при выполнении клавиатур ной команды, соответствующей символу из набора ANSI, всегда возникают собы тия! Key Down, Key Press и Key Up. Если пользователь нажимает и удерживает клавишу ANSI, возникает иная последовательность событий:
Использование макросов для обработки событий
211
Key Down => Key Press => Key Down => Key Press и т.д. Это продолжается до тех пор, пока пользователь не отпустит клавишу; тогда произойдет событие Key Up. При нажатии и отпускании клавиши, которая не является клавишей ANSI, воз никают события: Key Down => Key Up. Если пользователь нажимает и удержива ет такую клавишу, то до ее отпускания возникает и повторяется событие Key Down, а при отпускании происходит событие Key Up. Если при нажатии той или иной клавиши предусмотрено другое событие эле мента управления, то это событие возникает после Key Press, но до Key Up. На пример, если нажатие клавиши приводит к изменению текста в поле, то последо вательность событий такова: Key Down (Клавиша вниз) => Key Press (Нажать клавишу) => Change (Изме нение) => Key Up (Клавиша вверх) Если нажатие клавиши вызывает перевод фокуса с одного элемента управле ния на другой, то событие Key Down возникает для первого элемента управле ния, а события Key Press и Key Up - для второго. Например, если пользователь изменяет данные в элементе управления и нажимает клавишу TAB для перехода к следующему элементу, то возникают следующие события: • для первого элемента управления: Key Down (Клавиша вниз) => Before Update (До обновления) => After Update (После обновления) => Exit (Выход) => On Lost Focus (Потеря фокуса); • для второго элемента управления: On Enter (Вход) => On Get Focus (Получение фокуса) =* Key Press (Нажать клавишу) => Key Up (Клавиша вверх). События мыши Если указатель мыши установлен на элементе управления формы, а пользователь нажимает и отпускает кнопку мыши, то возникает следующая цепочка событий для элемента управления: On Mouse Down (Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелк нуть по кнопке). Если фокус находится на одном элементе управления, а пользователь устанав ливает указатель мыши на другом и щелкает ее кнопкой, то возникают следую щие события: • для первого элемента управления: On Exit (Выход) => On Lost Focus (Потеря фокуса); • для второго элемента управления: On Enter (Вход) => On Get Focus (Получение фокуса) => On Mouse Down (Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелкнуть по кнопке). Если пользователь устанавливает указатель мыши на элементе управления в другой записи и щелкает кнопкой мыши, то для формы событие Current (Теку щая запись) возникает до события On Enter (Вход) для элемента управления. Двойной щелчок по кнопке мыши приводит к возникновению двух событий: Dbl Click (Дважды щелкнуть по кнопке) и Click (Щелкнуть по кнопке). Например,
212
Программирование с использованием макросов
если указатель установлен на элементе управления, который не является кноп кой, то двойной щелчок кнопкой мыши вызывает следующую цепочку событий для элемента управления: On Mouse Down (Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелк нуть по кнопке) =» Dbl Click (Дважды щелкнуть по кнопке) =* On Mouse Up (Кнопка вверх). При двойном щелчке кнопкой мыши на элементе управления, который являет ся кнопкой, эти события возникают после второго события Click. Событие Mouse Move (Перемещение указателя мыши) для формы, раздела или элемента управления происходит при перемещении указателя соответственно по форме, разделу или элементу управления. Это событие не зависит от других со бытий мыши.
Порядок событий для отчета и разделов отчета События для отчета и разделов отчета возникают, когда пользователь открывает отчет для печати или предварительного просмотра либо закрывает отчет.
События отчета При открытии отчета для печати или предварительного просмотра и последую щем закрытии отчета (вариант - при переходе в другое окно Microsoft Access) со бытия происходят в следующем порядке: Open (Открытие) => Activate (Включение) => Deactivate (Отключение) => Close (Закрытие). При переходе из одного окна открытого отчета в другое возникает событие Deactivate для первого отчета и Activate - для второго: Deactivate (для отчета 1) => Activate (для отчета 2). Событие Deactivate отчета происходит также при переходе из окна отчета в дру гое окно Microsoft Access. Однако Deactivate не возникает при переходе в диало говое окно, в окно формы, где установлено значение Да для свойства Pop Up (Всплывающее окно), или в окно другого приложения. При открытии отчета, который создан на основе запроса, Microsoft Access гене рирует событие Open до выполнения базового запроса. Благодаря этому можно включить в отчет условия отбора с помощью макроса или процедуры обработки события, так как они запускаются в ответ на событие Open. Макрос или процеду ра обработки события позволяют открыть специальное диалоговое окно, через которое пользователь вводит в отчет критерии отбора. События разделов отчета Если отчет открывается для печати или предварительного просмотра, события разделов отчета Format (Форматирование) и Print (Печать) возникают после со бытий отчета Open и Activate, но до событий отчета Deactivate и Close. Последо вательность будет такой: Open (для отчета) => Activate (для отчета) => Format (для раздела отчета) => Print (для раздела отчета) => Deactivate (для отчета) => Close (для отчета).
Использование макросов для обработки событий
213
Кроме того, либо на стадии форматирования отчета, либо по завершении форма тирования, но до наступления события Print могут возникнуть следующие события: • Retreat (Возврат) - происходит при возвращении в предыдущий раздел от чета на стадии его форматирования; a No Data (Отсутствие данных) - возникает при отсутствии записей в отчете; • Page (Страница) - возникает, когда отчет отформатирован, но еще не начал печататься. Вы можете использовать данное событие, чтобы изменить офор мление отчета для печати. Как видите, событий много, и они довольно разнообразны. Это делает объекты базы данных и элементы управления очень чувствительными к любым действиям пользователя и к внутренним изменениям, которые происходят в БД. Зато такой набор событий обеспечивает гибкую реакцию программы практически на каждое уточнение, вносимое в базу данных. Обратите внимание на кнопки, которые расположены справа от каждого собы тия в таблице свойств элемента управления. Щелкнув по стрелке прокрутки, вы откроете список имеющихся макросов и сможете подключить к обработке собы тия любой из них. Кнопка ^ J позволяет активизировать процедуру обработки со бытия на языке VBA. Об этом речь пойдет в следующей главе.
Автоматический перевод фокуса при помощи макроса Конкретная задача, которую нам надо решить, заключается в следующем. Как было показано в главе 4, вы используем форму для ввода новых записей. Напом ним, что в качестве примера рассматривается форма Страны (см. рис. 10.1). Когда вы внесем новые данные в первое поле (скажем, в поле Код), курсор по умолча нию останется в нем. Однако нам нужно, чтобы он переместился в следующее поле - Страна, потому что после ввода кода надо указать название страны. Кур сор придется переводить вручную. Конечно, это не бог весть какая сложная опе рация, но когда таких операций много, пользователь испытывает дополнительные неудобства. Если применять при обработке событий макросы, подобных непри ятностей легко избежать. Итак, автоматический переход курсора (например, из поля Код в поле Страна) должен произойти, когда вы завершим ввод информации в поле Код. Следова тельно, макрос в данном случае стоит привязать к событию After Update (После обновления). Однако для поля Код принята несколько другая схема обработки с помощью операторов VBA. Подробно она рассматривается в главе 11, но вкрат це сводится к следующему. Когда форма Страны открывается, она изначально го това к вводу новой записи: в поле Код автоматически устанавливается ее поряд ковый номер, а остальные поля пусты. Если пользователь собирается не вводить новую запись, а заглянуть в какую-либо из старых, он может сделать это с помо щью стрелки прокрутки в этом поле. Но программа не знает заранее, какая запись понадобится пользователю для просмотра, поэтому форма по умолчанию на строена на то, что наиболее вероятно: она будет открыта для ввода новой запи си. Таким образом, нет необходимости вручную вводить значение в поле Код: при открытии формы новый код появляется автоматически. Значит, переход к следующему полю также можно связать с событием Open (Открытие) в окне
214
Программирование с использованием макросов
свойств формы. Но возможен и другой путь: соотнести такой переход с событием On Get Focus для поля Код в окне его свойств. Мы выберем второй вариант. Чтобы реализовать его, нужно создать команду перехода к следующему элемен ту управления - полю. Используем для этого макрос. В окне базы данных откройте вкладку Macros (Макросы) и щелкните по кноп ке 'inNew|. На экране появится окно конструктора макросов (см. рис. 10.3). В столб це Action (Макрокоманда) стрелкой прокрутки надо вызвать выпадающее меню и в нем выбрать нужную команду - в нашем случае Go To Control (К элементу управления). (Использовать стрелку прокрутки не обязательно: введите несколь ко первых букв названия макрокоманды, a Access 2000 допишет его. Но для этого вы должны точно знать имя макрокоманды, что бывает далеко не всегда.) В поле Comment (Примечания) вы при желании можете включить любые комментарии к макрокоманде. В поле Action Arguments (Аргументы макрокоманды) для каж дой из них вводятся специфические параметры. Для выбранной нами макро команды Go To Control требуется указать только название того элемента управ ления, к которому надо перейти, - Control Name. Естественно, д л я других макрокоманд аргументы могут быть значительно сложнее, в чем вы убедитесь дальше. Итак, введите в поле Control Name имя следующего поля формы, в кото рое необходимо перейти, - Страна. После этого макрос в окне конструктора можно назвать (по умолчанию предлагается имя Масго2) и закрыть.
шш
Ы Microsoft Access File Edit View
!У
В.
Insert Run Tool?; Window
I За (р, '
Help
1 й ^ ^
* Macro2 : Macro
т
Action GoToControll GoToControl GoToPage GoToRecord Hourglass Maximize Minimize MoveSize MsgBox Control Name
Comment
!^
© д - (3 -
шш g j
Action Arguments Страна Moves the focus to a specified field or control on the active datasheet or form. Press Fl for help on this achon
UJ Рис. 10.3
Использование макроса при выполнении сложного запроса
215
Е^ Text Box: Код Format |
Data
Esent
| other
|
. All
Before Update Alter Update On Change On Enter
On Exit On On On On On
Got Focus Lost Focus Click Dbl Click Mouse Down
On Mouse Move
JP--1
ДШЯЗ
"~ ~
___
On Mouse Up On Key Down On Key Up On Key Press
____
HI Рис. ]QM
Теперь надо связать созданный макрос с событием On Get Focus (Получение фокуса). В окне поля Код (см. рис. 10.2) щеелкните по стрелке прокрутки в поле свойства On Get Focus. В выпадающем мееню снова выберите макрос Масго2 (см. рис. 10.4). Этого достаточно, чтобы установить свяязь созданного макроса с событием. Окно, где она задана, надо сохранить. Точно так же задается автоматический пере;ход от одного поля к другому и в этой, и во всех остальных формах. Единственная огсоворка: как уже отмечалось, в этих слу чаях макрос нужно связать с другим свойствош - After Update (После обновления).
Использование макроса при выполнении сложного запроса Как вы помните, в предыдущей главе описывзалось создание объединенной выбор ки записей из разнородных файлов, которые шмели различную структуру, были раз работаны в различных организациях и в различных программных средах, но инте грированы в единый банк данных в программной среде Access 2000. Выполнять задуманную операцию пришлось в два этапаа: сначала формировать запрос на со здание таблицы Выборка1, куда вошли записей из одного файла, а затем генериро вать запрос на добавление данных в эту таблшцу из другого файла. Сейчас с помо щью макроса вы можем объединить оба этапа (работы, упростив решение задачи. Мы будем по-прежнему использовать запросы, но > организуем их в макропоследователь ность, которая имеет название и выполняется^ как целостная операция. Прежде чем показать, как это делается, прооизведем чисто техническое, вспомо гательное действие - переименуем запросы,, которые нам понадобятся. Запросу Query7 дадим название Запрос на создание таблицы, а запросу Query8 - Запрос на добавление записей. Такое переименовашие нужно лишь для того, чтобы при объединении запросов их новые названия шаглядно свидетельствовали о функ ции каждой части созданного макроса.
216
Программирование с использованием макросов
ЩпШ
Ы Microsoft Access File
Edit
View
Insert
Run
Tools
Window •"*
* МасгоЗ : Macro Action OpenQuery
5
Help %
-
DO •
шш g
Comment
: опрос на создание таблицы Ciat =-,heet ~ Edit-
Opens a select or cro-.sfab query or runs -an action query The query can be opened in Datasheet
Рис 10 5
Как и раньше, откройте окно конструктора макросов, а затем активизируйте оп цию Open Query (Открыть запрос) Этот этап работы показан на рис. 10.5. Как видите, у макрокоманды Open Query уже другой список аргументов (Action Arguments), каждый из которых имеет свои значения: a
Query Name (Имя запроса) - имена запросов, которые вы хотите включить в создаваемый макрос;
• View (Просмотр)' - Datasheet (Таблица); - Design (Конструктор); - Print Preview (Предварительный просмотр при печати); a Data Mode (Режим): - Add (Добавить); - Edit (Редактировать); - Read Only (Только для чтения). Выбранные значения показаны на рис. 10.5. Теперь добавьте к создаваемому макросу второй запрос (см. рис 10 6): в следу ющую строку столбца Action (Макрокоманда) точно так же, как и в первом слу чае, введите макрокоманду Open Query. Все дальнейшие действия полностью
217
Резюме
ЩЩ]
Ы Microsoft: Access J File Edit View
Insert Run Tools Window
Help
_|n|x|
* Macro4 : Macro
•
Action Opf-nQu^ry OpcnQuny
|
4 J
Comment
d Action Arguments lanooc на добавление запиг
d
Г SHei t the nanie oh the quer/t: open The Int chows all querir"; in the current
J
'
Рис 10 6
повторяются, изменяется лишь имя второго запроса - теперь это Запрос на добавление записей В сущности, задача решена, осталось только присвоить новому макросу имя. Назовите его Запрос на объединенную выборку. Если вы запустите этот запрос на выполнение, то Access 2000 по ходу процесса выдаст все информационные со общения и расскажет о том, что из первой таблицы будет добавлено 8 записей, а из второй - 9 Наиболее важным сообщением является предложение удалить таблицу Выборка1. макрос создает ее заново и не хочет делить эту заслугу ни с кем. Впрочем, если у вас не поднимется рука удалить указанную таблицу, сис тема осуществит данное действие сама Когда новый макрос выполнится, в резуль тате вы получите в точности такую же таблицу Выборка1, как та, что показана на рис 9 42.
Резюме 1. Макросы могут использоваться для выполнения довольно широкого диапа зона операций. Например, макросы позволяют: - открывать отчет для просмотра или печати; - переходить от одного элемента управления (записи, поля) к другому; - указывать свойства объекта; - выполнять разнообразные команды и т.д.
218
Прогроммировоние с использованием макросов
2. В рамках настоящей главы макросы наиболее часто применяются для обра ботки событий. Событие - это любое действие пользователя: щелчок кноп кой мыши, открытие формы и т.д. Событие может также инициироваться ка ким-либо оператором. 3. Каждая отдельная операция (допустим, переход от одного элемента управ ления к другому) может повлечь за собой ряд событий, возникающих в опреде ленной последовательности. Для Access 2000 такие последовательности со бытий для разных ситуаций четко определены и подробно рассматриваются в главе. Их очень важно знать, поскольку от порядка событий зависят усло вия и очередность выполнения макросов и процедур обработки событий. 4. В главе были рассмотрены конкретные примеры использования макросов при обработке событий. Диапазон возможностей макросов в данном случае очень широк: от вспомогательных операций, расширяющих удобства для пользователя (например, автоматический перевод курсора в новое поле при вводе данных) до серьезных функциональных задач (например, формирова ние запроса на создание сложной выборки из базы данных, включающей записи с различной структурой и составом данных).
Глава X I Программирование с помощью процедур VBA • • •
Основные положения VBA Программирование приложений с помощью VBA Предупреждение дублирования записей при их вводе из формы • Установка на последнюю запись при открытии формы • Удаление записи с установкой на последнюю запись Как уже говорилось, VBA - это объектно-ориентированный язык программи рования. В свое время он был разработан специально для записи макросов в приложениях в Microsoft Excel 5.0. Затем он начал использоваться и други ми приложениями Microsoft Office, в частности, Access. Сейчас VBA стал стан дартным языком макропрограммирования, что очень полезно, так как облегча ет взаимодействие различных приложений. VBA позволяет записать не только последовательные действия, выполняемые пользователем, но и все необходимые для языка программирования высокого уровня элементы, включая разнообраз ные средства организации ветвлений, циклов и ведения диалога с пользовате лем. Кроме того, VBA - это язык, управляемый событиями, поэтому с его помо щью можно установить требуемую реакцию объекта на определенное событие.
Основные положения VBA Начнем эту главу с краткого обзора основных положений VBA.
29П
Программирование с помощью процедур VBA
Базовь*ь,е термины R гяч1ле д " Р а с с м о т Р и м наиболее важные термины VBA Они приведены в табл. 11.1 Таблица < т Термин
Определение ^ ,
М A I IMo о' 1о 1У пь 1
Контейнер для процедур и функций
г.
Семейство процедур и функций, принадлежащих форме или отчету
I *ц ule
п1 п асса) (Модуль кла»1' ' <. , , (fnodule .г. ^иый модуль] (Стандартна 1 ' ' р I (Процедура) ( ^ <• , redu^ure
,
Модуль, главные процедуры которого доступны для приложения в цепом Последовательность инструкций, выполняемая как целое Процедура, выполняющая определенную задачу
(Процедура & S u b ' р ,. 1ф .Оункция)
Процедура, возвращающая определенное значение
F f oroce»^ec'ure (Процедура £3 обработки событий)
Процедура, вызывающая реакцию объекта на определенное событие
У с,
К Аг
,t
j ii,
^>етод)
Процедура, выполняемая над определенным типом обьекта
, irQ Оператор)
rci / « ' г ^ 1 - л ю ч е в о е спово) А
г
t /л/" 'Р У
мент
)
Комбинация инструкций с ключевыми словами, символами, констан тами и переменными Одиночная строка или строки, объединенные символами продолжения строки (пробел и знак подчеркивания) Слово, имеющее определенное значение для компилятора VBA Дополнительная информация, передаваемая функции или процедуре Sub Называется также параметром
0£ ъ е к ^;тно-ориентированный язык VBA базируется на трех основных компо нентах- о 0 ° ^ ъ е к т ы ' события vi методы. Объек*-™' к а к У ж е неоднократно говорилось выше, представляют собой элемен ты в х о д я * я щ и е в с о с т а в приложений: таблицы, формы и их элементы управления, отчеты з 5 0 а п Р о с ы и т д - События подробно рассматривались в предыдущей главе. ПоследЗ-Д ним компонентом являются методы. Для каждого объекта определен на бор метогЗ- дов ' к 0 Т 0 Р ы е могут быть к нему применены. Метод представляет собой действие <"' например GoToRecord (Перейти на запись), Apply Filter (Применить Фильтр) • O p e n F " o r m (Открыть форму). Такие действия указываются в установках свойств с «-обытия объекта. Если пользователь не определил свойство события для объекта Ы н е с в я з а л е г о с каким-либо действием), то объект отвечает на событие дей ствием 3 ^ а д а н н ь ш д л я е г о т и п а п о умолчанию. Например, если текстовое окно по лучает фс^-^У 0 и н е о п Р е Д е л е но свойство события OnGotFocus (Получение фокуса), то BCTpoei*HHbI" м е т °Д может изменить цвет этого окна. Если вы установили свой ство собь^° 1ТНЯ объекта для макроса или процедуры обработки события, то Access сначала о обрабатывает встроенный режим, а затем выполняет заданный вами мак рос или п *Р°ЦедУРУ- Например, вы щелкаете по командной кнопке, которая активи зирует вт*'°РУ ю стРаН11ЦУ формы. Отображается щелчок по кнопке - кнопка на эк ране на м^ гновение «утапливается» (поведение по умолчанию), затем выполняется переход к ^ следующей странице формы.
221
Основные положения VBA
Окно модуля Программа VBA создается, редактируется и отображается в окне модуля. Такое окно для класса, связанного с формой или отчетом, можно открыть либо из окна базы данных, когда объект закрыт, либо из окна объекта в режиме конструктора. Чтобы открыть окно модуля, надо выполнить одно из перечисленных действий: 1. В окне базы данных выберите имя формы или отчета на соответствующих вкладках Forms (Формы) или Reports (Отчеты). 2. Выберите позицию Программа в меню View (Вид) или щелкните по кнопке Code (Программа) ^ 1 на панели инструментов. На экране появится окно модуля VBA (рис. 11.1), разделенное на две области. l-lnjxl
| £ i Microsoft Visual Basic - dbl I File Edit View Insert Debug Run Tools Add-Ins Window Help
|И А - И Properties
Фирмы
[фирмы Роггп_Фирмы
^ PM х\ _2J
ю
-
• и шШ
1 К dbl - Form_0HpMbi (Code) JForm
-|Q|x| -J
Option В Event AfterDelCarihi i After Insert AfterUpdate BeforeDelConfi Befurelnsert —' BeforeUpdate KeyPreview False OnActivate OnApplyFilter OnClick OnClose [Event Prore< OnCurrent OnDblClick ,
»
Ы@ЪР (3
d
jciose
-
Explicit
P r i v a t e Sub Form C l o s e ( ) On E r r o r GoTo E r r Form Clc з е DoCmd. RunMacro "Макрос 3 9 " DoCmd.RunMacro "Макрос 4 0 " E x i t Form C l o s e : E x i t Sub E r r Form C l o s e : ИздВох E r r . D e 3 c r i p t . i o r Resume E x i t Form C l o s e End Sub|
Ыi«1
i
|
d iD
Рис 111
Левая область - окно свойств. В верхнем поле этой области показано, свойства какого элемента программы здесь представлены. Если вы выходили в окно моду ля непосредственно из окна базы данных, то будут представлены свойства формы или отчета в целом. Если вы попали в окно модуля из конструктора форм или отче тов, будут представлены свойства того элемента управления, который был акти визирован перед переходом в окно модуля. Щелкнув по стрелке прокрутки спра ва от этого поля, вы легко можете перейти в любой элемент управления, и в левой области появятся его свойства. Свойства могут быть отсортированы в алфавит ном порядке - вкладка Alphabetic (Алфавитный) - или разбиты по разделам вкладка Categorized (Категории): Date (Данные), Event (Событие), Format (Со бытие), Other (Другие). С таким способом отображения информации вы уже встре чались при работе с конструкторами (см., например, рис. 10.2). Разделы, содержащие
222
Программировоние с помощью процедур VBA
свойства, могут сворачиваться или раскрываться с помощью значков плюса (+) и минуса ( - ) , расположенных слева от названия раздела. Кроме того, в левой области вы можете соотнести какое-либо свойство с мак росом или процедурой обработки событий. Но поскольку здесь отсутствует поло са прокрутки и нельзя использовать списки, имена макросов и процедур надо вно сить с клавиатуры, что неудобно. В окне правой области отображается полный текст программы, связанной как с активным элементом управления, так и выбранным свойством. Конкретное зна чение этой пары задается в верхних полях области - в левом верхнем поле вы можете указать элемент управления, в правом - свойство. Тогда в нижнем окне правой области появится текст процедуры, определенной данным сочетанием Если такая программа отсутствует, то отображаются две строки - открывающая процедуру Private Sub с аргументами и закрывающая End Sub. Для перемещения между процедурами модуля используются также сочетания клавиш Ctrl+PgUp (для перехода к следующей процедуре), Ctrl+PgDn (для пе рехода к предыдущей). В окне модуля предусмотрена удобная возможность быстрого перехода к дру гому модулю класса, то есть к процедурам, относящимся к другой форме или от чету. Щелкните по кнопке Project Explorer %|| на панели инструментов. Окно модуля изменится (см. рис. 11.2) - в левой области появится новое окно Project и три кнопки. Правая, нажатая по умолчанию, выводит перечень объектов базы данных: форм, отчетов, модулей класса. Выберите здесь, например, форму Страны. Если теперь щелкнуть по средней кнопке, то в основном окне правой области появится эта форма в режиме конструк тора (на рисунке не показано). Щелчок по левой кнопке выведет на экран модуль г
МЫ
л Microsoft Visual Basic - dbl
| File Edit View Inser t Debug Ri in Tools Add-Ins
Q
9i dbl - Form Страны (Code)
EH Form_KOHTpont>HO M3f_±]
ICipaHd
Pal Form_MeneA>Kep Ffl Form_npM6opbi Form_TMnbi Приборпе
ED Form_
ReportjDMpMbi
Г~! Modules 1
~ Class Modules
Properties
С тралы
С т р а н ы Рогт_Страны
*J J
""^j
JAfterUpdate
IrJRl J
P r i v a t e Sub C T p a H a _ A f t e r U p d a t e ( ) j On E r r o r GoTo Е г г _ С т р а н а _ А г t e r U p d a t e _ C l i c k Dim Cod As I n t e g e r Dim a n s w e r As I n t e g e r answer = D C o u n t ( " [ С т р а н а ] " , "Страны", If answer = 1 Then MsgBox P r o m p t : ' " З н а ч е н и е уже с о д е р ж и т е — ' DoCmd.RunKacro " Н а к р о с 2 7 " Else DoCrnd.RunMacro " Н а к р о с 2 " DoCmd.RunKacro " Н а к р о с 1 " MsgBox P r o m p t : ' " З а п и с ь в в е д е н а " »J
ED Рогт_Назмйчение
Щ
Help
«3 dbl - Fomi_HpMbi (Code)
Project-A3
Й@
Window
№ Рис 112
Основные положения VBA
223
класса, относящийся к форме Страны, что показано на рис. 11.2. Эта возможность очень полезна при написании и отладке программ, когда бывает необходимо про смотреть текст похожей процедуры, созданной для другого объекта базы данных. Модули могут содержать описания, процедуры обработки событий, процедуры Sub (субпроцедуры) и функции. При организации новой формы Access 2000 создает для него модуль класса и помещает его в конструктор При добавлении процедуры обработки события в форму или отчет она автоматически помещается в модуль класса. Если вы ко пируете форму или отчет в другую базу данных, модуль класса копируется вме сте с ней. Удаление формы или отчета приводит также к удалению соответствую щего модуля.
Основные элементы Прежде чем обсуждать реальные примеры программирования на основе VBA, рас смотрим вкратце его основные элементы: а переменные; а константы; • аргументы; Q процедуры VBA и их элементы; • инструменты, управляющие выполнением программы.
Переменные Переменные - это именованные области памяти, которые используются для вре менного хранения результатов. Переменные сходны с полями, но свойственны только VBA. Наборы записей, например, таблицы, их не содержат. Перед вклю чением в процедуру переменные должны быть описаны или объявлены. Описа ние переменной состоит в присвоении ей имени и, возможно, типа - символь ная, логическая и др. Область действия переменной может быть ограничена одной процедурой, в которой она была описана, определенным модулем с не сколькими процедурами или приложением в целом. Значение переменная полу чает при описании. Если это значение не указано явно, то устанавливается за данное по умолчанию. Возможны два способа описания переменной: неявный и явный. Для неявного определения переменной достаточно использовать имя переменной в процедуре, не задавая его специально. Явное описание переменной означает присвоение ее имени и определение ее типа до первого оператора в программе. Чаще всего пере менные описываются с помощью инструкции Dim
Константы Константами называются именованные значения, которые не изменяются в ходе ныполнения модуля или процедуры, где они определены. Установка и изменение шачсний констант производится только однажды - при их описании. Константа может представлять численное или символьное значение или указывать на другую константу. Выражение, содержащее комбинацию арифметических или логических
224
Программирование с помощью процедур VBA
операторов, также рассматривается как константа. После определения константы ее разрешено использовать в любом месте в границах области определения. Access поддерживает два типа констант: символьные и внутренние. Символь ные константы (или константы, определяемые пользователем) определяются в модуле или процедуре с помощью оператора Const и сохраняют свое значе ние в ходе их выполнения. Внутренние константы (или константы, создаваемые системой) могут быть использованы в любом месте во всех модулях. Область действия символьной константы определена местом ее описания. Если константа объявлена в процедуре, она будет доступна внутри этой процедуры, если в модуле, то, соответственно, доступ к ней разрешен во всем модуле. Кон станты, описанные в модуле, считаются личными (Private). Исключением из дан ного правила являются константы, специально объявленные как общие (Public). В этом случае они доступны для любого модуля во всем приложении. Как прави ло, рекомендуется для всех определяемых пользователем констант указывать тип Private, чтобы не возникало возможных недоразумений, если в другом модули встретится константа с таким же именем. Кроме того, следует явно описывать тип Private в модуле. Рекомендуется также имя символьной константы начинать с обозначения con, например, conKoeff, чтобы указать, что речь идет о константе. причем символьной. Внутренние константы всегда доступны пользователю. Они поставляются вме сте с Access 2000. Но кроме них можно использовать и другие, например, из биб лиотеки VBA. Все константы (и не только константы) доступны в диалоговом окне Object Browser (Просмотр объектов), которое будет рассмотрено ниже. Имена внутренних констант имеют приставку из двух букв, указывающую на их принадлежность к той или иной библиотеке. Так, константы Access 2000 начина ются с букв ас (например, acColorlndexBlue - константа, устанавливающая голубон цвет), константы из библиотеки VBA - с букв vb (например, vbNullString, устанав ливающая нулевую строку).
Аргументы Аргументы - это биты информации, которые используются процедурой или ме тодом в ходе выполнения. Они могут быть обязательными или необязательными Чтобы передать аргументы процедуре, надо указать их в определении процедуры сразу после ее имени. Например, процедура Название_фирмы_Кеуир требует указания двух аргументов: KeyCode и Shift, которые описываются как одно целое. Private Sub Название_фирмы_Кеу11р(KeyCode As Integer, S h i f t As Integer)
Для того чтобы выполнить созданную процедуру, надо ее вызвать. При этом аргументы можно задавать как по позиции, так и по имени. В первом случае зна чения аргументов располагаются в том же порядке, что и в определении процеду ры, и разделяются запятыми. Это будет выглядеть следующим образом: Название_фирмы_Кеуир 15,10
или C a l l Название_фирмы_Кеуир (15,10)
Основные положения VBA
00^
При задании аргументов по имени их !,„__,, .,п^.„„ ,,„ е v i „ эядок можно не соблюдать, так как определяется каждый аргумент. Послеимен^-,,.^,,^ „ „ ' р J . . ' РГУментаследуетдвоеточие(:)изнак y ч равенства (=). Аргументы при этом раздел,, _„„„,., u ^ v/ i j i i "• ы запятыми. Ниже показан пример такого задания: ^ ^ Название_фирмы^Кеу11р. Агд2:=10, Агд1:=15
С помощью описателей ByVal и ByRef 7 v(см й „ л 1 о\ юл. 11.J) можно осуществить пере F дачуJ переменных в процедуру пли ф у н к ц м „„ , „„ , F , p JM i .у качестве параметров либо по ссыл ке, либо по значению. Ьсли переменная пе„„ л „ , , „ чается по ссылке, то процедуре или Jy функции будет передан адрес этой перемен- „ „ ^ J v r ^^ и в памяти. Тем самым вызываемая процедура может изменить значение факти „ v JF , ^ ского параметра, если она произве дет какие-либо действия над параметром. , „ ^ v v ш же фактический параметрl пере y дается по значению, то процедура или Hфун„„ „ „ JK J . ' ия получают в качестве аргумента v J только фиксированное значение этого паг, „ 4 ' тетра, но не саму переменную, ис J пользуемую для его изменения. ' ' Способ передачи параметров процедуре i . ~ ' пи\ функции определяется при описа нии ее аргументов. Описатель ByVal задает пс,_„ „ „ , г ' Дачу по значению, a ByRef-по ссыл с ке. Ьсли явное Jуказание спосооа передачи и )аметра отсутствует, то по Jумолча нию подразумевается передача по ссылке. " Поясним сказанное на примере. Допусти?., 1 f ^ J [меются следующие описания двух процедур: "• J Sub Main() а = 10 b = 20 с = 30 C a l l Example1(a, b, с) Call MsgBox(a) Call MsgBox(b)
Call MsgBox(c) End Sub Sub Example1(x, ByVal y, ByRef z)
x=x+ 1 у =у +1 z = z +1 Call MsgBox(x) Call MsgBox(y) Call MsgBox(z) End Sub
Вспомогательная процедура Examplel испольэ , , r y Jy в качестве формальных аргумен тов три переменные, описанные по-разному.; „ ее в т е л е эт .„ , о и процедуры каждый из формальных аргументов увеличивается н; , „„ . ,. п _ кницу, а затем их значения выво дятся на экран с помощью функции MsgBox. Ос, ,„„ а ь, ' , <ная процедура Main устанавлива•* rзначения переменных a, b и с, vпосле чего „„„ v r Jy , , ' Ьтараметров 119 процедуре ' Examplel. При этом пег. м-Дает аргумент „ „ „ ,их „ в качестве передаетсяфактических по ссылке
226
Программирование с помощью процедур VBA
(действует умолчание), второй по значению, а третий снова по ссылке. После воз врата из процедуры Examplel основная процедура также выводит на экран значения трех переменных, передававшихся в качестве аргументов. Всего на экране отобра жается шесть значений: сначала 11, 21 и 31 (все полученные значения увеличены на 1 и выводятся процедурой Examplel); затем 11, 20 и 31 (эти значения выводятся процедурой Main: переменные, переданные по ссылке, увеличились, а переменная, переданная по значению - нет).
Типы процедур и их элементы Существует два типа процедур VBA - процедуры Sub и функции. Процедуры Sub выполняют операции, но не возвращают значения и поэтому не могут быть ис пользованы в выражениях. Функции же возвращают значения и не имеют огра ничений по применению. Процедуры содержат описания, инструкции и выражения. Описания явно устанавливают тип переменных и констант в процедуре или модуле. Раздел опи саний должен находиться в начале процедуры. Инструкция (оператор) выполня ет определенную конкретную операцию, описание или определение. Инструкции обычно помещаются по одной на строке. Если же в строке размещается несколько инструкций, они разделяются двоеточием (:). Например: cod = 1 answer = 4
Если инструкция на одной строке не помещается, она может быть продолжена на следующей. В таком случае в начале второй строки ставятся символы пробела и подчеркивания. Выражения приравнивают значения объекта слева от знака равенства значе нию, полученному из элементов справа. При указании имен процедур, констант, переменных и аргументов VBA реко мендуется использовать стандартные правила Access: • первый символ должен быть буквой; • имя может содержать буквы, цифры и символ подчеркивания, но знаки пре пинания не допускаются; • имя может содержать не более 255 знаков; • не следует использовать одинаковые имена для функций VBA, методов или инструкций; • не следует использовать одно имя дважды в одной процедуре.
Процедуры Sub Процедура Sub содержит одну или более определенных операций. Можно ис пользовать процедуру Sub для автоматизации повторно выполняемых задач: на пример, назначить одну из процедур элементу меню, так чтобы запускать ее именно оттуда. Процедуры Sub полезны для операций, выполняемых при щелчке по кнопке, име ющейся в форме, или получении фокуса определенным элементом управления.
227
Основные положения VBA
Инструкция Sub определяет имя процедуры, аргументы и операторы програм мы и имеет следующий синтаксис: [Private|Public] [StaticjSub name [ (arglist)
]
[инструкции]
[Exit Sub] [инструкции] End Sub
Это синтаксическое определение является стандартным. Жирным шрифтом выделены слова, которые должны вводиться в точном соответствии с примером. Слова, набранные курсивом - это имена, определяемые пользователем. Слова, стоящие в квадратных скобках, являются необязательными. Ключевые слова, раз деленные вертикальной чертой (|), представляют собой взаимоисключающие па раметры, поэтому можно использовать лишь одно из двух - либо Private, либо Public. Если в процедуру Sub включается список аргументов (arglist), то он должен быть заключен в скобки, а аргументы разделены запятыми. Если в определении указано два или более ключевых слов, разделенных верти кальными чертами и при этом заключенных в фигурные скобки, то одно из них должно быть введено обязательно, иначе будет выбран параметр по умолчанию. Ключевое слово Sub описывает процедуру по имени. Все инструкции, которые находятся между строками Sub и End Sub, выполняются при запуске процедуры.
Функции Процедура Function генерирует значение и возвращает его в приложение. Воз вращаемое значение имеет то же имя, что и функция, и может быть использова но в любом месте выражения. Синтаксис инструкции Function выглядит следую щим образом: [Private | Public] [Static]Function имя
[ ( a r g l i s t ) ] [As тип]
[инструкции] [имя = выражение]
[Exit Function] [инструкции] [имя = выражение] End Function
Значение, которое возвращает функция, присваивается ее имени. Если функ ция не присваивает значения, то она возвращает значение по умолчанию: 0 в слу чае числовой функции, строку нулевой длины в случае строковой функции или Empty в случае функции Variant. Чтобы использовать значение, возвращаемое функцией, надо поместить ее имя справа от знака равенства в другой процедуре.
Элементы процедур Оба типа процедур совместно используют одни и те же элементы синтаксиса, ко торые поясняются в табл. 11.2. 8*
230
Программирование с помощью процедур VBA
объекта (например, на рисунке выбрана функция - Date Serial) нижней части окна показан соответствующий ему синтаксис и повторены (другим цветом) на звание библиотеки и имя класса. Если вы щелкнете по выделенному цветом име ни библиотеки, то оно сменится ее адресом (путем). Выбранный объект можно перенести непосредственно в текст программы: скопировать его имя в буфер и от туда вставить в нужное место текста. Однако помните, что при этой операции пе реносится только имя объекта без аргументов - их придется вводить вручную.
Управление выполнением программы Наряду с рассмотренными выше элементами важным компонентом VBA являют ся элементы управления выполнением программы. Кроме операторов, которые вызывают подпрограммы или функции, таких основных элементов четыре: • выход из программы или временная остановка ее выполнения; • переход к другой части программы; Q организация циклов; • выбор действий, которые должны производиться дальше. В табл. 11.4 указаны ключевые операторы, которые позволяют управлять вы полнением программы. Все они имеют определенный стандартный синтаксис. Вот несколько примеров. 1. Синтаксис инструкции On ... GoSub: On expression GoSub
Здесь expression - целое или округленное до целого число в диапазоне от 0 до 255, a destinationlist - список номеров строк, или меток. Каждая из них соответствует значению, принимаемому выражением. 2. Синтаксис инструкции Do ... Loop: Do [ (While|Until) condition] [инструкции"!] [Exit Do] [инструкции] Loop
Здесь condition - условие цикла; инструкции1 - операторы, которые много кратно выполняются до тех пор, пока истинно условие цикла; инструкции операторы, выполняющиеся, если условие цикла ложно. 3. Синтаксис инструкции If...Then...Else: If [условия] Then [условные операторы] [Else операторы else] End I f
Для выполнения этой инструкции необходимо наличие хотя бы одного усло вия. Если условия истинны, выполняются условные операторы; в противном случае - операторы else. Инструкция должна заканчиваться строкой End If.
Программирование приложений с помощью VBA Таблица
231
1 1.4
Ключевой о п е р а т о р
Описание
Команды, закрывающие программу или приостанавливающие ее выполнение Exit
Выход из блока программы (Do.. Loop, For. Next, Sub, функция, процедура). Определяет лишь переход к концу блока, но не конец программы
End
Завершает процедуру или блок программы Закрывает файлы и освобождает переменные
Slop
Приостанавливает выполнение. Ничего не закрывает
Do Events
Функция, переключающая операционную систему на выполнение других событий
Команды, осуществляющие переход к другому набору инструкций GoTo
Осуществляет обязательный переход к строке указанного номера или метке в процедуре
GoSub...Return
Выполняет переход к подпрограмме внутри процедуры и возвращается
On Error
При возникновении ошибки осуществляет переход к программе обработки ошибки Переходит к одному из пунктов в списке в зависимости от значения выражения и затем возвращается к следующему оператору после On...Sub
On.GoSub On ...GoTo
To же, что и O n . G o S u b , но не возвращается к следующему оператору после завершения
Команды, осуществляющие выполнение цикла Do...Loop
Повторяет набор операторов до тех пор, пока условие истинно
For. Next
Повторяет набор операторов указанное число раз
For Each...Next
Повторяет набор операторов для каждого обьекта в выбранном семействе
While...Wend
Повторяет набор операторов, пока указанное условие истинно
With
Выполняет набор операторов для одиночного обьекта
Команды, осуществляющие выбор решения о дальнейших действиях Choose
Функция, выбирающая значение из списка возможностей на основе номера позиции в списке
If...Then...Else
Выполняет ту или иную последовательность операторов в зависимости от истинности условия
Select Case
Выполняет один из нескольких возможных наборов операторов в зависимости от значения определенного выражения
Switch
Функция, которая проверяет список выражений и возвращает значение или выражение, связанное с первым истинным выражением в списке
Программирование приложений с помощью VBA Что может делать пользователь с помощью VBA? Ответ очень прост: все. К сожа лению, ни в одной книге нельзя рассмотреть все вероятные сферы программиро вания, в которых вы найдете применение возможностям VBA. Поэтому ограни чимся тем, что нас непосредственно интересует, - созданием БД. Когда мы формируем новую базу данных, то хотим сделать ее удобной для пользователей. Однако у каждого из них свои взгляды на эти удобства, и нередко сервис базы данных приходится дорабатывать. Примеры, которыми мы будем иллюстрировать использование VBA, взяты именно из этой области.
!32
Программирование с помощью процедур VBA
Практическая логика подсказывает: если какую-то задачу можно решить штатыми средствами Access 2000 (стандартные запросы, макросы), то так и следует оступить. Обращение к VB А оправдано тогда, когда средства, заложенные в Access, ибо не позволяют добиться нужного результата, либо предлагают сложное и грооздкое решение.
1редупреждение дублирования записей >ри их вводе из формы главе 9 мы обсуждали вопрос об очистке базы данных от повторяющихся записей, ггорые попали в таблицы, и выяснили, что этот механизм может работать и в проилактическом режиме, предотвращая попадание дубликатов при вводе записей. А теперь покажем, как решить ту же задачу средствами VBA. Сначала решим, как будет запускаться создаваемая нами программа. Очевид), что проверка на наличие дубликатов должна проводиться не только для опре•ленного поля, но и для комбинации полей. Естественно, тестирование начинася с того момента, когда в проверяемое поле вводится какая-либо информация, тче просто нечего тестировать. Следовательно, надо «привязать» создаваемую юграмму к какому-либо свойству проверяемого поля. Например, возьмем поле азвание фирмы. Откройте его окно свойств, где есть несколько подходящих для щей цели параметров: After Update (После обновления), Key Press (Нажать авишу), On Change (Изменение), On Lost Focus (Потеря фокуса) и др. Выбегге свойство On Lost Focus и щелкните по строке, которая ему соответствует, перь активизируйте кнопку ^ J . В результате откроется окно Choose Builder (Выбрать построитель). В нем вы жете выбрать один из трех вариантов обработки свойства (см. рис. 11.4): • Expression Builder (Построитель выражений); • Macro Builder (Построитель макросов); • Code Builder (Построитель программ). О построителе выражений мы поговорим несколько позже; построитель макросов ) конструктор, уже рассмотренный в предыдущей главе. Наконец, построитель эграмм открывает окно модуля, которое было выведено на рис. 11.2, хотя и соэжало другую информацию. Чтобы начать создание процедуры, выберите именэту третью опцию. Тогда в окне свойств поля Название фирмы установится рем Event Procedure (Процедура обработки событий), как показано на рис. 11.5, ткроется окно модуля (см. рис. 11.6). Оно примечательно следующим. Хотя процедуры еще нет и вы даже не приступили к ее созданию, в этом окне по элчанию уже появляются операторы, обязательные для будущей программы. Это: 3 Private Sub Ha3BaHMe_
1ервый оператор - имя процедуры Sub, которое автоматически присваивается ей эответствии с именем поля и свойством (последние объединяются символом
Предупреждение дублирования записей при их вводе из формы
233
И
Choose Builder Exoression Builder Mact о Builder Code Builder
Cancel
Рис. 11.4 \S Combo Box: Название фирмы Format j
Data
Event
| other
|
All
|
Before Update After Update
МакросЗб
On Change On Not in List On Enter
_._____„_ |
On E> it On Got Focus On Lost Focus On Click On Dbl Click On Mouse Down On Mouse Move On Mouse Up Ont e/Down On Key Up
_ _ _ _ _ _ (Event Procedure] [E'/ent Procedure] [Event Procedure]
-«*»* Рис 11.5
l-la|x|
Microsoft Visual Basic - dbl - [Form Фирмы (Code)] IcUBIe
Edit View Insert Debug Run Tcoli
Propei-ties - Ниванне фнрмыХ| {Название фир СспЬэЬг Alphabetic
На шание_фирмы
Help
*j
LostFocus
~3
Categorized
P r i v a t e Sub Название_фирмы_ЬозсГосиз ()
~3 ^
3]
OfdBr.rder5t y le 1 5crollBarAlign
Add-Ins Window
0
5peci3lEfTect
2
TextAlign
0
Top
623
Visible
True
Width
4560
_J
В Other (Name)
Название Ф
AllowAuroCtirrt True ColumnHidden False ControlTipText Control Type
ГСЕИНИИДИ '
Ш
J 2i
End Sub
S Рис 116
234
Программирование с помощью процедур VBA
подчеркивания). Область действия процедуры (Private) - данный модуль класса (форма Фирмы). Второй оператор, End Sub, закрывает процедуру. Дальше начинается заполнение создаваемой процедуры конкретными опера торами.
Обработка ошибок
выполнения
При программировании приложения необходимо учитывать и возможность воз никновения ошибок, и их вероятные последствия. Ошибки появляются по одной из следующих причин: О во время работы приложения некоторые действия могут войти в противоре чие со стандартами программы. Например, при попытке открыть таблицу, которая была удалена пользователем, возникнет ошибка; • сама программа может содержать логические ошибки, то есть в ней заложе на недопустимая операция - к примеру, деление на нуль. Это приводит к не ожиданным последствиям. Если механизм обработки ошибок не применяется, то при возникновении ошиб ки VBA прервет выполнение программы и выведет сообщение об ошибке, ие опре деляя ее типа. Такой результат работы для нас неприемлем. Поэтому следует включать в программу процедуры обработки для всех ошибок. Добавляя процедуру обработки, следует учитывать способ передачи управле ния процедуре при возникновении ошибки. Первое, что надо сделать для зада ния маршрута передачи управления, - это подключить обработчик ошибок пу тем включения некоторой формы инструкции On Error в процедуру. Инструкция On Error передает управление процедуре обработки события данной ошибки. Если подключен обработчик, то при возникновении ошибки в процедуре VBA не выводит обычного сообщения. Вместо этого управление передается в обработ чик (если он присутствует), который сразу же активизируется. В активном обра ботчике ошибок может определяться тип ошибки и осуществляться произволь ная обработка. Обработчик ошибок определяет, какие действия будут выполняться при воз никновении ошибки в процедуре. Например, может быть завершено выполнение процедуры или исправлены условия и произведен повторный запуск. Инструк ции On Error и Resume определяют способ передачи управления при возникновении ошибки.
Инструкция On Error Инструкция On Error служит для подключения и отключения процедуры обработ ки ошибок. Если такая процедура подключена, то при возникновении ошибки ей передается управление. Есть три формы инструкции On Error: • On Error GoTo метка; • On Error GoTo 0; • On Error Resume Next.
Предупреждение дублирования записей при их вводе из формы
235
Первая форма подключает процедуру обработки ошибок начиная с той строки, на которой находится. Поэтому подключить обработчик следует перед первой строкой, которая может содержать ошибку. Активный обработчик при возникно вении ошибки передаст управление строке, которая задана после слова метка. Строка, указанная в качестве аргумента метка, и будет первой строкой проце дуры обработки ошибок. Например, приведенная ниже инструкция определяет, что при возникновении ошибки управление передается процедуре под названием Егг_Название_фирмы_Lost Focus _Click: On Error GoTo Err_Ha3eaHne_0npMH_LostFocus_Click
При этом сама процедура Err_Ha3BaHne_0MpMU_LostFocus_Click может размещаться где угодно (но обычно в конце процедуры), важно, чтобы строка, определяющая вариант процедуры обработки ошибок, была введена перед началом процедуры, так как ошибки могут возникнуть только в ее операторах. Инструкция On Error GoTo 0 отключает обработку ошибок внутри процедуры. Даже если строка с номером 0 существует, она не запустит программу обработки ошибок. Если инструкции On Error GoTo 0 в процедуре нет, то обработка ошибок отключается автоматически, как только программа завершится. Если вы выбираете форму On Error Resume Next, то строка, вызвавшая ошибку, про пускается, и управление передается следующей строке. Выполнение программы не прерывается. Удобство этой инструкции состоит в том, что она позволяет прове рять свойства объекта Err сразу за строкой, в которой ожидается возникновение ошибки, а также устранять ошибки внутри самой процедуры, без помощи обработ чика. Из трех перечисленных форм инструкции On Error целесообразно выбрать пер вую - On Error GoTo метка - и вставить ее в текст процедуры непосредственно после оператора с названием процедуры. Синтаксис самой процедуры стандартен: Err_Ha3BaHHe_((MpMbi_LostFocus_Click. MsgBox Err. Description
Последний оператор позволяет вывести сообщение об ошибке с указанием ее типа и обычно задается в конце текста основной процедуры.
Инструкция Resume Инструкция Resume возвращает управление из обработчика ошибок в процедуру. Эту инструкцию следует включать в обработчик, если необходимо передать управление в определенную строку процедуры (см. ниже). Однако инструкция Resume не является обязательной: если она отсутствует, то процедура может завер шиться, когда обработчик выполнит свои функции. Есть три формы инструкции Resume: •
Resume или Resume 0 - возвращает управление строке, при выполнении кото рой произошла ошибка; Q Resume Next - возвращает управление той строке, которая непосредственно следует за строкой, вызвавшей ошибку; • Resume метка - передает управление строке, которая задана в качестве значе ния аргумента метка. Он указывает номер строки или метку.
236
Программирование с помощью процедур VBA
Инструкции Resume и Resume 0 обычно применяются, когда пользователю необ ходимо внести исправления. Например, система запросила имя таблицы для от крытия, а вы ввели название несуществующего объекта. В таком случае запрос можно повторить и продолжить выполнение программы с инструкции, вызвав шей ошибку, внеся исправления. Инструкция Resume Next используется для обработки ошибок внутри самого об работчика. При этом команда, которая вызвала ошибку, больше не будет выпол няться, когда управление вернется в процедуру. Наконец, для передачи управления в другую строку процедуры применяется последняя форма инструкции - Resume метка. Например, управление может пере даваться процедуре выхода, описанной в следующем разделе. Обычно использу ется именно этот вид инструкции Resume, если нет каких-либо особых требований: Resume Exit_Ha3BaHMe_HpMbi_LostFocus_Click
Выход из процедуры Включая в создаваемую программу процедуру обработки ошибок, необходимо предусмотреть такой путь выхода из нее, чтобы впоследствии обработчик активи зировался только при возникновении ошибки. Процедура выхода отмечается мет кой строки точно так же, как и процедура обработки ошибок. Если ошибки не произойдет, то после выполнения программы запустится процедура выхода. Если же ошибка случится, то сначала выполнится обработчик ошибок, а затем управ ление будет передано в процедуру выхода. Она содержит инструкцию Exit: Exit_Ha3BaHne_<jMpMbi_LostFocus_Click
Итоговый синтаксис программы обработки ошибок выведен в окне модуля (см. рис. 11.7). Ш Microsoft Visual Basic - dbl - |Form_npMbi (Code)] Й 1 File Edit View
Properties
Insert Debug Run Tools
Назвакке фир|Х|
Add-Ins
Window
3
(Название фирмы
Название ф* Combcbox _^J IAlphabetic
[Help
Privace Sub Название_фирмы_1.озсЕосиз () On Error: GoTo Err Название фирмы LoscFocus Click
Categorized I
M3 Sjjcj'
n1
A
OldBorderSty 1 ScrallBar Align 0 SpecialEffect 2 TextAlign 0 Top 623
Visible True Width 4560 S Other (Name) Название <\ AHowAutoCot True ColumnHiddei False ControlTipTe ControlType 111 Щ Э Е Е Е Название.
J
_l
Егг_Название_фирмы_Ьозг.Госиз_С11ск;: MsgBox Err.Description Resume Ех1С_Название_фирмы_Ьозг:Госиз_С11ск End Sub
^
1\Г№
Рис 117
Предупреждение дублирования записей при их вводе из формы
237
Теперь перейдем к созданию самой программы с помощью VBA - как вы по мните, такова была наша изначальная цель.
Функция создаваемой
программы
Прежде всего зададимся вопросом, зачем нужна создаваемая процедура. Когда мы включаем новую запись в форму Фирмы, то должны проверить, не дублирует ли содержимое поля Название фирмы те одноименные поля, которые уже введены в форму в предшествующих записях. Тестирование заключается в следующем. Для каждой новой вводимой записи подсчитывается количество совпадений поля Название фирмы с таким же полем для уже введенных записей. Если это число равно 1, то программа извещает пользователя о наличии дублика та, обнуляет поля текущей записи и ждет ввода очередной. Если количество со впадений равно 0, то процедура: 1. Вводит значение в базу данных. 2. Сообщает об этом пользователю. 3. Устанавливает следующее значение кода фирмы (в поле Код фирмы преду смотрена последовательная нумерация). 4. Переходит к новой записи. 5. Активизирует поле Название фирмы. Теперь форма готова к вводу новой записи. Если процедура, которая построена описанным выше образом, будет запущена одновременно с вводом первой запи си, то число совпадений может равняться либо нулю, либо единице; других вари антов нет.
Программная реализация Для работы процедуры нужны две переменные. Одна будет указывать на количе ство совпадений (дублирующихся записей), другая - сохранять код текущей за писи. Назовите их answer и Cod соответственно. Первое, что вы должны сделать, определить обе переменные как целые числа. Используйте для этого операторы: Dim Cod As Integer Dim answer As Integer
Теперь определите выражение, которое формирует количественное значение переменной answer. Выражение будет иметь такую структуру: answer = DCount( [Название фирмы] , Forms1 [Фирмы]1[Название фирмы] )
Фирмы , ' [Название фирмы] =
Здесь необходимы пояснения.
Функция DCount Функция DCount возвращает число записей в заданном наборе (подмножестве) за писей. Ее синтаксис таков: 0Со1М(выражение, набор[, условие])
Здесь: О выражение - определяет поле, для которого производится подсчет значений. Данный аргумент может задаваться строковым выражением, определяющим
238
Программирование с помощью процедур VBA
поле в таблице или запросе, или представлять выражение, задающее вы полнение вычислений над данными, содержащимися в поле. Допускает ся использовать в аргументе выражение имя поля в таблице или элемента управления в форме, константы, а также имя встроенной или определяемой пользователем функции. Не допускается в аргументе выражение других статис тических функций по подмножеству или статистических функций SQL; Q набор - строковое выражение, которое определяет набор записей, образую щих подмножество. Может представлять имя таблицы или запроса; • условие - необязательное строковое выражение, ограничивающее диапазон данных, для которых подсчитывается число значений. Например, аргумент условие часто является эквивалентом предложения WHERE инструкции SQL, но без ключевого слова WHERE. Если аргумент условие опущен, DCount выпол няет расчеты над полем, заданным в аргументе выражение, для всего набора записей. Любое поле, указанное в аргументе условие, должно принадлежать подмножеству, заданному аргументом набор; в противном случае функция DCount возвращает значение Null. С помощью функции DCount подсчитывается количество записей в подмно жестве, когда не требуется использовать конкретные значения. Хотя в аргумен те выражение можно указать любые расчеты, DCount всегда возвращает число за писей. В нашем случае выражение - это имя поля "[Название фирмы]". (Вспомним: когда в тексте строки есть пробелы, она заключается в квадратные скобки. Кавычка ми полагается обрамлять текстовую строку.) Значением аргумента набор явля ется форма Фирмы, а аргумента условие - "[Название фирмы] = Forms! [Фирмы]! [Название фирмы]". Последнее означает, что здесь сравнивается содержимое поля текущей за писи с содержимым поля открытой формы (в правой части выражения Forms класс форм, [Фирмы] - имя какой-либо фирмы из этого класса, [Название фирмы] конкретное поле формы). Восклицательные знаки указывают на то, что следую щие за ними элементы определяются пользователем. В данном случае речь идет о ссылке на открытую форму и на поле в ней.
Логическая конструкция If... Then... Else Так как функция Dcount возвращает значение переменной answer (0 или 1), то и ло гическая проверка проводится относительно этой переменной. Утверждение, подлежащее тестированию, - это answer = 1. Если оно верно (дубликат действи тельно обнаружен), то логическое выражение принимает значение True (Истина). Затем сразу после проверяемого утверждения выполняется ряд операторов: 1. Исполняется команда MsgBox Prompt, и в результате на экране появляется со общение «Значение уже содержится в файле и повторно не вводится». 2. Запускается макрос, который стирает значения всех полей текущей записи, кроме поля Код фирмы: в нем сохраняется текущее значение кода. Макрос имеет рабочий номер 32. (В выборе этой цифры нет какого-либо специаль ного умысла, и макрос можно назвать как угодно.) Чтобы запустить его из программы VBA, задайте команду DoCmd.RunMacro Макрос32 '.
Предупреждение дублирования записей при их вводе из формы
239
Если проверяемое утверждение неверно (answer не равно 1), значит, дубликат не обнаружен. Логическое выражение принимает значение False (Ложь), и после инструкции Else выполняется ряд операторов: 1. Запускается макрос, запоминающий запись (макрос2); 2. Запускается макрос, реализующий переход к повой записи (макрос 1). В обоих случаях аналогично предыдущему используется команда макрос1 DoCmd RunMacro "Макрос№"; 3. С помощью команды MsgBox Prompt выдается сообщение «Запись введена». 4. Вычисляется повое значение кода записи. Оно равно максимальному значе нию, увеличенному на единицу. Для вычисления используется функция Dmax (), которая возвращает максимальное значение кода в указанном набо ре (подмножестве) записей. Вот ее синтаксис: DMax(выражение, набор[, условие])
Здесь: - выражение - выражение, определяющее нужное поле. Данный аргумент мо жет задаваться строковым выражением, определяющим поле в таблице или запросе, или представлять выражение, которое задает выполнение вычисле ний над данными, содержащимися в поле. Допускается использовать в ар гументе выражение имя поля в таблице или элемента управления в форме, кон станты, а также имя встроенной или определяемой пользователем функции; - набор - строковое выражение, определяющее набор записей, образующих подмножество. Может содержать имя таблицы или запроса; - условие - необязательное строковое выражение, ограничивающее диапазон данных, для которых определяется минимальное или максимальное значение поля. Если аргумент условие опущен, DMax выполнит действия над полем, за данным в аргументе выражение, для всего набора записей. Любое поле, указан ное в аргументе условие, должно принадлежать подмножеству, заданному ар гументом набор; в противном случае функция DMax возвращает значение Null. В данном случае значение набора (например, имя таблицы) в аргументах не указывается, так как речь идет о поле, еще не включенном в базу дан ных. Но прямые кавычки, которые обрамляют пустую строку, все равно должны присутствовать. 5. Значение вычисленного кода присваивается полю Код фирмы новой запи си. В этой инструкции также необходимо соблюдать правила, касающиеся употребления квадратных скобок и восклицательных знаков. 6. Запускается макрос14, который передает фокус следующему полю - Назва ние фирмы. 7. Заканчивается логическая конструкция If.
Проверка завершенной процедуры На этом написание процедуры завершено. Вот ее полный текст: Private Sub Ha38aHMe^
240
Программирование с помощью процедур VBA
Dim answer As Integer Фирмы , [Название фирмы] answer = DCount( [Название фирмы] Forms1 [Фирмы]1[Название фирмы] ) I f answer = 1 Then MsgBox Prompt = Значение уже содержится Е раиле и повторно не вводится DoCmd RunMacro Макрос32 Else DoCmd RunMacro Макрос2 DoCmd RunMacro Макрос1 MsgBox Prompt = Запись введена Cod = DMax( [Код фирмы] Фирмы ) + 1 forms 1 [Фирмы] 1 [Код фирмы] = [Cod] DoCmd RunMacro Макрос14 End I f DoCmd DoMenuItem acFormBar, acRecordsMenu, 5 acMenuVer70 Exit_Ha3BaHMe_ctnpMbi_LostFocus_Click Exit Sub Err_Ha3BaHwe_<JmpMbi_LostFocus_Click MsgBox Err Description Resume Exlt_Haзвaниe_фиpмы_LostFocus_CllCk End Sub
Программа создавалась в окне модуля За недостатком места мы не иллюстри ровали выполнение каждого этапа работы после ввода очередного оператора По кажем только, как выглядит в окне модуля завершенная процедура (см. рис. 11.8) Щ*}
Я Microsoft Visual Basic - dbl - [Гогт_Фирмы (Code)] >'\ <£i File edit View Insert DebugRun Tools AdcHns Window Help ' •Pmjecf ЛЗ
X\
Ъ n "Б - ^ ^
db3(dbl)
.
-_\ Microsoft Access CI a ГП Рогт_Контрольм Ш
Рогт_Менед,жер
ПИ Рогт_Назначемн( Щ
Рогт_Приборы
Ш
Form_C граны
[ Ц Рогт_Типы Приб( ПИ FormjtiMpMbi
Propertres Название фирмыХ|
Alphabetic I Categorized | AfterUpdate
Ма*рос36
AllowAutoCorrec True
II • M
Ы & V ^
©
H
Натание_фирмы
Ln 15D Col 64 LostFocus
"3 3
Private Sub Название_фирмы_ЬозсГосиз () On Error Go To Егг_Название_фирмы Clic)-L irn Cod As Integer Dim answer As Integer answer = DCount("[Название фирмы]", "Фирмы", "[Название фигны If answer = 1 Then MsgBox Prompt:="3начение ухе содержится файле и повторно не DoCmd.RunMac г о "Макрос 3 2" Else DoCmd.RunMacro "Karpoc2" DoCmd.RunMacro "Макрос1" MsgBox Prompt ="Запись введена" Cod = DMax("[Kofl фирмы]", "Фирмы") + 1 Forms'[Фирмы]'[Код фирмы] = [Cod] DoCmd.RunMacro "Макрос14" End If Irr Название_фирмы LostFocus_Click MsgBox Err Description Resume Exlr:_Haзвaниe_фиpмы_LostFocus_CllCk End Sub
J
СИ Form_3Konorn4^-(
[Название фир СотЬсЬох
•
^Jj9J2<j
»|
-J
Рис 118
Предупреждение дублирования записей при их вводе из формы
24
Теперь проверим, как работает написанная процедура. Откройте форму Фир мы и введите в поле Название фирмы имя организации, которое заведомо содер жится в базе данных - например, ORION (см рис. 119) Не заполняйте осталь ные поля в данном случае важно просто проверить, дееспособна ли созданная программа Чтобы ввести информацию в базу данных, щелкните по кнопке Enter Появится сообщение, показанное на рис.11.10 Форма остается в том же состоянии, код новой записи не изменился, и все готово к вводу другой новой записи
•ШЭ
Ы Microsoft Access i File Edit View Insert Format Pecorrt- Tnnh rjrriuvi/ HPI[_
D £? Ы Ш a "9
I
& R3 £"
^
- an -
n£
в Фирмы Кол ФИРМЫ
27
Название qwpMbi Страна
ORION
~Б
Г
~3
Ашес Аппес2
t^^ffi^^4****'*^. '
Примечания
Удалить запись
Изменить запись Rtcofd
ч| <|(
Г""
Новая страна
» 1.»'1»»1 ^ 27
,d T J ]
Рис 119 х]
Microsoft Access
Значение уже содержите* в файле и повторно н* вводите* OK
Рис И 10 9 -
119
242
Программирование с помощью процедур VBA
Добавьте ее, задав в качестве имени фирмы уникальное имя ORION1 Снова воспользуйтесь кнопкой Enter для ввода записи. В результате появится друюе со общение (см. рис. 11.12). Как видите, добавление этой записи база данных «вос приняла» совершенно нормально. Итак, вы умеете бороться с дублированием записей двумя способами (один из них был описан выше, в главе 9). Мы рекомендуем иметь в своем арсенале оба Отметим лишь, что последний вариант удобнее при вводе записей словарного типа, где определяющим является одно поле (в данном случае - поле Название
шз
Ш Microsoft Access i j File Edit View Insert Format Record; lools Window
IБ Фирмы Коп Фиомы
Нф
27
Название фирмы
3
jОR101^11
d
Стоана Дпо ее Агюес2
МЯЖЩЩИВРШ'Ж'ШЖШЯИ»
Примечания
Удалить запись
Изменить запись Record
и | . ||
27"
Новая страна
> I >• | » » | of 27
«-& ч .J jj,
Рис / / / / Microsoft Access запись введена OK
Рис 11 12
D
Установка на последнюю запись при открытии формы
243
фирмы). В принципе ничего невозможного нет, и нетрудно усовершенствовать программу настолько, чтобы она позволяла контролировать несколько полей. Но подобное усложнение процедуры вряд ли оправдано, тем более что для такого слу чая есть другой вариант отсева дублирующихся записей.
Установка на последнюю запись при открытии формы В главе 9 уже упоминалось о том, что при активизации форма открывается на по следней, еще пустой записи, чтобы пользователь не тратил время на поиски и мог сразу вводить новую информацию. Теперь рассмотрим программный механизм, который позволяет реализовать эту установку. В качестве примера возьмем ту же форму Фирмы. По сути данная процедура представляет собой просто фрагмент предыдущей программы. Фокус передается новой записи, затем максимальное значение уве личивается на единицу и присваивается этой новой записи. Как и в предыдущем примере, начните с окна свойств. Но теперь вам понадо бится таблица свойств не какого-то отдельного поля, а всей формы в целом. От крыв форму Фирмы в режиме Design (Конструктор), щелкните по кнопке Она расположена в левом верхнем углу формы, непосредственно под названием Фирмы: Form (см. рис. 11 13). На фоне окна конструктора откроется окно таблицы свойств формы Form. Активизируйте опцию On Open (Открыть). Щелкните в этом поле мышью и воспользуйтесь стрелкой прокрутки. В выпадающем списке выбери те позицию Event Procedure (Обработка событий) и включите ее в поле ОпОреп Если теперь вы щелкнете по кнопке _^, то в окне модуля будут выведены опера торы, обрамляющие процедуру (см. рис. 11.6): Private Sub Form_0pen (Cancel As Integer) и End Sub. Отметим, что само по себе окно модуля не содержит новой информации, необ ходимой читателю. Поэтому в дальнейшем мы не станем включать в главу рисун ки, которые явно избыточны. Обсуждаться будет только текст программы. Одна ко не забывайте, что она формируется в окне модуля. Следующий стандартный шаг - установка операторов обработки ошибок. Пос ле этого заготовка программы принимает такой вид: Private Sub Forn_0pen(Cancel As Integer) On Error GoTo Err_Forn_Open Err_Form_Open MsgBox Err Description Resume Exit_Form_Open End Sub
Теперь определите переменную Cod, которая необходима для выполнения про цедуры: Dim Cod As Integer 9*
46
Программирование с помощью процедур VBA
'деление записи с установкой а последнюю запись каждой форме базы данных Контрольно-измерительные приборы созданы две шолнительные кнопки: Изменить запись и Удалить запись (см. рис 11.15). В этом разделе будет рассмотрена процедура, на которой основано действие гопки Удалить запись. В принципе удаление записи - совершенно рутинная операция. Она выпол1ется штатными средствами Access и не заслуживает особого внимания. Если нашем случае для нее предусмотрена специальная кнопка, то лишь потому, что ть и вторая часть задачи - установка на последнюю запись. Это значит, что в нро>амму следует добавить некоторые новые функции, чтобы показать некоторые )вые возможности в использовании процедуры. Покажем это на примере формы азначение. Как и во всех предыдущих случаях, выполнение процедуры привязано
ПЙТЗЛ
Ы Microsoft Access File Edit View Inset t Format Pecoids
Tools Window
D E> й
' •'
Ш [h v-
r
• aaAI Z I
hi - a a a z -
Help
П 51
og Y/
1]
53 -
©
•+
шш
В Назначение Код назначения
W
Назначение прибора
Примечания
Изменить запись Record
и | <| J
37
Удалить ЗаПИСЬ
> 1 " | " > | of 37
J
Рис ? / 15
jj
Удаление записи с установкой на последнюю запись
247
к событию On Click (Щелкнуть по кнопке) в таблице свойств кнопки Command Button (Командная кнопка) - см. рис. 11.16. Далее следует выбрать опцию Уда лить запись Как и раньше, с помощью кнопки _ ^ откройте окно модуля. Оно выглядит так же, как аналогичное окно, которое было показано на рис. 11.6. Процедура опять будет формироваться в окне модуля, по и на сей раз речь пойдет только о тексто вых операторах.
JOn Mouse Down , •On Mouse Move . . fori Mouse Up . . . . O n Kev Оо,Л.'п . . jOri Key Up Юп Key Press
Рис 11 16
Первые этапы работы уже хорошо вам знакомы: автоматическая вставка обрам ляющих операторов, ввод операторов обработки ошибок и определение перемен ной Cod. Вот результат ваших трудов: Private Sub Удалить_запись_С11ск() On Error GoTo Егг_Назначение_Удалить_запись_Й1ск Dim Cod As Integer Егг_Назначение_Удалить_запись_С11Ск. MsgBox Err Description Resume Ех11_Назначение_Удалить_запись_СПск End Sub
Далее вы блокируете вывод любых информационных сообщений, кроме сооб щений об ошибках. Эту функцию выполняет программа макросЗ (см. рис. 11.17). Чтобы запустить ее, задайте команду Set Warning (Установить сообщение), но в поле Action Arguments (Аргументы команды) укажите значение No, что и по зволит блокировать вывод сообщений. Данная опция используется, когда пользо ватель не хочет, чтобы выполнение макроса прерывалось ради появления окон предупреждений. Однако сообщения об ошибках выводятся в любом случае. Кро ме того, Microsoft Access выводит на экран все диалоговые окна, которые требуют от пользователя действий более сложных, чем щелчок по кнопке: например, когда надо ввести какой-либо текст или выбрать параметр из списка.
248
Программирование с помощью процедур VBA
ПЕПП
Ш Microsoft Access File Edit №•/',
Insert Pun Tools
Window
Help
шш з
* МакросЗ: Macro Action
•
Set^'atningsl
J
1
• н и
Comment
—
И J
Action Arguments
Warnings™ 1
Turns all system message-: on of off. Prevent? modal warning; fiom stopping the macro (.although error messages i and dialogs that require user input still appear) This has the same effect as pressing Enter in each message box | (typically an OK or Yes) Press Fl for help on this action
Рис
11 17
Макросу производит основную операцию - удаление записи. После этого выполняется цикл. Рассмотрим его подробнее. При активной работе с БД может оказаться, что в какой-либо форме есть не одна, а несколько пустых записей. Например, вы нечаянно или с определенной целью не ввели в новую запись никаких данных, однако и не удалили ее. Щелк нув по кнопке Удалить запись, вы восстановите порядок, и все пустые записи бу дут уничтожены. Когда вы снова активизируете форму, она откроется на пустой записи, готовой к вводу информации. Цикл имеет следующий синтаксис: А DoCmd RunMacro Макрос7 I f IsNull(Forms' [Назначение]1 [Назначение] = " " ) = True Then DoCmd RunMacro МакросЗ DoCmd RunMacro МакросЭ GoTo A Else End I f
Программа Макрос7 осуществляет переход к последней записи. Затем уже зна комая нам логическая конструкция Then If Else (Если...То...Иначе) проверяет ут верждение Forms1 [Назначение]1 [Назначение] = . Иными словами, вы проверяете, есть ли в поле Назначение формы Назначение пустая строка.
Удаление записи с установкой на последнюю запись
249
Проверка проводится с помощью функции IsNull О, которая возвращает значе ние типа Boolean. Оно показывает, является ли результатом выражения пустое зна чение (Null). Синтаксис функции: 1БМи11(выражение)
Итак, функция IsNull возвращает True (Истина), если выражение имеет значе ние Null; в противном случае возвращается значение False (Ложь). Предположим, результатом проверки будет True: в записи обнаружена пустая строка. Тогда с по мощью программы Макрос7 блокируется вывод сообщения, а оператор Макросу уда ляет эту запись и осуществляет переход на метку А. Она повторяет описанные процедуры для следующей пустой записи, и так продолжается до тех пор, пока не выяснится, что подобных записей больше нет. Тогда цикл заканчивается и начи нает выполняться следующая группа операторов: DoCmd RunMacro
Макрос1
Cod = DMaxC [Код] , Назначение ) + 1 Forms'[Назначение] 1 [Код] = [Cod] DoCmd RunMacro Макрос29
Приведенный набор команд задает установку на последнюю пустую запись и определяет соответствующее значение для ее кода. (Подробно все это рассмат ривалось в предыдущем разделе.) Вот полный текст процедуры: Private Sub Удалить_запись_С11ск() On Error GoTo Егг_Назначение_Удалить_запись_С11ск Dim Cod As Integer DoCmd RunMacro МакросЗ DoCmd RunMacro МакросЭ A
DoCmd RunMacro Макрос7 If IsNulKForms1 [Назначение]1 [Назначение] = ) = True Then DoCmd RunMacro МакросЗ DoCmd RunMacro МакросЭ GoTo A Else End If DoCmd RunMacro Макрос1 Cod = DMax( [Код] , Назначение ) + 1 Forms1[Назначение]1 [Код] = [Cod] DoCmd RunMacro Макрос29 ЕхИ_Назначение_Удалить_эапись_СНск Exit Sub Егг_Назначение_Удалить_запись_С11ск MsgBox Err Description Resume Ех11_Назначение_Удалить_запись_С11ск End Sub
250
Программирование с помощью процедур VBA
LH
Expression Builder
J
Count: («expr») |
Cancel
d ~ р * ] &| = > < 4 H And ЬУ rTot I » j ( P j Назначение (±1 Tables 1 (±J Queries Lfl Form? & Reports P i Functions LQdbl P j Constants CD Operators P i Common Expressions
)1
Arrays Conversion Database Date/Time DDE/OLE Domain Aggregate Error Handling Financial General Input/Output Inspection Marh
Paste |
Undo Help
|
nputBox$ MsgEox
23Я5ЕЯИИИ1 Proaram Flow InputBox(prompt; title; default: xpos; ypos) РИС.
J
-Й
/ / /S
э
езюме В главе рассматриваются основные положения языка программирования VBA, который стал стандартным средством макропрограммирования для различных приложений. Сфера приложения VBA практически безгранична. В качестве примера в этой главе выбрано «обустройство» собственно базы данных - обеспече ние удобства работы с ней для пользователя. Обычно у каждого пользовате ля свои взгляды на то, что удобно, а что нет, и нередко сервис базы данных приходится дорабатывать. Обращение к VBA оправдано тогда, когда средства, заложенные в Access, либо не позволяют добиться нужного результата, либо предлагают сложное и громоздкое решение. В качестве конкретных примеров использования языка VBA в настоящей главе рассмотрены: - предупреждение дублирования записей при их вводе с помощью формы; - установка на последнюю запись при открытии формы; - удаление записи с дальнейшей установкой на последнюю запись.
Глава X I I Другие возможности Access 2 0 0 0 • Установка Access 2000 •
Условное форматирование
•
Буфер обмена
• Автоисправление имен •
Разделение базы данных
•
Сжатие базы данных при ее закрытии
•
Конвертирование базы данных
Установка Access 2000 Как уже говорилось, система Access 2000 является органической составной час тью программного пакета Office 2000, и это важное обстоятельство во многом определяет характер инсталляции Access 2000. Если вы впервые устанавливаете Access, целесообразно устанавливать весь пакет в целом. Это не означает, что дан ную систему нельзя установить «в одиночку», локально, но вряд ли это разумное решение. В дальнейшем под установкой Access 2000 фактически будет понимать ся инсталляция пакета Office 2000 в целом. Что в первую очередь следует учи тывать? Office 2000 ориентирован на работу с системой Windows 98 и ее более поздни ми версиями. При установке пакета в среде Windows 95 могут возникнуть про блемы, например указание на несовместимость клавиатуры. Кроме того, перед
252
Другие возможности Access 2000
инстралляцией придется закрыть не только все открытые приложения, но и фо новые программы: Norton System Doctor и др. Поскольку при установке пакет к таким программам относится очень болезненно, лучше на время установки про сто очистить панель задач. Инсталляция начинается традиционно - с запуска программы Setup.exe, кото рая содержится на CD-ROM. При первой установке, освоившись с компьютером и разобравшись с лицензионным номером, Office 2000 попросит пользователя выбрать один из вариантов инсталляции (см. рис. 12.1): •
Upgrade Now - провести стандартное расширение сейчас, то есть удалить предыдущую версию Office и загрузить новую в папку, которую по умолча нию предлагает система; Q Customize - самому указать место для инсталляции Office 2000, принять решение о сохранении или удалении предыдущей версии пакета и опреде лить требуемую конфигурацию. Сделав выбор, щелкните по соответствующей кнопке. Пользователю, кото рый предпочтет первый, стандартный вариант загрузки, Office 2000 больше не станет задавать вопросов. На экране появится сообщение с просьбой подож дать, пока не закончится конфигурация программы и установка пакета (см. рис. 12.2).
Рис 12 1
253
Установка Access 2000 iff Reinstalling/Repairing Microsoft Office 2000
пш
Please wait while Windows configures Microsoft Office 20G0
Verifying installation tasks Cancel
Рис. 12 2
Если вы пожелаете лично контролировать процесс установки и выберете ре жим Customize, то система предложит вам задать конкретную конфигурацию па кета. (Отметим, что при установке редакции Office 2000 пользователь имеет боль ше возможностей для выбора тех или иных элементов пакета. Предыдущие версии Office были в этом смысле менее гибкими.) На рис. 12.3 показана структура кон фигурации, которая предлагается пользователю (в основном на экран выведены элементы, имеющие отношение к Access 2000). Как видите, набор значков, характеризующих различные варианты конфигура ции, здесь разнообразнее, чем в предыдущих версиях Office или Access. Во-первых,
за
\Ш Microsoft Office 2000: Update Features
_!' • SETUP i Maintenance Mode ) Selecting Features Installing Office
э э t®d
d
X -1 Integrated File Management Microsoft Access for Windows _ J ' Help _ J ~ Typical Wizards Z3~ Additional Wizards ttJ> Sample Databases 0 - J - Snapshot Viewer O J - Database Replication _ J - Calendar Control _ J ' Client Server Visual Design Tools Microsoft FrontPage for Windows
J
X -1 Microsoft Office (French) В X " I Microsoft Word for Windows X - | Address Book
1
• |
Description: Applications and support files for use with Microsoft Office.
Size:
Selected Features: Help
Cancel
Рис. 12.3
16MB
Free Disk Space < < Back
1153ПВ Update Now
Другие возможности Access 2000
[енты можно сворачивать и разворачивать с помощью уже известных читатеначков + и - . Кроме того, предусмотрены следующие опции: |ГГ}->] - открывает окно (см. рис. 12.3), где представлены различные вариан ты установки элемента, которые перечисляются ниже; ьЭ Run from My Computet | - когда пользователь выбирает эту опцию, элемент устанавливается па жесткий диск и в дальнейшем запускается обычным об разом (допустим, па окна Мой компьютер); On Run all fiom My Computer ] - при выборе данного варианта все элементы систе мы загружаются па жесткий диск и впоследствии тоже запускаются обыч ным порядком. Если необходим более детальный выбор (то есть элемент со держит составные части), он, в свою очередь, раскрывается, и производится аналошчпый выбор; ftj) Run 1ют СО | - элемент остается на компакт-диске, откуда при необходи мости и запускается; © g Run all from CD J - все элементы, которые содержатся в этом перечне, остаюгся на компак1 -диске, откуда при необходимости и запускаются; О Installed on First Use | - элемент автоматически инсталлируется при первом запуске программы; X Hot Available | - элемент недоступен и не подлежит установке. брав необходимые для работы элементы, щелкните по кнопке Update Now эвить теперь), чтобы запустить сам процесс установки. После его заверше/indows предложит вам перезагрузить компьютер (см. рис. 12.4). Когда и это сделано, Office 2000 вместе с Access 2000 готовы к работе, ги Office 2000 инсталлируется на ранее установленную версию, то вместо (ения, выведенного на рис. 12.1, появляется другое (см. рис. 12.5). Система агает пользователю выбрать один из нижеследующих вариантов: Repair Office (Переустановить Office 2000) - например, если произошли <акие-то сбои в работе программы; \dd or Remove Office (Добавить или удалить отдельные элементы пакета); Remove Office (Удалить Office 2000) - полностью удалить пакет с компьютера. ьнейшие действия пользователя не содержат ничего необычного. 1 f £ Inxtallei Information • \ ^ I J
В1
The installer must restart yout system before configuration of Microsoft Office 2000 Pierniurn can continue Click Yes to restart now or No if you plan to manually restart later
N°
Yes
Рис 12 4
J
255
Условное форматирование
из
wp M i c i o i o f t Office 2 0 0 0 M a i n t e n a n c e M o d e OfTice M a i n t e n a n c e M o d e Please select one of the following options
SETUP
Repair Office
Maintenance Mode
Restore your Microsoft Office 2000 Premium installation to its опдтз! state.
Add or Remove Features Change which features ate m_.tailed or remove specific features.
fffl 'iJ Help
Remove Office Delete Microsoft Office 2000 Premium trorn this computer.
Cancel
Рис. 12.5
Условное форматирование Условное форматирование позволяет представлять в особом формате поля, кото рые соответствуют определенным, заранее заданным критериям. По функциям эта операция является разновидностью пользовательского запроса к базе данных. Более того, практически все критерии, применяемые в условном форматирова нии, могут задаваться и в запросе.
Пример условного форматирования Рассмотрим условное форматирование на конкретном примере. Откройте форму пли отчет в режиме конструктора (Design view). На рис. 12.6 показана форма Фирмы, взятая из базы данных Контрольноизмерительные приборы. Здесь форма открыта в режиме формы (Form view), а на рис. 12.7 - в режиме конструктора. Наиболее интересен второй вариант. Вы делите в форме Фирмы поле, которое хотите представить в условном формате, Название фирмы (см. рис. 12.7). Теперь в верхней строке меню Format (Формат) активизируйте опцию Condi tional formatting (Условное форматирование). В результате на экране появится
Другие возможности Access 2000
/36
isH
Ы Microsoft A c c e t * - [Фирмы]
°S Si Xi v / *й ол -
Коп Фиомы
© • • >*
Э й -
(3
24
Название фирмы
~Б
jLEEMAN LABS
Стоана
США
Апоес
Российское представительство ЦНИИ КМ "Прометей" и Ассоциация "Центролаб" 1ч1186г ОЯНКТ-ПАТРППУПГ нлб п Мондгтыпш 1
Ашес2
Примечания
Изменить запись
Record
1<1 <
Удалить запись
Новэд страна
> I »1 | > * | or 27
Рис 12 6
[налоговое окно условного форматирования (см рис. 12 8) Формат выделяемого юля может быть разным • тип (вариант, выбранный в нашем примере), • цвет шрифта, • цвет заливки поля. Верхнее поле в диалоговом окне предназначено для отображения измененного юрмата в случае, если заданные условия не соблюдены, нижнее - в случае, когда ни выполняются. Три средних окна служат для ввода условий В левом из них помощью стрелки прокрутки указывается тип критерия для форматирования: Q критерий, определяющий нужное значение поля, Q критерий, определяющий нужное выражение, которое включает значение поля; • критерий, указывающий, при каких условиях полю передается управление Рассмотрим первый пример - критерий для значения. Допустим, надо выде:ть запись, где упоминается фирма под названием LEEMAN LABS Во второе
257
Условное форматирование
Тага
Н Microsoft Л е с е » - (Фирмы : Foim]
о - и а &,
& tfe ta " ч* a * ! <з л с? .> | © а -1 о . ! 10
I
II
I
12
I
IS
i M
i 1г
# Form Header * C^roil
Кош Фи1: мы
КОД фПрМЫ
Название qDupMbi гоан
т: I 1= • Название qnipMti
Т.
Код страны 1
•№
Ашес
•-•--••
7> 1_
Адрес
Адрес 2 [t>gi
Примечания >име -пни
Исметаь
Удалив
4 I Не.»
Рис 12 7
поле среднего окна вводится оператор, который вы можете выбрать из следующе го перечня Q between (между), • not between (вне пределов); • equal to (равно); • not equal to (пе равно); • greater than (больше чем), • less than (меньше чем), • greater than or equal to (больше или равно); U less than or equal to (меньше или равно) Задайте условие, согласно которому значение поля (см. рис. 12.9) равняется LEEMAN LABS. После ввода в записях, где в данном поле будет указано это на звание фирмы, оно будет показано измененным шрифтом, как на рис. 12.9 Крите рий можно усложнить - в частности, добавить новые условия (общим числом не более трех) Как уже говорилось, аналогичного результата при поиске нужной за писи вы добьетесь, сформировав запрос на выборку.
>58
Другие возможности Access 2000
ИЕ1
ondilional Formatting Default Formatting This format will be used if no conditions are met: Condition 1 |Field Value Is
~
В /
AaBbCcYyZz
U
"N - A
^ ]
•*]
|equd to
Preview of format to use when condition is true:
|"LEEMAN LABS
в i I и ! Ь -1 A .
AaRhC.rYyF7
Add»
Delete ..
Cancel
OK
Рис 12 8
1Щх]
Microsoft Access - [Фирмы]
п-о - .
к - и & а у] Коп Фиомы
I
•»
•*;
' © д-| 5U
24
Название фирмы
LEEM.AN LABS
"3
И
Стоана
США
Ашес
Российское представительство ЦНИИ КМ "Прометей" и Ассоциация"Центролаб" 191186 г Оянкт-nftTfinfivnr иаб п Монястыгжи 1
Агюес2
Примечания
zJ Record: и | < | f
24
> | " | f * j of 27 '
Рис. 12 9
уфер обмена о всех программных продуктах Microsoft, начиная с первых версий DOS, разта с буфером обмена всегда была простейшей рутинной операцией. Казазсь, в ней нечего совершенствовать. Однако в Access 2000 такие улучшения )явились. Точнее говоря, они были разработаны в Office 2000, поэтому стали )стуины и в Access 2000.
259
Буфер обмена
Новое
содержание
В предыдущих версиях Office буфер обмена был один, и в каждый момент време ни с помощью буфера можно было работать только с одним файлом. В пакете Office 2000 таких буферов стало 12. Соответственно, пользователь может обраба тывать одновременно до 12 файлов. В окне, которое показано на рис. 12.10, вы видите 5 буферов
Рис. 12 10
Все кнопки управления буфером: Cut (Вырезать), Сору (Копировать) и Paste (Вставить) - сохраняют свои обычные функции. Однако для каждого нового фай ла, открытого в диалоговом окне, выводится отдельный буфер. Это, в свою оче редь, предоставляет пользователю новые возможности для работы.
Новые возможности для работы Команда Collect and Paste (Собрать и вставить) позволяет вам собирать инфор мацию из различных источников (документов, электронных таблиц, сети Internet и т.д.), упорядочивать ее в буфере обмена, а затем целиком вставлять в любой до кумент по вашему выбору. Эта опция представляет собой усовершенствованный вариант функций Сору (Копировать) и Paste (Вставить), известных вам по ран ним версиям Office. При использовании стандартного буфера обмена в системе Windows нужно было скопировать информацию, затем открыть другое окно, вста вить скопированный фрагмент, закрыть второе окно и вернуться в первое. Если возникала необходимость скопировать новые данные, приходилось повторять все сначала. Команда Collect and Paste существенно облегчает работу с несколькими блоками данных. Буфер обмена позволяет скопировать до двенадцати отдельных фрагментов текста и/или изображения из одного либо нескольких документов, сообщений электронной почты, Web-страниц, презентаций, других файлов. Затем
Другие возможности Access 2000
ррагменты можно поместить в любое приложение Ofhce - по одному или все у. Во втором случае воспользуйтесь удобной командой Paste All (Вставить все).
тоисправление имен :врале 1997 года фирмой Griggs-Anderson Research был проведен опрос пользолей Microsoft Access. Согласно результатам этого исследования, функция авправления имен возглавляла список самых насущных пользовательских по лостей.
нкции автоисправления имен 1КЦПЯ Name Autocorrect (Автоисправление имен) устраняет побочные эффекшторые часто возникают при переименовании объектов базы данных. Наприесли в предшествующих версиях Access пользователь присваивал полю табы другое название, то система переставала выводить данные, связанные с этим эм. А вот Access 2000 автоматически переносит изменение имени поля на все симые от него объекты: запросы, формы, таблицы, отчеты, поля. Поэтому ьзователь может беспрепятственно продолжать работу с приложением. Всяраз, когда вы открываете форму или другой объект базы данных с изменен1 названием, Access 2000 автоматически проверяет и фиксирует расхождения :ду этим объектом и другими, которые с ним связаны. Допустим, вы открыли му, связанную с таблицей. Система сравнит дату и время обращения к форме блице. Если они различны, включается функция Name Autocorrect.
эаничения на использование функции первых, пользователь может работать с ней, если ему разрешена модификация л данных. Ясно, что при обращении к объекту в режиме Read Only (Только чтения) применение Name Autocorrect исключено. 'ассмотрим другое ограничение. Если объект базы данных создается при от менной функции автоисправления, то после ее активизации будут автомаески фиксироваться только новые внесенные изменения. Если же они были ланы до включения Name Autocorrect, соответствующие ссылки придется сти вручную. Для форм или отчетов, содержащих коды Visual Basic, система ess 2000 сама проставит эти ссылки, но не будет делать исправлений в текстах грамм Visual Basic. Зместе с тем, в некоторых случаях Name Autocorrect не в состоянии исправить лки на переименованные объекты, что существенно ограничивает сферу при[ения функции. Это может произойти, прежде всего, если: -I изменены ссылки, указывающие на неправильный оператор SQL; 2 изменены ссылки, указывающие на код в программе Visual Basic; 3 изменены ссылки, указывающие на связанные таблицы, если эти таблицы или поля в них переименованы в обратной последовательности; 3 изменены ссылки на макросы, в том числе в свойствах событий, а также в меню свойств устанавливаются имена макросов;
261
Автоисправление имен
•
пользователь работает в реплицированной (скоп ированной) базе данных. В этом случае функция Name Autocorrect отключается, и ее нельзя активи зировать снова; • пользователь работает в Microsoft Access Project. Функция Name Autocorrect может применяться для баз данных, созданных как непосредственно в среде Access 2000, так и в ее ранних редакциях. (В последнем случае эти БД пре образуются системой Access 2000.)
Использование функции Чтобы включить Name Autocorrect, надо: 1. В меню Tools (строка меню Access 2000) выбрать опцию Options (Параметры). 2. В появившемся диалоговом окне Options (см. рис. 12.11) открыть вкладку General (Общие). Одно важное замечание. Предположим, вы хотите, чтобы система Access 2000 запомнила сделанные вами изменения имен, но в дан ный момент не вносила их в записи (это можно сделать и в другое время). В разделе Name Autocorrect окна Options установите флажок только рядом с опцией Track name Autocorrect Info (Подготовить информацию для авто матического исправления имен). Если вы хотите активизировать функцию Name Autocorrect, установите галочку в позиции Perform name AutoCorrect (Выполнить автоисправление имен). А если необходимо, чтобы информация о проведенном автоисправлении была сохранена ВПгЯЯ View
General
Edit/Find ] keyboard
Datasheet | Forms/Reports ] Advanced
Print mat gins Left margin Pjght margin
Name AutoCorrect
|ЭЕШ5Я
W Track name AutoCorrect info
] : , 199crn
P
Top margin.
|2,199crri
Bottom margin-
|z,499cni
Perform name AutoCorrect
W Log name AutoCorrect changes
Default database folder
New database sort o r d e r :
|С.\Мои документы\
j'jeneral
f? Recently used file list: W Provide feedback with SOUnd Г~ Compact on Close
Tables/Queries
d
d
Use four-digit year formatting P
This database
Г - All databases
Web Options . 1
OK
Рис 12 11
Отмена
Другие возможности Access 2000
е данных, то включите флажок еще и в позиции Log name AutoCorrect changes шксировать исправление имен).
зделение базы данных да такое решение будет для пользователя самым разумным. Например, расоим ситуацию, с которой вы вполне можете столкнуться на практике. В табк БД накоплен большой объем первичных данных. Вы хотели бы использолх для того, чтобы построить на основе этих исходных данных совсем другую со своими формами, отчет ами, запросами и т.д. Объекты уже существующей данных вас не интересуют. Тогда се можно разделить на две независимые . Точнее говоря, вы собираетесь выделить из существующей БД, которая ося неизменной, еще одну, причем новая база данных будет включать только цы. На их основе впоследствии можно наращивать информацию и развиювую БД. эбы разделить таблицы, в строке меню Access 2000 задайте последовательдействий: Tools => Database Utilities => Database Splitter (Инструменты => гты базы данных => Разделитель базы данных). После этого на экране поя диалоговое окно разделителя (см. рис. 12.12). Database Splitter Этот ыастер переыешдет т а б л и ц ы го текущей ба з ы данных £ новую баз} данных В ыногопользоЕ а т с л ы к о п среде он изменяет схему сети и облег чает дальнейшее развитие без нарушения д а н н ы х и п о м е х для пользователя
Процесс может быть длительным До разделения рс*-оыендуется сделать резервную копях- исход ной базы данных В ы хотите начать разделение базы д а н н ы х сейчас'' ^ Ч , |
Split Database
Cancel
Рис 12 12
а вы ознакомитесь с информацией, выведенной в этом окне, и выберете plit Database, система осуществит разделение базы данных. Вмешательльзователя потребуется в самом конце этого процесса, когда нужно будет ь предлагаемое название новой БД или ввести другое. Access собирается ь ей имя прежней БД, но с дополнением be. На рис. 12.13 показано, как иных db5.mdb делится на две: старую (с тем же именем) и новую, для
263
Розделение базы данных
33
Create B a c k - e n d D a t a b a s e
"3 *-' a ®
JJ Мои документы Access
Ц, П Ь Tools ^ d b S mdb
Zrnono
$ } dbS_be mdb
Гридин
V | db6.mdb
Мои рисунки
%Jdb7 mdb
Монография
~ ' desktop mi
МЧС-развитие
T^JESJDPER.xIs [л] Microsoft Office.ZIP
Универсум
j ^ J Old Excel Documents
1 Файлы справок щВаскир of Проектирование базы данных.wbk
# ] Paget.htm
KjCATMAPl.xls
^ ] Визитка.doc
ydbl.mdb
Ч З Володя.doc
V | d b 2 mdb
^Jrorieo.doc
Vjdb3 mdb
i<1foweocT,lex
y d b 4 mdb
!л]гомеост1.1ех
-^]dbS Idb
^ Д о п о л н е н и я к плану монографи
±1 File name ave as type.
hH-MlnM-! All File; i*
_ЕЗ
"3
*)
В
split Cancel
Рис. 12 13
которой предлагается название db5_be.mdb. Когда пользователь примет решение, появится новая база данных, содержащая точные копии таблиц из старой БД и го товая к вводу и накоплению информации. Объективности ради отметим: если пользователю понадобится разделить базу данных, он может сделать это и без помощи команды Split Database (Разделить базу данных). Можно скопировать исходную БД, а затем удалить из полученной копии все объекты, за исключением таблиц. Результат будет таким же, хотя при дется произвести больше операций. Другими словами, вы снова убеждаемся в том, что появление в системе новой функции не означает открытия принципиально новой возможности. Пользователь просто получает право выбрать иной, более удобный вариант решения той или иной задачи.
Сжатие базы данных при ее закрытии Как правило, файл базы данных является довольно «рыхлым». В нем много пус тых или не полностью заполненных ячеек. Поэтому возникает вполне разумная и естественная идея: сжать базу данных, когда она не используется, чтобы БД за нимала меньший объем памяти. В активном состоянии базу данных можно раз вернуть до исходного размера. Ясно, что подобная операция должна выполняться только автоматически, иначе она не имеет смысла. В Access 2000 автоматическая распаковка базы данных производится без предварительной настройки лишь в том случае, если БД была сжата перед закрытием.
Другие возможности Access 2000
<6A
Чтобы автоматически сжать базу данных перед закрытием, произведите следу>щую настройку: 1. Находясь в любом из окон базы данных (или специально открыв ее - см. рис. 3.1), выберите в строке меню Tools => Options. 2. В диалоговом окне Options (см. рис. 12.11) откройте вкладку General. 3. Установите флажок в окне Compact On Close (Сжать при закрытии). 4. Щелкните по кнопке ОК. При выполнении описанных действий в многопользовательской среде необадимо убедиться в том, что в этот момент с базой данных не работает никто эугой.
онвертирование базы данных инвертирование из Access 97 (95) в Access 2000 шустим, при открытии базы данных вы выбираете опцию Open an existing file )ткрыть существующий файл). При этом вам нужен файл из уже существующей 1, которая разработана в какой-либо ранней редакции Access. Тогда система преджит вам преобразовать базу данных в формат Access 2000 (см. рис. 12.14). Con veil/Open Database You have selected a database created in a previous version of Microsoft Access You can convert o< open the database. Either action may take several minutes <•" iconvert Database Click this option if you're not sharing this database with users of a previous version. You will not be able to use the database with previous versions This option is best if you want to take ad vantage of the full power of Microsoft Access 2000
ft—Sj
<~ Open Database
Click this option if you're sharing this database with users of a previous version of Microsoft Access. You will still be able to use the database with pre /IOUS versions In Microsoft Access 2000, you will be able to view all objects, but will not be able to change the design of any object. OK
Cancel
Рис 12 14
Эпция Open Database (Открыть базу данных) предпочтительнее, если база ных обслуживает нескольких пользователей, работающих в разных версиях, да в редакции Access 2000 база данных будет функционировать в режиме Read у (Только для чтения), и вы не сможете модифицировать ее объекты. 1аоборот, выбор опции Convert Database (Конвертировать базу данных) реендуется в том случае, если с этой БД вы будете работать только в версии
265
Конвертирование базы данных
Access 2000. Такое решение позволит вам в полной мере воспользоваться теми преимуществами, которые предоставляет ноЕвейшая редакция системы. При конвертировании Access предлагает взам принять новое имя базы данных и указывает папку, в которой БД будет сохранена под этим именем (см. рис. 12.15). Какое бы решение вы ни приняли, работа гэтой БД в среде предыдущей версии будет невозможна. (Исходная БД под старым i именем может использоваться в пре дыдущей версии.) Процесс конвертации займет несколько минут, а затем на экра не появится окно преобразованной базы данншх (см. рис. 12.16). Convert Database Into Save in:
J3 Мои документы Access My Pictut es My Webs Zmono Гридин Мои рисунки Монография МЧС-разбитие Универсум Файлы справок V) dbl.mdb ydo2.mdb ydb3.mdb Vjdb4.mdb ^JdbS.mdb
7
^J Old Excel Documents 3 J Старые документы Excel
File name. t
Ш
«~ а ® х ы и - тоо15.
Save as type: Microsoft Access Databases (*.mdl(b) *ЩЩЩЗЩЛ2Щ5^£^
7 7
Save Cancel
Рис. 12 15
Конвертирование из Access 2000 m Access 97 (95) Аналогичная проблема возникает и при обратном переходе, когда необходимо работать в Access 97 или 95 с базой данных:, созданной в среде Access 2000. Если вы вызовете такую БД непосредственно из Access 97 (95), система вы даст сообщение Unrecognized database format"' " (Неизвестный формат базы данных ). Вместо многоточия указывается путь файла БД. Чтобы использовать в ранних версиях системы базу ^данных, созданную в Access 2000, надо преобразовать БД в соответствующий формат. Выберите в строке меню Access 2000 опцию Tools и задайте такой ряд кюманд: Tools => Database Utilities => Convert Database =» To Prior Access Database version (Инструменты => Ути литы базы данных =* Разделитель базы данных :=* К предыдущей версии базы дан ных) - в последовательно раскрываемых меню. Когда все операторы выполнятся, с преобразованной базой данных можно будет [работать в Access 97 (95).
66
Другие возможности Access 2000
Objects
•
^1
3
«ш?
0) 0]
Cre.^e roirn in Design view Create form by using wizard
ЕЕ Ш EI Е!
Менеджер
т т т ш т т т т
Приборь i
т т
ФирмыЗ
Менеджер Subf orrn Менеджер Subforml Назначение
Страны Страны1 Страны? Типы Приборов Фирмы Фирмы Subform Фирмы 1
щ тВВт Экологические приборы
±1
I >| Рис 12 16
*езюме 1. Потенциальные возможности Access 2000 несколько шире, чем те, которые использованы и показаны в книге. Поэтому заключительная глава была по священа описанию этих нераскрытых моментов и особенностей. 2. Желательно, чтобы при первой инсталляции среда Access 2000 устанавли валась не отдельно, а в составе пакета Office 2000. При этом, чтобы не возни кало каких-либо непредвиденных затруднений, лучше устанавливать пакет на базе версии Windows не ниже Windows 98. 3. Условное форматирование позволяет представлять в особом формате поля, которые соответствуют определенным, заранее заданным критериям. По функциям эта операция является разновидностью пользовательского запро са к базе данных. Более того, практически все критерии, применяемые в ус ловном форматировании, могут задаваться и в запросе. 4. В предыдущих версиях Office буфер обмена был один, и в каждый момент времени с помощью буфера можно было работать только с одним файлом.
Резюме
5.
6.
7.
8.
267
В пакете Office 2000 таких буферов стало 12. Соответственно, пользователь может обрабатывать одновременно до 12 файлов. Access 2000 автоматически переносит изменение имени поля на все зависи мые от него объекты: запросы, формы, таблицы, отчеты, поля. Поэтому пользователь может без дополнительной корректировки продолжать работу с приложением. Access 2000 предоставляет возможность разделить базу данных на две неза висимые части, точнее говоря, выделить из существующей БД, которая ос тается неизменной, еще одну, причем новая база данных будет включать только таблицы. На их основе впоследствии можно наращивать информа цию и развивать новую БД. Как правило, файл базы данных является довольно «рыхлым». В нем много пустых или частично заполненных ячеек. Поэтому возникает необходимость сжать базу данных, когда она не используется, чтобы БД занимала меньший объем памяти. В активном же состоянии база данных разворачивается до ис ходного размера. Такое сжатие в Access 2000 может проводиться автомати чески. Работа с БД, выполненной в одной из предыдущих версий Access, в среде Access 2000 требует предварительного преобразования (конвертации). Эту же операцию приходится выполнять и в случае обратного перехода.
Алфавитный указатель Г тоотчет 92, 103 тостраница 108, 122 тоформа 56 шерсанд 185 тумент 144 зы данных 12 БДЧЭС 125, 140 Контроль ЧС 125, 140 Контрольно-измерительные триборы 124 нки данных 9 блиографическая информация 18 блиотекаУВА 229 анк 116 ianpoca 149 сонструктора 156 •траницы 116 ладка ivent 206 -orms 221 4асго 144 Queries 148 ieports 221 ables 150 эженные 'тчеты 97 траницы доступа к данным 114 аблицы 50 юрмы 62 гшний ключ 47 ражение 223
Гиперссылки 84 Группировка 91, 95, 97 Групповые операции 153
д Двумерные файлы 46 Дизайн 14 Динамические ссылки 106 Документ 19 Драйвер ODBC 198 Дубликат 232 Дублирование 181
3 Закладка 86 Запись 114 Запрос SQL 147, 157 к серверу 147 на добавление 188 на изменение 146 на обновление 147 на объединенную выборку 173 на поиск повторяющихся записей 181 на присоединение 134, 147 на создание таблицы 174 на удаление 184 перекрестный 193 подзапрос 147 с дополнительными условиями 159 с использованием групповых операций 153, 154 с параметрами 166 со связями 169 управляющий 147
269
Алфавитный указатель
И
Л
Иерархические дерево 51 структуры 50, 54 Импорт 125 Инструкция On Error 234 Resume 235 SQL 151, 157
Логические выражения 15 структура 23
К Картографическая информация Ключевые слова 227 INNER JOIN 167 ON 167 WHERE 158 Код 31 Visual Basic 260 записи 237 первичный 30 репликации 48 Количество записей 164 Командная кнопка 247 Конвертация 14,124 Конвертеры 123, 140 Конкатенация 185 Константа 223 внутренняя 224 символьная 224 Конструктор кнопок 72 макросов 214 отчетов 92 страниц 115 таблиц 32 Контекстное меню 67 Копии таблиц 263 Корневая часть слова 159 Критерии выбора СУБД 14 выражения 256 значения поля 256
м Макрокоманды 142 Макрооператоры 142 Макрос 142 Маркер 117 Мастер 14 запросов 181 кнопок 70 отчетов 95 печати связей 52 подстановок 42 преобразования поля 34 страниц 109 таблиц 28, 54, 86 форм 58 Методы VBA 220 Модуль 100 класса 223
н Набор ANSI 210 Начальная форма 64, 90
О Обработка ошибок 234 событий 206, 217 Объекты 220 Окно базы данных 75 диалоговое 60 конструктора 94 мастера 70 модуля VBА 221 редактирования связей 48 Операнд 167 Операторы 143 Операция замены/вставки 132 Описатели 225
270 Отношение «одип-к-одному» 31 Отчет 95
п Панель инструментов 66 Первичный код 30 Переключатель 43 Переменные неявные 223 область действия 223 явные 223 Подстановки 42 Подчиненная форма/отчет 92 Показатель 18 Получение фокуса 210 Поля-дескрипторы 23 Построитель выражений 232 макросов 232 программ 143 Потеря фокуса 208 Префикс 127 Программа VBA 221 Программная среда 13 Просмотр объектов 229 Процедуры Function 227 Sub 226 VBA 145 инструкция 226 описание 226
Р Расширение .dat 125 .dbf 125 .doc 84 .map 82 .mdb 105 .snp 99, 104 Режим SQL 158 диалога 12 конструктора страницы 108, 122 конструктора форм 61 корректировки 12 начальной загрузки 12
Access 2000
реорганизации и анализа 12 таблицы 28, 54, 155 фильтра 75 формы 130 Реквизит 18 значение 18 имя 18 признак 18 Репликация 33, 34
С Свертка информации 51 Сводная таблица 119, 122 Свойства объектов 220 Format 35, 54 Связанные поля 48 каскадное обновление 49 каскадное удаление 49 Связи 47 Сервер 118 Словарные файлы 139 Событие 205 Сортировка записей 134 Списки аварий 160 аргументов 227 полей 119 Средства управления программой 230 Статическая копия отчета 99, 104 Столбец подстановки 43 Страница доступа к данным анализ данных 107 ввод данных 107 групповая 121 диалоговый отчет 107 Структура двухуровневая 51 трехуровневая 51 Структуризация данных 19 СУБД 127, 131, 140
Т Таблицы базовая 56 дочерняя 48 родительская 48
271
Алфавитный указатель
Твердая копия 55 Тип объединения 49 Тип связи 49 Типы данных 32 Autonumber 33 Currency 33 Data/Time 33 Hyperlink 34 Lookup Wizard 34 Memo-поля 33 Number 33 Text 33 Yes/No 34
У
С CD-ROM 252 Clarion 3.0 12 Customize 252
D Data Access Page Toolbox 106, 122 Data type 32 dBase3 125 Description 32
E Excel 34, 82, 83, 121
F
Условия отбора 184 Условные операторы 230 Уточнение 22
Field name 32 FoxPro 2.5 12
Ф
H
Файлы данных 15 источник 126 Фактографическая информация 18 Фильтр 232 Флажок 112 Фокус 206 Форматы данных 14, 123, 140 Формы 55, 90 Функции 155, 225 встроенные 144 специализированные 144
HTML 106
ч ЧС 84, 87, 124, 174
M Microsoft Office 82, 83 MS Query 199
N Null 78
О ODBC 198 OLE 34
s
э
Setup.exe 252 SQL 141
Экспорт страницы доступа к данным 119 Элемент данных 19, 69, 120, 208, 210 управления активный 208
V
Я
Web браузер 118 сервер 118
Языки программирования 141, 145
VBA 219
W