Курсовая / Lab_3_4_sortirovka_vych_p
.docЛабораторная работа № 3.4
Сортировка по определенным полям и вычисляемые поля.
Для выполнения данной лабораторной работы вам понадобятся база, созданная в л.р. № 3.2. и проект, созданный в л.р. № 3.3. Откройте проект л.р. № 3.3 и на главную форму добавте компоненты RadioGroup и 2 компоненты RadioButton с панели Standard.
Переименуйте компоненту RadioGroup в rgSort , RadioButton1 в rbPrice, RadioButton2 в rbKol. В свойстве Caption для RadioGroup укажите «Сортировка по», RadioButton1 - Цена, RadioButton2 - Количество.
Для rbPrice (RadioButton1) свойство Checked в true. В событиях Events для rbPrice в OnClick щелкнуть 2 раза и и в обработчик прописать функцию:
1-й Вариант
//---------------------------------------------------------------------------
void __fastcall TForm1::rbPriceClick(TObject *Sender)
{
if(rbPrice->Checked)
{qrTovar->Sort="price ASC"; qrTovar->Active=true;}
if(rbKol->Checked)
{qrTovar->Sort="kolichestvo DESC"; qrTovar->Active=true;}
}
//---------------------------------------------------------------------------
Для rbPrice в событиях Events прописать rbPriceClick.*
* Примечание: При нажатии в процессе выполнения программы на кнопку rbPrice будет вызываться обработчик события rbPriceClick.
Для основной формы в событиях Events OnActivate щелкнуть 2 раза и в обработчик прописать функцию:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
rbPriceClick(this);
}
//---------------------------------------------------------------------------
Листинг программы:
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
rbPriceClick(this);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::qrTovarCalcFields(TDataSet *DataSet)
{
qrTovarSuma->Value = qrTovarkolichestvo->Value * qrTovarprice->Value;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cbOtdCloseUp(TObject *Sender)
{
String S;
if(cbPost->Text=="") S="";
else S=" and id_postav="+qrPostid_postavshik->AsString;
qrTovar->SQL->Clear();
qrTovar->SQL->Add("select * from tovar where id_otdel ="+qrOtdid_otdel->AsString + S);
qrTovar->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cbPostCloseUp(TObject *Sender)
{
String S;
if(cbPost->Text=="") S="";
else S=" and id_otdel="+qrOtdid_otdel->AsString;
qrTovar->SQL->Clear();
qrTovar->SQL->Add("select * from tovar where id_postav="+qrPostid_postavshik->AsString+S);
qrTovar->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::rbPriceClick(TObject *Sender)
{
if(rbPrice->Checked)
{qrTovar->Sort="price ASC"; qrTovar->Active=true;}
if(rbKol->Checked)
{qrTovar->Sort="kolichestvo DESC"; qrTovar->Active=true;}
}
//---------------------------------------------------------------------------
2-й Вариант
Необходимо в функции rbPriceClick (вместо существующего текста) сформировать SQL-запрос для qrTovar, в котором в зависимости от поля сортировки (rbPrice->Checked или rbKol->Checked), должна быть реализована выборка с соответствующей сортировкой и установить qrTovar->Active=true;
Формирование суммы
Необходимо создать под столбцом «Количество» - TLabel (lbSum), в свойство Caption которого мы будем записывать сумму этого поля (с учетом фильтра). Для этого надо на форму добавить ещё одну компоненту TADOQuery (qrT), связать его с ADOConnection1, функции cbOtdCloseUp() и cbPostCloseUp() надо дополнить, т.е. сформировать для него соответствующие SQL-запросы (qrT->SQL->Add(“…”);) и после выполнения этих запросов (qrT->Active=true;) – записать результат в наш TLabel.
( lbSum->Caption = qrT->Fields->Fields[0]->AsString;)
Необходимо учесть – как будет считаться сумма, пока не произошел выбор фильтра.