link3456 link3457 link3458 link3459 link3460 link3461 link3462 link3463 link3464 link3465 link3466 link3467 link3468 link3469 link3470 link3471 link3472 link3473 link3474 link3475 link3476 link3477 link3478 link3479 link3480 link3481 link3482 link3483 link3484 link3485 link3486 link3487 link3488 link3489 link3490 link3491 link3492 link3493 link3494 link3495 link3496 link3497 link3498 link3499 link3500 link3501 link3502 link3503 link3504 link3505 link3506 link3507 link3508 link3509 link3510 link3511 link3512 link3513 link3514 link3515 link3516 link3517 link3518 link3519 link3520 link3521 link3522 link3523 link3524 link3525 link3526 link3527 link3528 link3529 link3530 link3531 link3532 link3533 link3534 link3535 link3536 link3537 link3538 link3539 link3540 link3541 link3542 link3543 link3544 link3545 link3546 link3547 link3548 link3549 link3550 link3551 link3552 link3553 link3554 link3555 link3556 link3557 link3558 link3559 link3560 link3561 link3562 link3563 link3564 link3565 link3566 link3567 link3568 link3569 link3570 link3571 link3572 link3573 link3574 link3575 link3576 link3577 link3578 link3579 link3580 link3581 link3582 link3583 link3584 link3585 link3586 link3587 link3588 link3589 link3590 link3591 link3592 link3593 link3594 link3595 link3596 link3597 link3598 link3599

Пример использования компонента TQuery

Попробуем применить полученные сведения для создания приложения, использующего компоненты TTable, TQuery, TDataSource, TDBGrid. Воспользуемся для этой цели таблицами Customer.db и Orders.db, имеющимися в базе данных BCDEMOS, входящей в комплект поставки Borland C++ Builder. Данное приложение должно будет выводить списки клиентов из таблицы Customer, их заказов из таблицы Orders, а также позволять выбирать диапазон номеров клиентов.

Создадим новый проект и сохраним его главную форму как CUST1.CPP, а проект как CUST.MAK.

Изменим заголовок заголовок формы на "Контроль заказов". Разместим на форме компонент TDBGrid, два компонента TGroupBox, один компонент TTable, два компонента TQuery, три компонента TDataSource. На компонент GroupBox1 поместим три компонента TRadioButton и два компонента TButton. На компонент GroupBox2 поместим два компонента TEdit, два компонента TEdit и один компонент TButton.

Рис. 11. Расположение компонентов на форме приложения CUST

Установим следующие свойства для этих компонентов:

Имя компонента Свойство Значение
Table1 DatabaseName BCDEMOS
  TableName CUSTOMER.DB
  Active false
DataSource1 DataSet Table1
DBGrid1 DataSource DataSource1
Query1 Database Name BCDEMOS
  SQL select * from orders
  Active false
DataSource2 DataSet Query1
Query2 DatabaseName BCDEMOS
DataSource3 DataSet Query2
Button1 Caption Открыть список &клиентов
Button2 Caption Открыть список &заказов
RadioButton1 Caption Клиенты
  Checked true
RadioButton2 Caption Заказы
GroupBox1 Caption  
GroupBox2 Caption  
Button3 Caption Установить &диапазон
Edit1 Text  
Edit2 Text  
Label1 Caption Начало:
Label2 Caption Конец:
RadioButton3 Caption Заказы клиентов

Создадим обработчик события OnClick для кнопки Button1:

 void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Table1->Active)
{
Table1->Close();
Button1->Caption = "Ioe?uou nienie &eeeaioia";
}
else
{
Table1->Open();
Button1->Caption= "Cae?uou nienie &eeeaioia";
}
} 

Теперь при нажатии на эту кнопку таблица Customer будет то открываться, то закрываться, при этом будет изменяться и надпись на кнопке.

Создадим обработчик события OnClick для кнопки Button2:

 void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (Query1->Active)
{
Query1->Active = false;
Button2->Caption = "Ioe?uou список &caeacia";
}
else
{
Query1->Active = true;
Button2->Caption = "Заe?uou список &caeacia";
}
}

При нажатии на кнопку Button2 будет то открываться, то закрываться запрос Query1, содержащий список заказов:

Создадим обработчики событий OnClick для радиокнопок RadioButton1 и RadioButton2:

 void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
DBGrid1->DataSource = DataSource1;
}
//------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
DBGrid1->DataSource =DataSource2;
}

Теперь с помощью этих радиокнопок можно переключаться между списком клиентов и списком заказов.

Создадим обработчик события OnClick для кнопки Button3:

 void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (Table1->Active)
{
Table1->SetRangeStart();
Table1->Fields[0]->AsString = Edit1->Text;
Table1->SetRangeEnd();
Table1->Fields[0]->AsString = Edit2->Text;
Table1->ApplyRange();
}
}

Теперь с помощью полей редактирования Edit1 и Edit2 и кнопки Button3 можно выбрать диапазон номеров клиентов для отображения сведений о них в DBGrid1.

Затем с помощью Visual Query Builder установим свойство SQL компонента Query2. Выберем в качестве имени базы данных BCDEMOS и внесем в запрос таблицы CUSTOMER и ORDERS. Затем установим связь между таблицами, проведя линию от поля CustNo в таблице CUSTOMER к полю CustNo в таблице ORDERS.

Внесем в запрос следующие поля:

  • Customer.CustNo
  • Customer.Company
  • Orders.OrderNo
  • Orders.AmountPaid

Рис. 12. Использование Visual Query Builder для создания комбинированного запроса

Теперь отсортируем результаты запроса по номеру покупателя и выйдем из Visual Query Builder.

Используя инспектор объектов, выберем компонент Query2 и установим его свойство Active равным true.

Создадим обработчик события OnClick для RadioButton3:.

 void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
DBGrid1->DataSource= DataSource3;
}

Скомпилируем приложение. Щелкнем кнопками и "Открыть список заказов", чтобы открыть оба набора данных. Попробуем, используя радиокнопки, переключаться между ними.

Рис. 13. Так выглядит готовое приложение

Нажмем кнопку "Открыть список клиентов". Введем значения полей "Начало" и "Конец" (например, 1200 и 1700 соответственно) и затем нажмем кнопку "Установить диапазон". Убедимся, что значения номеров заказов действительно находятся в пределах этого диапазона.

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