Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пояснительная к курсачу.docx
Скачиваний:
67
Добавлен:
12.03.2015
Размер:
749.7 Кб
Скачать

Поиск ремонтов

Данный пункт меню дает пользователю возможность просматривать зарегистрированные в системе ремонты, фильтруя их по различным параметрам, таким как вид ремонта, марка ремонтируемого станка, дата регистрации. Это меню состоит из нескольких подпунктов:

По виду

В данном пункте меню реализуется функция просмотра ремонтов из таблицы REPAIRтолько одного конкретного вида. Вид ремонта задается пользователем через выпадающий список. Вид формы:

Помимо всех ремонтов заданного вида на форме отображается общая сумма этих ремонтов. Таким образом, форма для своей работы использует сразу два запроса, на поиск ремонтов и на вычисление их общей стоимости.

Запрос на поиск ремонтов:

select r.REPAIR_STARTDATE,

r.MACHINE_CODE,

rt.REPAIRTYPE_NAME,

rt.REPAIRTYPE_COST,

r.REPAIR_DONE,

r.REPAIR_NOTE

from REPAIR r

inner join REPAIRTYPE rt

on r.REPAIRTYPE_CODE = rt.REPAIRTYPE_CODE

where rt.REPAIRTYPE_CODE = :rt_code

order by REPAIR_STARTDATE asc

Запрос выбирает из REPAIRвсе ремонты, код вида ремонта которых равен заданному пользователем (параметр:rt_codeопределяется через выбранный элемент выпадающего списка). Второй запрос аналогичен этому, но вместо выборки всех ремонтов, удовлетворяющих условию, он вычисляет их общую стоимость:

select

case

when (sum(rt.REPAIRTYPE_COST) is null)

then 0

else

sum(rt.REPAIRTYPE_COST)

end as S

from REPAIR r

inner join REPAIRTYPE rt

on r.REPAIRTYPE_CODE = rt.REPAIRTYPE_CODE

where rt.REPAIRTYPE_CODE = :rt_code

Для того, чтобы результат мог корректно отобразиться в текстовом поле, значение null, возвращаемое запросом, заменяется на 0.

Реализация в приложении:

/* просмотр ремонтов по виду */

private void btnRepairTypeOK_Click(object sender, EventArgs e) {

// извлечение выбранного типа из comboBox'а

DataRowView drw_type = (DataRowView)comboRepairType.SelectedItem;

DataRow dr_type = drw_type.Row;

int repairtype_code = dr_type.Field<int>("REPAIRTYPE_CODE");

// запрос и заполнение таблицы

OleDbCommand cmd = new OleDbCommand("<текст запроса 1>", con, trans);

cmd.Parameters.AddWithValue("rt_code", repairtype_code.ToString());

OleDbDataAdapter ad = new OleDbDataAdapter(cmd);

dtRepairTypeQ.Clear();

ad.Fill(dtRepairTypeQ);

dgRepairType.DataSource = dtRepairTypeQ;

ad.Dispose();

cmd.Dispose();

// запрос на вычисление суммы

cmd = new OleDbCommand("<текст запроса 2>", con, trans);

cmd.Parameters.AddWithValue("rt_code", repairtype_code.ToString());

ad = new OleDbDataAdapter(cmd);

dtRepairTypeQSum.Clear();

ad.Fill(dtRepairTypeQSum);

txtRepairTypeSum.Text

= ((decimal)dtRepairTypeQSum.Rows[0]["S"]).ToString();

cmd.Dispose();

ad.Dispose();

}

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

По марке

На этой форме реализуется фильтр ремонтов по марке станка. Внешний вид формы аналогичен предыдущей, за исключением того, что в ComboBox'е предоставляется выбор не вида ремонта, а марки ремонтируемого станка. Интерфейс формы с уже выполненным запросом:

Здесь также используются два запроса: на выбор ремонтов и на вычисление их общей стоимости.

Запрос на выбор ремонтов по марке станка:

select r.MACHINE_CODE,

rt.REPAIRTYPE_NAME,

rt.REPAIRTYPE_COST,

r.REPAIR_STARTDATE,

r.REPAIR_DONE,

r.REPAIR_NOTE

from REPAIR r

inner join REPAIRTYPE rt

on r.REPAIRTYPE_CODE = rt.REPAIRTYPE_CODE

inner join MACHINE m

on r.MACHINE_CODE = m.MACHINE_CODE

inner join MACHINE_TYPE mt

on m.MACHINETYPE_CODE = mt.MACHINETYPE_CODE

inner join MARK mk

on mt.MARK_CODE = mk.MARK_CODE

where mk.MARK_CODE = :mark_code

Запрос на вычисление общей стоимости:

select

case

when (sum(rt.REPAIRTYPE_COST) is null)

then 0

else

sum(rt.REPAIRTYPE_COST)

end as S

from REPAIR r

inner join REPAIRTYPE rt on r.REPAIRTYPE_CODE = rt.REPAIRTYPE_CODE

inner join MACHINE m on r.MACHINE_CODE = m.MACHINE_CODE

inner join MACHINE_TYPE mt on m.MACHINETYPE_CODE = mt.MACHINETYPE_CODE

inner join MARK mk on mt.MARK_CODE = mk.MARK_CODE

where mk.MARK_CODE = 5

Реализация данной функции в программе идентична предыдущему пункту, разница только в текстах запросов, передаваемых объектам OleDbCommand.