Автоматизация работы системы Vedomost

Для автоматизации работы с таблицей Vedomost разместим на форме 2Query,1DataSource, 1DBgrid, 5Combobox, 1GroupBox, 3Checkbox, 2Button, 5Label. Установим значения компонентов, как на рисунке 16.

Рисунок 16 – Ведомость

 

Соединим Query1 и Query2 с базой данных. Установим значение DataSource1, DataSource=Query2. Работа формы заключается в том, что мы выбираем при помощи Combobox значения шифра специальности, группы, семестра, дисциплины, преподавателя и нажав кнопку «Вывести» в DBgrid мы увидим выставленные оценки студентов. Здесь мы применяем уже не статический, а динамический SQL, т.е. SQL-код для выборки стоит уже не в свойствах компонента Query, а применяется программно.

 

Для заполнения Combobox необходимыми значениями полей из разных таблиц мы объявляем в переменные:

 

sp_shifr: TstringList;//список шифров специальностей из таблицы Specialnost

sp_gr: TstringList;//список групп из таблицы Gruppa

sp_sem: TstringList;//список семестров из таблицы Disciplina

sp_disc: TstringList;//список дисциплин из таблицы Disciplina

sp_prep: TstringList; //список преподавателей из таблицы Prepodavarel

 

А для того, чтобы в Combobox появились значения необходимо написать обработчик события FormCreate для Form2

procedure TForm2.FormCreate(Sender: TObject);

begin

combobox1.Clear;

combobox2.Clear;

combobox3.Clear;

combobox4.Clear;

combobox5.Clear;

//shifr_specialnost

sp_shifr:=TstringList.Create;

query1.Close;

with query1 do

begin

close;

sql.Clear;

sql.Add('select shifr_specialnost');

sql.Add('from specialnost');

sql.Add('order by shifr_specialnost');

open;

while not eof do

begin

combobox1.Items.Add(fields[0].asstring);

sp_shifr.Add(fields[0].asstring);

next;

end;

end;

//gruppa

sp_gr:=TstringList.Create;

query1.Close;

with query1 do

begin

close;

sql.Clear;

sql.Add('select gruppa');

sql.Add('from gruppa');

sql.Add('order by gruppa');

open;

while not eof do

begin

combobox2.Items.Add(fields[0].asstring);

sp_gr.Add(fields[0].asstring);

next;

end;

end;

//semestr

sp_sem:=TstringList.Create;

query1.Close;

with query1 do

begin

close;

sql.Clear;

sql.Add('select semestr');

sql.Add('from disciplina');

sql.Add('group by semestr');

sql.Add('order by semestr');

open;

while not eof do

begin

combobox3.Items.Add(fields[0].asstring);

sp_sem.Add(fields[0].asstring);

next;

end;

end;

//disciplina

sp_disc:=TstringList.Create;

query1.Close;

with query1 do

begin

close;

sql.Clear;

sql.Add('select disciplina_p');

sql.Add('from disciplina');

sql.Add('order by disciplina_p');

open;

while not eof do

begin

combobox4.Items.Add(fields[0].asstring);

sp_disc.Add(fields[0].asstring);

next;

end;

end;

//prepodavatel

sp_prep:=TstringList.Create;

query1.Close;

with query1 do

begin

close;

sql.Clear;

sql.Add('select fio');

sql.Add('from prepodavatel');

sql.Add('order by fio');

open;

while not eof do

begin

combobox5.Items.Add(fields[0].asstring);

sp_prep.Add(fields[0].asstring);

next;

end;

end;

Далее для того, чтобы для указанных условий выборки в таблице DBgrid вышли соответствующие им данные необходимо выполнить следующий динамический запрос, который будет выполняться при нажатии кнопки «Вывести». Ниже представлен код данной процедуры:

procedure TForm2.Button3Click(Sender: TObject);

begin

with query2 do begin

query2.Close;

sql.Clear;

sql.add('select st.fio, v.lc1, v.pr1, v.srs1, v.lc2, v.pr2, v.srs2, v.examen, v.itog');

sql.Add('from vedomost v inner join specialnost s on (v.shifr_specialnost=s.shifr_specialnost)');

sql.Add('inner join student st on (v.kod_student=st.kod_student)');

sql.Add('inner join gruppa g on (st.gruppa=g.gruppa)');

sql.Add('inner join disciplina d on (v.kod_disciplina=d.kod_disciplina)');

sql.Add('inner join prepodavatel p on (v.kod_prepod=p.kod_prepod)');

sql.Add('where 1=1');

sql.Add('and s.shifr_specialnost='''+sp_shifr[combobox1.itemindex]+'''');

sql.Add('and g.gruppa='''+sp_gr[combobox2.itemindex]+'''');

sql.Add('and d.disciplina_p='''+sp_disc[combobox4.itemindex]+'''');

sql.Add('and p.fio='''+sp_prep[combobox5.itemindex]+'''');

open;

end;

end;

В результате при установлении всех условий выборки и нажатии кнопки «Вывести» мы получим данные об успеваемости за весь семестр. Но если нам необходимо узнать данные только первой аттестационной ведомости, второй аттестационной ведомости или итоговой ведомости, мы можем выбрать с помощью одного из трех Checkbox, которые сгруппированы в GroupBox.

Т.е. при нажатии Checkbox1 мы увидим данные первой аттестационной ведомости

procedure TForm2.CheckBox1Click(Sender: TObject);

begin

query2.FieldByName('lc2').Visible:=checkbox1.Checked;

query2.FieldByName('pr2').Visible:=checkbox1.Checked;

query2.FieldByName('srs2').Visible:=checkbox1.Checked;

query2.FieldByName('examen').Visible:=checkbox1.Checked;

query2.FieldByName('itog').Visible:=checkbox1.Checked;

end;

,Checkbox2 – второй

procedure TForm2.CheckBox2Click(Sender: TObject);

begin

query2.FieldByName('lc1').Visible:=checkbox2.Checked;

query2.FieldByName('pr1').Visible:=checkbox2.Checked;

query2.FieldByName('srs1').Visible:=checkbox2.Checked;

query2.FieldByName('examen').Visible:=checkbox2.Checked;

query2.FieldByName('itog').Visible:=checkbox2.Checked;

end;

,а Checkbox3 – итоговая ведомость

procedure TForm2.CheckBox3Click(Sender: TObject);

begin

query2.FieldByName('lc1').Visible:=checkbox3.Checked;

query2.FieldByName('pr1').Visible:=checkbox3.Checked;

query2.FieldByName('srs1').Visible:=checkbox3.Checked;

query2.FieldByName('lc2').Visible:=checkbox3.Checked;

query2.FieldByName('pr2').Visible:=checkbox3.Checked;

query2.FieldByName('srs2').Visible:=checkbox3.Checked;

end;

Рисунок17 -  Ведомость при выполнениях условий выборки


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: