Разработка базы данных «Расход медикаментов», страница 7

                                                                                                                                       &&принтер

CommandGroup1.Command3.Click( ) && кнопка Выход

Release THISFORM                                  &&уничтожение формы


Пункт меню Exit (рис.9) позволяет осуществить выход либо из базы данных либо из VFP.

                                             Рис. 9 Содержимое пункта меню Exit

Выход реализуется следующим образом:

·  Из базы данных

CLEAR ALL

CLOSE ALL

SET SYSMENU TO DEFAULT && восстановление системного меню

·  Из Visual FoxPro 5

QUIT

Примеры обработки запросов:

Как можно было заметить в процедурах обработки формы запросов form_query.scx происходит лишь вызов запросов и нам по сути ничего не известно о его структуре. Чтобы восполнить данный пробел ниже приводится листинг этих запросов с примерами работы. Все запросы в приложении находятся в файлах QueryX.qpr ( где Х совпадает с номером запроса в задании)

Запрос №1: Сведения о лекарствах, назначенных определенному пациенту

SELECT Patient_medic.i_id_man AS Код_пациента, Patients.c_name;

AS Ф_И_О, Medic.с_name AS Название_лекарства,Medic.c_way AS;

Способ_приминения, Patient_medic.d_start AS Начало_лечения,;

 Patient_medic.d_end AS Конец_лечения, Patients.i_chamber AS;

 Номер_палаты, Id_separations.c_separation AS Отделение;

 FROM  medicines!medic INNER JOIN medicines!patient_medic;

    INNER JOIN medicines!patients;

    INNER JOIN medicines!chambers_separations;

    INNER JOIN medicines!id_separations ;

   ON  Id_separations.i_id_separation = Chambers_separations.i_id_separation ;

   ON  Chambers_separations.i_chamber = Patients.i_chamber ;

   ON  Patients.i_id_man = Patient_medic.i_id_man ;

   ON  Medic.i_id_medic = Patient_medic.i_id_medic;

 WHERE UPPER (Patients.c_name) LIKE ("%"+cPatientName+"%"); &&запись в таком виде             

                        &&позволяет осуществлять поиск не по полному имени, а по его любой части

 ORDER BY Patient_medic.i_id_man


                             Рис.10 Пример работы запроса при cPatientName = ”Ольга”

Запрос №2: Сведения о пациентах, которым назначено определенное лекарство

SELECT Patient_medic.i_id_man AS Код_пациента, Patients.c_name;

AS Ф_И_О, Medic.с_name AS Название_лекарства, Medic.c_way AS ;

Способ_приминения, Patient_medic.d_start AS Начало_лечения,;

Patient_medic.d_end AS Конец_лечения, Patients.i_chamber AS ;

Номер_палаты, Id_separations.c_separation AS Отделение;

 FROM  medicines!medic INNER JOIN medicines!patient_medic;

    INNER JOIN medicines!patients;

    INNER JOIN medicines!chambers_separations;

    INNER JOIN medicines!id_separations ;

   ON  Id_separations.i_id_separation = Chambers_separations.i_id_separation ;

   ON  Chambers_separations.i_chamber = Patients.i_chamber ;

   ON  Patients.i_id_man = Patient_medic.i_id_man ;

   ON  Medic.i_id_medic = Patient_medic.i_id_medic;

 WHERE UPPER(Medic.с_name) LIKE ("%"+cMedicName+"%");

 ORDER BY Patient_medic.i_id_man


                            Рис.11 Пример работы запроса при cMedicName = ”ирин”

Запрос №3: Данные о цене определенного лекарства

SELECT Medic.i_id_medic AS Код_лекарства, Medic.с_name;

AS Название_лекарства,Medic.c_way AS Способ_приминения,;

Price.y_price AS Цена, Price.d_data AS Дата_поставки;

 FROM  medicines!medic INNER JOIN medicines!price ;

   ON  Medic.i_id_medic = Price.i_id_medic;

 WHERE UPPER(Medic.с_name) LIKE ("%"+cMedicName+"%");


 ORDER BY Medic.i_id_medic

                             Рис.12 Пример работы запроса при cMedicName = ”нитроглицирин”

Запрос №4: Сведения о назначениях медикаментов на текущую дату пациентам определенной палаты.

SELECT Patient_medic.i_id_man AS Код_пациента, Patients.c_name AS;

ф_и_о, Medic.с_name AS Название_лекарства, Medic.c_way AS Способ_приминения,;

Patients.i_chamber AS Номер_палаты, Patient_medic.d_start AS;

Начало_лечения, Patient_medic.d_end AS Конец_лечения;

 FROM  medicines!patients INNER JOIN medicines!patient_medic;

    INNER JOIN medicines!medic ;

   ON  Medic.i_id_medic = Patient_medic.i_id_medic ;

   ON  Patients.i_id_man = Patient_medic.i_id_man;

 WHERE Patients.i_chamber = iChamber;

   AND Patient_medic.d_end >= dCurdata;

   AND Patient_medic.d_start <= dCurdata;

 ORDER BY Patient_medic.i_id_man


                                    Рис.13 Пример работы запроса при iChamber = 1

Заключение:

В результате проделанной работы, при использовании системы управления БД Visual FoxPro 5, была разработана база данных «Расход медикаментов». В ней все таблицы нормализованы до третьей усиленной формы Бойса-Кодда, вся информация распределена между следующими сущностями – Пациенты, Лекарства, Пациенты-Лекарства, Цены. Все данные разнесены по таблицам, которые при необходимости можно редактировать и обновлять. При помощи средств, предоставляемых Visual FoxPro, были разработаны формы, обеспечивающие необходимый пользовательский интерфейс, а также позволяющие организовать интерактивный режим выполнения запросов. Интерфейс пользователя поддерживает требуемый минимум команд управления приложением разработанной базы данных.

Список используемой литературы:

1.  Базиян М. Использование Visual FoxPro 6.0. Специальное издание: пер. с англ. – М.: ИД «Вильямс», 2001.

2.  Омельченко Л.  Самоучитель Visual FoxPro 6.0 – СПб.: BHV, 1999.

Список используемых электронных источников информации:

3.   Сайт www.citforum.ru

4.   Cайт www.microsoft.com/rus

5.   Электронная справка, прилагаемая к СУБД Visual FoxPro 5.0