- •1. Описание предметной области
- •1.1 Назначение информационной системы
- •1.2. Характеристика документов и атрибутов предметной области
- •2. Проектирование информационной системы
- •2.1. Построение инфологической модели
- •2.2. Описание информационных объектов
- •3. Объекты базы данных Microsoft Access
- •3.1. Таблицы
- •3.2. Запросы
- •3.3. Экранные формы ввода и редактирования данных
- •3.4. Отчеты
- •3.5. Макросы
- •3.6. Главная кнопочная форма
- •Список использованной литературы
3.2. Запросы
Для решения поставленной задачи разработаны SQL-запросы, описанные ниже.
Запрос «Загрузка врачей за период» подсчитывает количество пациенток по каждому врачу за заданный период времени. Период задается с помощью специальной формы, значения полей которой являются параметрами данного запроса (а также нескольких других запросов, имена которых заканчиваются словами «… за период»). Вид запроса в режиме конструктора представлен на рис. 4, а ниже приведен текст запроса на языке SQL:
Рис. 4. Запрос «Загрузка врачей за период» в режиме конструктора
SELECT Врач.ФИО, Count(Стационар.Код) AS Пациенток
FROM Врач INNER JOIN Стационар ON Врач.КодВрача = Стационар.Врач
WHERE (((Стационар.Начало)<=[Forms]![Отчеты за период]![Конец]) AND ((Стационар.Конец)>=[Forms]![Отчеты за период]![Начало] Or (Стационар.Конец) Is Null))
GROUP BY Врач.ФИО
ORDER BY Врач.ФИО;
Результаты запроса «Загрузка врачей за период» (в этом и последующих запросах за период в качестве периода указывался февраль 2007 г.):
Загрузка врачей за период | |
Врач |
Пациенток |
Гайдукевич Инна Федоровна |
2 |
Дзюбенко Ирина Федоровна |
1 |
Терентьев Михаил Иванович |
2 |
Запрос «Загрузка палат» подсчитывает для каждой палаты количество размещенных в ней пациенток. Для этого в запросе подсчитывается общее число помещавшихся в палату пациенток (непустых значений поля Код), общее число выписанных пациенток (непустых значений поля Переведена), и на основании этих данных — количество пациенток, находящихся в палате на текущий момент. Вид запроса в режиме конструктора представлен на рис. 5, а ниже приведен текст запроса на языке SQL:
Рис. 5. Запрос «Загрузка палат» в режиме конструктора
SELECT Палата.№, Палата.Мест, Count(Размещение.Код) AS Помещено, Count(Размещение.Переведена) AS Выписано, [Помещено]-[Выписано] AS Пациенток, [Мест]-[Пациенток] AS Свободно
FROM Палата LEFT JOIN Размещение ON Палата.№ = Размещение.Палата
GROUP BY Палата.№, Палата.Мест;
Результаты запроса «Загрузка палат»:
Загрузка палат | |||||
Палата № |
Мест |
Помещено |
Свободно |
Выписано |
Пациенток |
201 |
2 |
2 |
0 |
0 |
2 |
202 |
2 |
1 |
2 |
1 |
0 |
203 |
3 |
1 |
2 |
0 |
1 |
204 |
3 |
1 |
2 |
0 |
1 |
205 |
2 |
1 |
1 |
0 |
1 |
206 |
2 |
3 |
0 |
1 |
2 |
207 |
1 |
1 |
0 |
0 |
1 |
208 |
1 |
0 |
1 |
0 |
0 |
209 |
1 |
0 |
1 |
0 |
0 |
210 |
1 |
1 |
1 |
1 |
0 |
301 |
2 |
1 |
1 |
0 |
1 |
302 |
2 |
1 |
1 |
0 |
1 |
303 |
2 |
1 |
1 |
0 |
1 |
304 |
2 |
0 |
2 |
0 |
0 |
305 |
2 |
0 |
2 |
0 |
0 |
306 |
2 |
2 |
1 |
1 |
1 |
307 |
1 |
1 |
1 |
1 |
0 |
308 |
1 |
0 |
1 |
0 |
0 |
Запрос «Новорожденных за период» подсчитывает общее число новорожденных, а также количество среди них мальчиков и девочек, за заданный период. Вид запроса в режиме конструктора представлен на рис. 6, а ниже приведен текст запроса на языке SQL:
Рис. 6. Запрос «Новорожденных за период» в режиме конструктора
SELECT Count(Ребенок.Бирка) AS Новорожденных, Sum(IIf(Ребенок!Пол="м",1,0)) AS Мальчиков, Sum(IIf(Ребенок!Пол="м",0,1)) AS Девочек
FROM Ребенок
WHERE (((Ребенок.ДР)>=[Forms]![Отчеты за период]![Начало] And (Ребенок.ДР)<=[Forms]![Отчеты за период]![Конец]));
Результаты запроса «Новорожденных за период»:
Новорожденных за период | ||
Новорожденных |
Мальчиков |
Девочек |
1 |
1 |
0 |
Запрос «Пациенток за период» подсчитывает количество пациенток за период (точнее — количество пребываний в стационаре, так что если в течение заданного периода одна и та же роженица помещалась в стационар дважды, с перерывом, то она будет «подсчитана» дважды). Вид запроса в режиме конструктора представлен на рис. 7, а ниже приведен текст запроса на языке SQL:
SELECT Count(Стационар.Код) AS Пациенток
FROM Стационар
HAVING (((Стационар.Начало)<=[Forms]![Отчеты за период]![Конец]) AND ((Стационар.Конец)>=[Forms]![Отчеты за период]![Начало] Or (Стационар.Конец) Is Null));
Рис. 7. Запрос «Пациенток за период» в режиме конструктора
Результаты запроса «Пациенток за период»:
Пациенток за период |
Пациенток |
5 |
Запрос «Родов за период» вычисляет количество родов, произошедших в течение заданного периода. Вид запроса в режиме конструктора представлен на рис. 8, а ниже приведен текст запроса на языке SQL:
Рис. 8. Запрос «Родов за период» в режиме конструктора
SELECT Count(Роды.Код) AS Родов
FROM Роды
HAVING (((Роды.Начало)<=[Forms]![Отчеты за период]![Конец]) AND ((Роды.Конец)>=[Forms]![Отчеты за период]![Начало] Or (Роды.Конец) Is Null));
Результаты запроса «Родов за период»:
Родов за период |
Родов |
2 |
Запрос «Сводная статистика за период» объединяет результаты трех описанных только что запросов в одном запросе — для формирования единого отчета. Вид запроса в режиме конструктора представлен на рис. 9, а ниже приведен текст запроса на языке SQL:
Рис. 9. Запрос «Сводная статистика за период» в режиме конструктора
SELECT [Пациенток за период].Пациенток, [Родов за период].Родов, [Новорожденных за период].Новорожденных, [Новорожденных за период].Мальчиков, [Новорожденных за период].Девочек
FROM [Пациенток за период], [Родов за период], [Новорожденных за период];
Результаты запроса «Сводная статистика за период»:
Сводная статистика за период | ||||
Пациенток |
Родов |
Новорожденных |
Мальчиков |
Девочек |
5 |
2 |
1 |
1 |
0 |
Запрос «Роды за период» отбирает данные о родах, произошедших в течение заданного периода времени, с целью формирования соответствующего отчета. Вид запроса в режиме конструктора представлен на рис. 10, а ниже приведен текст запроса на языке SQL:
Рис. 10. Запрос «Роды за период» в режиме конструктора
SELECT Роды.Код, Роды.Начало, Роды.Конец, CDate([Конец]-[Начало]) AS Продолжительность, Роды.Описание, Ребенок.Пол, Ребенок.ДР, Ребенок.Имя, Ребенок.Рост, Ребенок.Вес
FROM Роды LEFT JOIN Ребенок ON Роды.Код = Ребенок.Код
WHERE (((Роды.Начало)<=[Forms]![Отчеты за период]![Конец]) AND ((Роды.Конец)>=[Forms]![Отчеты за период]![Начало] Or (Роды.Конец) Is Null));
Результаты запроса «Роды за период»:
Роды за период | |||||||||
Код |
Начало |
Конец |
Продолжительность |
Описание |
Пол |
Дата и время рождения |
Имя |
Рост |
Вес |
Стасюк Елена Павловна |
25.02.07 7:20:00 |
25.02.07 8:50:00 |
1:30:00 |
|
м |
25.02.07 8:30:00 |
Стасюк Даниил Максимович |
54 |
3,2 |
Кучерявенко Марина Сергеевна |
20.02.07 12:00:00 |
20.02.07 13:00:00 |
1:00:00 |
в результате позднего обращения плод спасти не удалось |
|
|
|
|
|
Запрос «Роженицы за период» отбирает данные о роженицах, пребывавших в стационаре в течение заданного периода времени. Вид запроса в режиме конструктора представлен на рис. 11, а ниже приведен текст запроса на языке SQL:
SELECT Роженица.ФИО, Роженица.ДР, Стационар.Код, Стационар.Начало, Стационар.Конец, Стационар.Описание, Стационар.Врач, Размещение.Палата, Размещение.Помещена, Размещение.Переведена
FROM (Роженица INNER JOIN Стационар ON Роженица.№ = Стационар.Роженица) INNER JOIN Размещение ON Стационар.Код = Размещение.Код
WHERE (((Стационар.Начало)<=[Forms]![Отчеты за период]![Конец]) AND ((Стационар.Конец)>=[Forms]![Отчеты за период]![Начало] Or (Стационар.Конец) Is Null))
ORDER BY Стационар.Начало, Размещение.Помещена;
Рис. 11. Запрос «Роженицы за период» в режиме конструктора
Результаты запроса «Роженицы за период»:
Роженицы за период | |||||||||
Ф.И.О. |
Дата рожд. |
Код |
Начало |
Конец |
Описание |
Врач |
Палата |
Помещена |
Переведена |
Алексенко Анна Владимировна |
08.02.85 |
6 |
03.02.07 |
20.02.07 |
помещена с стационар на сохранение |
Гайдукевич Инна Федоровна |
210 |
03.02.07 |
12.02.07 |
Алексенко Анна Владимировна |
08.02.85 |
6 |
03.02.07 |
20.02.07 |
помещена с стационар на сохранение |
Гайдукевич Инна Федоровна |
307 |
12.02.07 |
20.02.07 |
Кучерявенко Марина Сергеевна |
01.09.89 |
8 |
20.02.07 11:50:00 |
25.02.07 |
поступила после того, как отошли воды, сразу помещена в родовое отделение |
Терентьев Михаил Иванович |
306 |
20.02.07 15:00:00 |
25.02.07 |
Стасюк Елена Павловна |
12.03.85 |
7 |
21.02.07 14:30:00 |
06.03.07 |
|
Дзюбенко Ирина Федоровна |
206 |
21.02.07 14:50:00 |
06.03.07 |
Лебедкина Ирина Михайловна |
30.01.89 |
2 |
24.02.07 12:20:00 |
|
|
Гайдукевич Инна Федоровна |
204 |
24.02.07 13:00:00 |
|
Иваненко Людмила Петровна |
27.12.82 |
9 |
27.02.07 14:30:00 |
|
|
Терентьев Михаил Иванович |
301 |
27.02.07 14:55:00 |
|
Запрос «Список по палатам» формирует список рожениц, находящихся в настоящее время в каждой из палат. Вид запроса в режиме конструктора представлен на рис. 12, а ниже приведен текст запроса на языке SQL:
SELECT Палата.№, Роженица.ФИО, Роженица.ДР, Стационар.Начало
FROM (Роженица INNER JOIN Стационар ON Роженица.№ = Стационар.Роженица) INNER JOIN (Палата INNER JOIN Размещение ON Палата.№ = Размещение.Палата) ON Стационар.Код = Размещение.Код
WHERE (((Стационар.Конец) Is Null))
ORDER BY Палата.№;
Рис. 12. Запрос «Список по палатам» в режиме конструктора
Результаты запроса «Список по палатам»:
Список по палатам | |||
Палата № |
Ф.И.О. |
Дата рожд. |
Начало |
201 |
Пасс Алина Альбертовна |
10.05.82 |
04.03.07 |
201 |
Гудзь Наталья Олеговна |
11.01.80 |
03.03.07 13:25:00 |
203 |
Кононенко Анжела Петровна |
21.11.87 |
01.03.07 12:35:00 |
204 |
Лебедкина Ирина Михайловна |
30.01.89 |
24.02.07 12:20:00 |
205 |
Бубнова Анастасия Михайловна |
27.09.83 |
28.02.07 14:25:00 |
206 |
Вербицкая Елена Ивановна |
21.12.85 |
01.03.07 10:45:00 |
206 |
Кохан Виктория Петровна |
23.08.80 |
05.03.07 12:35:00 |
207 |
Михайлова Инна Николаевна |
24.06.81 |
04.03.07 15:50:00 |
301 |
Иваненко Людмила Петровна |
27.12.82 |
27.02.07 14:30:00 |
302 |
Пушкова Анна Ивановна |
28.10.83 |
02.03.07 13:20:00 |
303 |
Кутько Ирина Геннадиевна |
14.02.82 |
02.03.07 14:40:00 |
306 |
Самойленко Анна Николаевна |
31.05.88 |
05.03.07 12:20:00 |