Шаг 4. Избирательное отображение данных

Для управления отображениям информации из таблиц базы данных удобнее использовать компонент ADOQuery с вкладки ADO. Его свойства аналогичны компоненту ADOTable, но дополнительно существует возможность использовать язык запросов SQL.

Создайте новую форму и сохраните новый модуль как Otbor.pas, разместите на новой форме DBGrid1. На форме Модуля Данных разместите компонент ADOQuery1 и переименуйте его в QueryMagazin. Также разместите компонент DataSource2 с вкладки Data Access. Компонент QueryMagazin подключите к ADOConnection1, а у компонента DataSource2 свойство DataSet установите в QueryMagazin. Для формы Form2 укажите использовать модуль UnitDM. Для сетки DBGrid1 в инспекторе объектов укажите компонент посредник DM.DataSource2. Аналогичные действия вы уже ранее. На этом приготовления закончены, осталось только указать параметры отбора информации из базы данных. Для этих целей используется свойство SQL компонента QueryMagazin.

Свойство SQL представляет собой список строк, куда можно помещать инструкции SQL. Давайте попробуем создать очень простую инструкцию для отображения всей информации из таблицы магазин.

Изначально список строк SQL пустой, добавьте туда строку:

SELECT * FROM магазин

На языке запросов это означает: выбрать все поля из таблицы магазин.

Чтобы такой отбор был реализован активизируйте QueryMagazin – переведите свойство Active из False в True. Посмотрите на результат – не запуская приложение уже можно видеть что отбор произошел.

Давайте немного усложним запрос:

SELECT * FROM магазин WHERE цена<=150

На языке запросов это означает: выбрать все поля из таблицы магазин, такие чтобы значение поля цена было не более 150. Чтобы такой отбор был реализован активизируйте QueryMagazin.

Учитывая, что к свойствам компонентов можно обращаться во время выполнения программы, то менять запрос можно динамически – по требованию пользователя. Для этого нужно организовать обращение к свойству SQL.

Давайте разберем один несложный пример.

Для начала сделаем так, чтобы форма Form2 была доступна из формы Form1. Кликните на первой форме и через меню укажите использовать модуль второй формы. Далее разместите на первой форме кнопку Button2 для вызова второй формы и в обработчик нажатия кнопки добавьте код: Form2.ShowModal. Запустите приложение и убедитесь, что на второй форме происходит отображение только тех книг, которые не дороже 150 руб.

На первой форме рядом с кнопкой Button2 разместите Label1 с текстом «книги не дороже:» и Edit1 с текстом «150» (рис. см. ниже). В обработчик нажатия кнопки добавьте код:

procedure TForm1.Button1Click(Sender: TObject);

begin

with DM.QueryMagazin do

begin

Active:=False;

SQL.Clear;

SQL.Add('SELECT * FROM магазин WHERE цена<=150');

Active:=True;

end;

Form2.ShowModal;

end;

Метод SQL.Clear очищает список строк, а процедура SQL.Add добавляет строку.

Апробируйте программу – эффект должен быть тот же: происходит отображение только тех книг, которые не дороже 150 руб.

Теперь попробуем менять условие отбора динамически, то есть во время выполнения программы. Сейчас цена установлена жестко – 150. А мы сделаем так, чтобы в запросе цена бралась из текстового поля Edit1. Измените код в обработчике нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);

begin

with DM.QueryMagazin do

begin

Active:=False;

SQL.Clear;

SQL.Add('SELECT * FROM магазин WHERE цена<='+Edit1.Text);

Active:=True;

end;

Form2.ShowModal;

end;

Апробируйте работу программы с изменением значения Edit1.Text.

Полезным для вас будет узнать еще об одном удобном подходе к организации запросов. В дальнейшем запросы будут становиться все сложнее и объемнее, поэтому стирать полностью список строк SQL и затем его восстанавливать не самый оптимальный путь.

Можно ведь не удалять, а исправлять строки:

procedure TForm1.Button1Click(Sender: TObject);

begin

with DM.QueryMagazin do

begin

Active:=False;

SQL.Strings[0]:='SELECT * FROM магазин WHERE цена<='+Edit1.Text;

Active:=True;

end;

Form2.ShowModal;

end;

И, наконец, рассмотрим третий способ. Будем исправлять не текст запроса, а используемые в нем переменные. Для чего их необходимо сначала назначить.

Кликните один раз на компоненте QueryMagazin и в Инспекторе Объектов найдите свойство Parameters. Кликните дважды на строке этого свойства для открытия редактора параметров. В редакторе добавьте один параметр и дайте ему в Инспекторе Объектов имя cena, а также укажите тип параметра – ftString. В поле Value можно назначить значение этого параметра по умолчанию.

Теперь изменим текст запроса в свойстве SQL компонента QueryMagazin:

Как видите запрос можно писать в несколько строк, а переменные обозначаются символом «:» (двоеточие). Теперь формат запроса будет стабильным, но значение переменной в запросе будет меняться:

procedure TForm1.Button1Click(Sender: TObject);

begin

with DM.QueryMagazin do

begin

Active:=False;

Parameters.ParamByName('cena').Value:=Edit1.Text;

Active:=True;

end;

Form2.ShowModal;

end;

Для удобства пользователя можно на форму Form2 поместить одну метку Label1 и в ней отображать общее количество отобранных по критерию (WHERE цена<=:cena) из основной таблицы записей (количество записей хранится в свойстве RecordCount):

procedure TForm1.Button1Click(Sender: TObject);

begin

with DM.QueryMagazin do

begin

Active:=False;

Parameters.ParamByName('cena').Value:=Edit1.Text;

Active:=True;

Form2.Label1.Caption:='Отобрано записей: '+IntToStr(RecordCount);

end;

Form2.ShowModal;

end;

Пример выполнения запроса:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: