void __fastcall Tmain_Form::speedfind_EditChange(TObject *Sender)
{
TLocateOptions SearchOptions;
pr_Query->Locate("FAM", speedfind_Edit->Text,
SearchOptions << loPartialKey << loCaseInsensitive);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryCalcFields(TDataSet *DataSet)
{
pr_QueryAGE->Value = Year - pr_QueryYEAR_B->Value;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryAfterScroll(TDataSet *DataSet)
{
if (PageControl->ActivePage == TabEdit) {
// відображенняданихпропоточнуперсону
chdp_ComboBox -> ItemIndex =
chdp_ComboBox->Items->IndexOf(pr_QueryDEP->AsString);
chfam_Edit->Text = pr_QueryFAM->AsString;
chname_Edit->Text = pr_QueryNAM->AsString;
chgrand_Edit->Text = pr_QueryPAR->AsString;
chyear_CSpinEdit->Value = pr_QueryYEAR_B->AsInteger;
if (pr_QuerySEX->AsString == "ч") sex2_RadioGroup->ItemIndex = 0;
else sex2_RadioGroup->ItemIndex = 1;
}
pr_Label->Caption = pr_QueryNUM->AsString;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_QueryBeforePost(TDataSet *DataSet)
{
if (!CanPost) {
DataSet->Cancel();
Abort;
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chadd_ButtonClick(TObject *Sender)
{ // додаваннязаписудотаблиці PERS
insert_StoredProc->ParamByName("pDEP")->AsString = chdp_ComboBox->Text;
insert_StoredProc->ParamByName("pFAM")->AsString = chfam_Edit->Text;
insert_StoredProc->ParamByName("pNAM")->AsString = chname_Edit->Text;
insert_StoredProc->ParamByName("pPAR")->AsString = chgrand_Edit->Text;
insert_StoredProc->ParamByName("pYEAR_B")->AsInteger = chyear_CSpinEdit->Value;
insert_StoredProc->ParamByName("pSEX")->AsString =
sex2_RadioGroup->Items->Strings[sex2_RadioGroup->ItemIndex];
sql_Operator =
"Insert into PERS (DEP, FAM, NAM, PAR, YEAR_B, SEX)"
" VALUES (:pDEP, :pFAM, :pNAM, :pPAR, :pYEAR_B, :pSEX)";
sql_Label->Caption = sql_Operator;
insert_StoredProc->Prepare();
insert_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
ShowMessage ("Вставкузаписузбереженоюпроцедурою INSERTdbP виконаноуспішно!");
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chdelete_ButtonClick(TObject *Sender)
{ // видалення поточного запису з таблиці PERS
if (Application->MessageBox("Ви дійсно бажаєте видалити поточний запис?",
"Підтвердіть видалення запису",
MB_YESNO + MB_ICONEXCLAMATION) == IDYES) {
delete_StoredProc->ParamByName("pNUM")->AsInteger =
pr_QueryNUM->AsInteger;
sql_Operator = "Delete from PERS where NUM = :pNUM";
sql_Label->Caption = sql_Operator;
delete_StoredProc->Prepare();
delete_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
ShowMessage ("Видаленнязаписузбереженоюпроцедурою DELETEdbP виконаноуспішно!");
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::chpost_ButtonClick(TObject *Sender)
{
update_StoredProc->ParamByName("pDEP")->AsString = chdp_ComboBox->Text;
update_StoredProc->ParamByName("pFAM")->AsString = chfam_Edit->Text;
update_StoredProc->ParamByName("pNAM")->AsString = chname_Edit->Text;
update_StoredProc->ParamByName("pPAR")->AsString = chgrand_Edit->Text;
update_StoredProc->ParamByName("pYEAR_B")->AsInteger = chyear_CSpinEdit->Value;
update_StoredProc->ParamByName("pSEX")->AsString =
sex2_RadioGroup->Items->Strings[sex2_RadioGroup->ItemIndex];
sql_Operator =
"Update PERS Set DEP = :pDEP, YEAR_B = :pYEAR_B, SEX = :pSEX "
" Where (FAM = :pFAM) and (NAM = :pNAM) and (PAR = :pPAR)";
sql_Label->Caption = sql_Operator;
update_StoredProc->Prepare();
update_StoredProc->ExecProc();
dp_ComboBoxChange(Sender);
if (update_StoredProc->ParamByName("NUMBER")->AsInteger == 0)
ShowMessage ("* Помилкапоновленнязапису!");
else
ShowMessage ("Поновленнязаписузбережено.процедурою UPDATEdbP виконаноуспішно!");
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::PageControlChange(TObject *Sender)
{
if (PageControl->ActivePage == TabEdit)
pr_QueryAfterScroll(pr_Query);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::minage_CSpinEditChange(TObject *Sender)
{
AnsiString s =
"(YEAR_B<=" + IntToStr(int(Year - minage_CSpinEdit->Value)) +
")and(YEAR_B>=" + IntToStr(int(Year - maxage_CSpinEdit->Value)) +
")and(SEX=";
if (!sex_RadioGroup->ItemIndex) s += "'ч')";
else s += "'ж')";
// автоматичне поновлення відбору записів
select_BitBtn->Kind = bkCancel;
select_BitBtn->Caption = "Відмінитивідбір";
pr_Query->Filter = s;
pr_Query->Filtered = true;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::select_BitBtnClick(TObject *Sender)
{
if (pr_Query->Filtered) { // відмінарежимуфільтрації
pr_Query->Filtered = false;
select_BitBtn->Kind = bkYes;
select_BitBtn->Caption = "Поновитивідбір";
} else { // встановленнярежимуфільтрації
select_BitBtn->Kind = bkCancel;
select_BitBtn->Caption = "Відмінитивідбір";
minage_CSpinEditChange(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_DBGridCellClick(TColumn *Column)
{
if (PageControl->ActivePage == TabEdit) {
chdp_ComboBox -> ItemIndex =
chdp_ComboBox->Items->IndexOf(pr_QueryDEP->AsString);
chfam_Edit->Text = pr_QueryFAM->AsString;
chname_Edit->Text = pr_QueryNAM->AsString;
chgrand_Edit->Text = pr_QueryPAR->AsString;
chyear_CSpinEdit->Value = pr_QueryYEAR_B->AsInteger;
if (pr_QuerySEX->AsString == "ч") sex2_RadioGroup->ItemIndex = 0;
else sex2_RadioGroup->ItemIndex = 1;
}
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::Delay(unsigned long int mSeconds)
{ // затримканадекількамілісекунд
unsigned long int FirstTick;
FirstTick = GetTickCount();
do
Application->ProcessMessages();
while (GetTickCount() - FirstTick <= mSeconds);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::prview_RadioGroupClick(TObject *Sender)
{
dp_ComboBoxChange (Sender);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_Form::pr_DBGridKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
pr_Label->Caption = pr_QueryNUM->AsString;
}
//---------------------------------------------------------------------------
Длявиконанняприкладеннятребапопередньозавантажитинавиконанняприкладення-сервер IBServer.EXE, якезазвичайзнаходитьсязамаршрутом "E:\Program Files\InterBase Corp\InterBase\Bin\" іобслуговуєзапитидобазиданих Interbase. Після завантаження поточ-ного проекту на виконання цей сервер виводить на екран запит (мал.. 1.21) , у полі Password: якого треба ввести пароль доступу masterkey.:
Малюнок 1.21
Приклад вигляду форми під час функціонування прикладення наведено на мал. 1.22.
Малюнок 1.22
Контрольнi запитання:
1. Детально опишіть компоненти RAD: TDataSource, TQuery, TDBMemo, TDBGrid, TDBImage, TDBText, TDBNavigator, TStoredProc.
2. Як створити БД Interbase і призначити їй аліас?
3. Як створити індекси таблиці БД Interbase?
4. Як створити і використати у прикладенні перегляд таблиці БД Interbase?
5. Яким чином створюється і для чого використовується генератор БД Interbase?
6. Як призначити зв’язок компонентів з реальною БД?
7. Яким чином створюється і для чого використовується триггер БД Interbase?
8. Яким чином створюється і для чого використовується збережена процедура БД Inter-base?
9. Для чого використовується оператор SQL “SELECT”, наприклад:
"Select * from DEP where DEP=:PDEP"?
10. Опишіть методику додавання і видалення запису до/з таблиці БД. Чому для цього використовується додатковий компонент TQuery?
11. Опишіть методику додавання, видалення і корегування записів таблиці БД із викорис-танням збережених процедур.
12. Дайте докладні пояснення до розробленої програми.