576________,____________________________________Глава 10

Кнопка Новый запрос начинает формирование запроса, посылая в MSQL текст
«Select ». Затем пользователь может вводить имена полей или непосредственной
текст, или, чтобы не ошибиться, выбирая их имена из списка Поле. При вводе со-
вокупных характеристик или вычисляемых полей пользователь может брать необ-
ходимые символы и ключевые слова из списка Операции, знаки. При желании по-
льзователь может щелкнуть на кнопке Условие (в запрос вводится элемент
WHERE), на кнопке Порядок (в запрос вводится элемент ORDER BY) или кнопке
Группировка (в запрос вводится элемент GROUP BY) и сформировать условия отбо-
ра, сортировки, группирования. После того, как запрос сформирован, пользова-
тель выполняет его щелчком на кнопке Выполнить и в окне отображаются резуль-
таты запроса.

Ниже приведен полный текст данного приложения.

// Перечислимый тип, определяющий режим работы
// в каждый момент времени

enum TRegim {RNone, RFields, RWhere, ROrder, REnd) Regim;

//—————————————————————————

void _fastcall  TFormI::ADDS(String s)
(

// Добавление в конец последней строки в Memo новой строки s

MSQL->Lines->Strings[MSQL->Lines->Count-l] =

MSQL->Lines->Strings[MSQL->Lines->Count-l] + s;

}

//—————————————————————————

void _fastcall TFormI::CBFieldsChange(TObject *Sender)
(

if ((Regim == REnd)I I(MSQL->Lines->Count < 1))
ShowMessage("Начните новый запрос или вводите оператор вручную");

else ADDS!" "+CBFields->Text) ;

1

//————————————————————————

void _fastcall TFormI::FormCreate(TObject *Sender)

(

// Загрузка в выпадающий список имен полей таблицы

Query->GetFieldNames(CBFields->Items) ;

CBFields->Items->Insert(0,"*");

CBFields->ItemIndex = 0;

CBOp->ItemIndex = 0;

Regim = RNone;

}

II————————————————————————

void _fastcall TFormI::BbeginClick(TObject *Sender)
(

MSQL->Clear() ;

MSQL->Lines->Add("Select ");

Regim = RFields;

//————————————————————————

void   fastcall TFormI::BexecClick(TObject *Sender)
(

if (Regim == RNone)
(

ShowMessage("Вы не ввели запрос");

return;

}

if (Regim == RFields)
ADDS(" FROM PERS") ;

Regim = REnd;

Query->SQL->Assign(MSQL->Lines) ;