|
|||
й Вариант. й Вариант. Формирование суммы
Лабораторная работа № 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;) Необходимо учесть – как будет считаться сумма, пока не произошел выбор фильтра.
|
|||
|